如何使用 ggplot 中的 facet_wrap 选项可视化每个组的大小?

Posted

技术标签:

【中文标题】如何使用 ggplot 中的 facet_wrap 选项可视化每个组的大小?【英文标题】:How can I visualize the size of each group using the facet_wrap option in ggplot? 【发布时间】:2021-11-25 20:11:42 【问题描述】:

我在 ggplot 中使用 geom_bar 来可视化客户的购买决策(3 个因素级别的购买,可能是,不购买。这些决策使用 facet_wrap 分组为多个产品组。

ggplot(df, aes(x= status_purchase)) + 
  geom_bar() + 
  theme(axis.text.x = element_text(angle = 90)) + 
  facet_wrap(~ product_group)

这并不奇怪。我是否有任何选项可以为 facet_wrap 中的组可视化另一个变量(例如每个产品组的总费用)?在情节的右上角放置一个相应大小的气泡或至少是标题中的费用总和会很好。

感谢您的回答。

菲利普

【问题讨论】:

您可以使用粘贴将任何文本添加到图例/标题。或者使用geom_text向绘图中添加任意文本。 对您的问题的快速回答是“是的!”,但更具体的答案将取决于您要添加的内容。最好的选择可能是拥有一个用于绘制标签的单独数据集(如果您希望在每个方面放置文本),因为看起来您想要显示一些摘要数据,对吧?你能具体说明一下你想要什么,并提供一个你想要展示的例子吗? 【参考方案1】:

操作。在没有具体示例的情况下,让我演示一种执行此操作的方法,该方法使用geom_text() 显示分离到多个方面的给定数据集的摘要数据。

在本例中,我将使用 txhousing 数据集(它是 ggplot2 的一部分):

library(dplyr)
library(tidyr)
library(ggplot2)

df <- txhousing
df %>% ggplot(aes(x=month, y=sales)) + geom_col() +
  facet_wrap(~year)

假设我们想在每个方面的右上角显示一年的红色总销售额。最简单的方法是首先在单独的数据集中计算我们的汇总数据,然后通过geom_text() 根据各个方面覆盖该信息。

df_summary <- df %>%
  group_by(year) %>%
  summarize(total = sum(sales, na.rm = TRUE))

df %>% ggplot(aes(x=month, y=sales)) + geom_col() +
  facet_wrap(~year) +
  geom_text(
    data=df_summary, x=12, y=33000, aes(label=total),
    hjust=1, color='red', size=3
  )

我在geom_text() 调用中覆盖了xy 美学的映射。只要df_summary 数据集包含名为year 的列,数据就会正确地放置在构面上。

我希望您可以将类似的想法应用于您的特定问题。

【讨论】:

谢谢这个解决方案工作正常。我用 geom_label 代替。

以上是关于如何使用 ggplot 中的 facet_wrap 选项可视化每个组的大小?的主要内容,如果未能解决你的问题,请参考以下文章

Facet_Wrap标题与ggplotly中的y轴重叠?

在 ggplot/ggplotly 中使用 facet_wrap 时如何防止 y 轴挤压标签?

如何使用 ggplot2 删除 facet_wrap 图中的额外列?

ggplot重命名facet_wrap中的构面标签

将刻面ggplots(facet_wrap)与R中的cowplot对齐

为 R 中的 facet_wrap 直方图的每个图分配自定义颜色 - ggplot