如何在R ggplot中为百分比条形图添加计数标签?

时间:2018-03-27 02:36:34

标签: r ggplot2 bar-chart geom-bar geom-text

假设我们想要使用R ggplot来生成一个条形图,显示某个类别变量在另一个类别变量中的百分比。下面是R中的一个小数据框和一些代码,以获得我想要的漂亮的条形图。

MYDATA <- data.frame(Region = c(1, 1, 2, 2, 3, 3, 4, 4, 5, 5),
                     Sex    = c("M", "F", "M", "F", "M", "F", "M", "F", "M", "F"),
                     Count  = c(185, 130, 266, 201, 304, 283, 102, 60, 55, 51));

library(ggplot2);

ggplot(data = MYDATA, aes(x = Region, y = Count, fill = Sex)) + 
       geom_bar(position = "fill", stat = 'identity') + 
       scale_y_continuous(labels = scales::percent) +   
       scale_fill_manual(values = c("Maroon1", "RoyalBlue1")) +
       ggtitle("Figure 1: Sex breakdown by Region") +
       xlab("Region") + ylab("Percentage");

enter image description here

现在,我想通过添加显示条形内原始计数值的文本来补充此条形图。对于女性,我希望计数显示在图表的顶部,在粉红色的条形图内。对于雄性,我希望计数显示在图形的底部,在蓝色条形图内。我尝试过使用geom_text,但我无法弄清楚如何将标签放在我想要的位置。相反,我的尝试通常导致计数值被置于它们自己的值,这会破坏图中百分比的比例。 你们当中有人能告诉我如何将原始计数值作为文本添加到条形图中而不会破坏其余的情节吗?

1 个答案:

答案 0 :(得分:2)

好的,所以在发布这个问题之后我找到了一个解决方案。尽管回答了我自己的问题(对不起家伙),我会留下这篇文章,以防任何人遇到他们需要解决的同样问题。请随意添加其他解决方案。

最终工作的诀窍是通过两次调用geom_text并使用ifelse命令为每个性别指定单独的标签,以便一次仅为一个性别输入标签,并且在每个陈述中的期望高度处手动y定位。这是代码和情节:

ggplot(data = MYDATA, aes(x = Region, y = Count, fill = Sex)) + 
       geom_bar(position = "fill", stat = 'identity') + 
       geom_text(aes(label = ifelse(Sex == "F", Count, "")), y = 0.95) +
       geom_text(aes(label = ifelse(Sex == "M", Count, "")), y = 0.05) +
       scale_y_continuous(labels = scales::percent) +   
       scale_fill_manual(values = c("Maroon1", "RoyalBlue1")) +
       ggtitle("Figure 1: Sex breakdown by Region") +
       xlab("Region") + ylab("Percentage");

enter image description here