【问题标题】:Labeling stacked bar plot with stat="bin" in ggplot2在 ggplot2 中使用 stat="bin" 标记堆积条形图
【发布时间】:2013-11-07 22:28:53
【问题描述】:

似乎 ggplot2 应该能够使用 geom_text 标记堆积条形图,并在 geom_bar 中对数据框的子集执行计数统计,而无需专门为标签重新创建新的数据框。这可能吗?

这是我的数据框的样子:

> head(df.m2)
Community        Categories               Indicators  Code Scores  Condition
1  Zaragoza         Landscape Landscape \n Composition f01.1      0   Marginal
2  Zaragoza         Landscape               Windbreaks f01.1      6 Acceptable
3  Zaragoza         Landscape        Field \n Location f01.1      6 Acceptable
4  Zaragoza         Landscape     Soil \n Conservation f01.1     12    Optimal
5  Zaragoza Farmer Management         Crop \n Rotation f01.1     12    Optimal
6  Zaragoza Farmer Management        Crop \n Varieties f01.1      6 Acceptable

这是我用来创建绘图的代码(注意用于汇总分类变量的 stat="bin"):

p <- ggplot(df.m2, aes(Indicators, fill=Condition))
p + coord_cartesian(ylim=c(-.3,12.3)) +
geom_bar(stat="bin", colour="gray", alpha=.7) +
scale_fill_manual(values = c("green","yellow","red")) +
theme(axis.text.x = element_text(angle = 90,vjust= .5,hjust=1)) +
labs(x = "Farmers' Indicators", y = "Number of Rankings by Farmers") +
facet_grid(Community ~ Categories, scales = "free_x")

我想包含生成的情节,但我的声誉等级不允许。我想要的是将计数打印并集中在每个相应的条上。

【问题讨论】:

  • search on SO,我相信你会找到几个很好的例子,你可以适应自己的数据。
  • @Henrik 是的,我今天在发布之前搜索并阅读了大约 3 个小时。我读到的没有一个专门解决我的问题。据我所知,解决方案非常复杂,并且使用 plyr 和其他此类软件包来操作数据,而不是简单地使用 ggplot 的 stat 功能。如果您正在考虑某个特定的帖子,欢迎与我分享。

标签: r ggplot2 labels


【解决方案1】:

我会为此使用data.table 包。它仍然不适用于仅ggplot 功能。通常最好先做数据匹配,然后使用ggplot

require(data.table)
dt.m2 <- data.table(df.m2)
dt.m2[, count:=.N, by=list(Indicators, Categories)] # create the count index 
# almost the same as before
p <- ggplot(dt.m2, aes(Indicators, fill=Condition))
p + coord_cartesian(ylim=c(-.3,12.3)) +
  geom_bar(stat="bin", colour="gray", alpha=.7) +
  geom_text(aes(y=count+1, label=paste0("n=", count))) + # add text above bar
  # you may have to change the y position for this to look good
  scale_fill_manual(values = c("green","yellow","red")) +
  theme(axis.text.x = element_text(angle = 90,vjust= .5,hjust=1)) +
  labs(x = "Farmers' Indicators", y = "Number of Rankings by Farmers") +
  facet_grid(Community ~ Categories, scales = "free_x") 

【讨论】:

  • 感谢您的建议,我将不得不询问 ggplot2 人员关于在未来版本的标签中包含 stat="bin" 的问题。我还没有弄清楚如何使您的解决方案起作用;错误比比皆是,产生的计数不适合我想要做的标签。但是,与我提出的问题相比,这更像是我的情节的一个具体问题,所以不要觉得有义务跟进。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多