如何使用分组的条形图调整标签

时间:2020-11-08 17:17:10

标签: r ggplot2

我有一个分组的计数数据条形图,并且希望将标签放置在每个条形的中点。但是,我不知道如何将vjust语句添加到标签的位置-它会不断出现geom_text和stat_count错误。任何帮助都将是惊人的!

data <- data.frame(month = c(3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
                   3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
                   4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 
                   5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
                   5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
                   5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 
                   6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 
                   6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 
                   6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 
                   6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 
                   7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 
                   7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
                   8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 
                   9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
                   9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
                   9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 
                   10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 
                   10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 
                   10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 
                   11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 
                   11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11),
                   year = c(2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2019, 2019, 2019, 2019, 2019, 2019, 
                            2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 
                            2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 
                            2019, 2019, 2019, 2019, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2019, 2019, 2019, 2019, 2019, 
                            2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 
                            2019, 2019, 2019, 2019, 2019, 2019, 2019, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2020, 2019, 2019, 2019, 2019, 
                            2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2019, 2019, 2019, 2019, 2019, 
                            2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 
                            2019, 2019, 2019, 2019, 2019, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2019, 2019, 2019, 2019, 2019, 2019, 
                            2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2019, 2019, 2019, 2019, 2019, 2019, 
                            2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 
                            2020, 2020, 2020, 2020))

ggplot(data, aes(x=factor(month), fill=factor(year))) +
  geom_bar(stat="count", position = position_dodge2(preserve = "single"), colour="black") +
  stat_count(geom = "text", colour = "black", size = 4,
             aes(label = ..count..), position=position_dodge(width=0.9))

enter image description here

1 个答案:

答案 0 :(得分:1)

这可以通过将..count.. / 2映射到y来实现:

library(ggplot2)

ggplot(data, aes(x=factor(month), fill=factor(year))) +
  geom_bar(stat="count", position = position_dodge2(preserve = "single"), colour="black") +
  stat_count(geom = "text", colour = "black", size = 4,
             aes(label = ..count.., y = ..count.. / 2), position=position_dodge(width=0.9))

相关问题