ggplot |在条上显示bin长度| stat_bin()不得与y审美一起使用

时间:2017-11-09 14:14:12

标签: r ggplot2

我需要在每个条形图的顶部显示bin长度但是stat_bin没有显示我的预期,我给出了一个简单的数据集,它与我的大数据集面临同样的问题,请帮我显示bin每个垃圾箱顶部的长度,如果可能的话请解释它的工作

没有bin长度的代码

library(ggplot2)
data <- data.frame(Brand = c('A', 'B', 'c', 'A'), ct = c(5, 4,3, 4), col = c('X', 'Y', 'X', 'X'))
ggplot(data, aes( Brand,ct, fill=col)) + geom_bar(stat="identity")

enter image description here

现在我想在A顶部显示9,在B顶部显示4,在C bar顶部显示3但是它显示我错误

ggplot(data, aes( Brand,ct, fill=col)) + geom_bar(stat="identity") + stat_bin()
  

错误:stat_bin()不得与y审美一起使用。

我在此示例代码中使用最小参数来描述我的问题。我不想在绘图之前总结数据,我期待ggplot是否有一些内置功能,因为它已经在图表中显示汇总数据,而且只是显示值。

这不是重复,因为我想探索in-build ggplot机制来显示总和,我需要在bin中显示多个图层(fill = col),如果我提前总结那么我可能会松开此记录。< / p>

1 个答案:

答案 0 :(得分:2)

强烈建议您在绘制之前先汇总数据。但是,如果由于某种原因您不想这样做,您可以这样做:

ggplot(data, aes( Brand,ct, fill=col)) + geom_bar(stat="identity") + 
      geom_text(aes(y =ave(ct, Brand, FUN = sum), label=ave(ct, Brand, FUN = sum)))

enter image description here

然而,我不建议这样做,因为它实际上绘制了两次“9”(这就是为什么它比其他数字更暗)。使用此方法无法绕过它,因为您的aes需要与数据的长度相同。这意味着您无法简单地绘制c(9,4,3)您需要绘制c(9,9,4,3)