如何使用ggplot2在R中的每个条形图上在geom_bar上放置标签


99

我发现了如何使用ggplot2在R中的geom_bar上放置标签放置标签,但是它只是将label(numbers)放在一个栏中。

假设这是每个x轴的两个条形,该怎么做?

我的数据和代码如下所示:

dat <- read.table(text = "sample Types Number
sample1 A   3641
sample2 A   3119
sample1 B   15815
sample2 B   12334
sample1 C   2706
sample2 C   3147", header=TRUE)

library(ggplot2)
bar <- ggplot(data=dat, aes(x=Types, y=Number, fill=sample)) + 
  geom_bar(position = 'dodge') + geom_text(aes(label=Number))

然后,我们将获得: 在此处输入图片说明

似乎数字文本也位于“躲避”模式中。我搜索了geom_text手册以查找一些信息,但是无法使其正常工作。

有什么建议吗?

Answers:


142

试试这个:

ggplot(data=dat, aes(x=Types, y=Number, fill=sample)) + 
     geom_bar(position = 'dodge', stat='identity') +
     geom_text(aes(label=Number), position=position_dodge(width=0.9), vjust=-0.25)

ggplot输出


2
(+1)您也可以vjust = -0.5position()语句后添加,以便将值放置在小节上方。
smillig

2
顺便说一句,非常感谢代码建议设置ymax,所以 aes(x=Types, y=Number, fill=sample, ymax = 16000)会为y轴产生较大的上部区域,以便15815可以更好地显示。
Puriney 2012年

我收到此错误:错误:stat_count()不能用于美观。
userJT

3
这个答案具有更新的语法stackoverflow.com/questions/33079500/…–
userJT

2
@Seymourgeom_text(..., angle=-90)
rcs

4

要添加到rcs的答案中,如果要在x为POSIX.ct日期时将position_dodge()与geom_bar()结合使用,则必须将宽度乘以86400,例如,

ggplot(data=dat, aes(x=Types, y=Number, fill=sample)) + 
 geom_bar(position = "dodge", stat = 'identity') +
 geom_text(aes(label=Number), position=position_dodge(width=0.9*86400), vjust=-0.25)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.