首页 文章

如何将计数标签添加到R ggplot中的百分比条形图?

提问于
浏览
0

假设我们想要使用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 ,但我无法弄清楚如何将标签放在我想要的位置 . 相反,我的尝试通常导致计数值被置于它们自己的值,这会破坏图中百分比的比例 . Can any of you learned people tell me how to add the raw count values as text in the bars without ruining the rest of the plot?

1 回答

  • 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

相关问题