首页 > 解决方案 > 如何在每个图例的条形图中绘制百分比标签?

问题描述

我正在尝试使用 ggplot 绘制geom_bar()条形图,在 x 轴上有一个变量,在 Y 轴上有一个变量,第三个作为图例,在每个图例中,该图例占 Y 轴计数的百分比.

我使用内置mtcars数据集作为代表。

library (ggplot2)
ggplot(data = mtcars, aes(x=cyl, y= ..count..)) + 
geom_bar(aes(fill = factor(gear)))

如果可能的话,我希望以一种体面的方式在每个图例中包含这些百分比。

prop.table(table(eight$gear))

        3         5 
0.8571429 0.1428571 

prop.table(table(six$gear))

        3         4         5 
0.2857143 0.5714286 0.1428571 

prop.table(table(four$gear))
         3          4          5 
0.09090909 0.72727273 0.18181818 

此处列出了此文档

但是我达到了不能将 y 作为标签的地步,因为我是从 ggplot 特殊的起始变量中获取它的。

很抱歉我不能上传图片,因为我是一个新手,没有足够的声誉来发布图片,但是运行 mtcars 代码会生成我想要的东西。

标签: rggplot2

解决方案


我可能会分别格式化 % 标签,然后将它们作为第二个数据框添加到图表中。

使用 dplyr 格式化:

library(dplyr)
legendLabels <- mtcars %>%
  group_by(cyl, gear) %>%
  summarise(count = n()) %>%
  arrange(cyl, desc(gear)) %>%
  mutate(percent = round(count/sum(count)*100,2),
         yPos = cumsum(count))

和更新的图表:

ggplot(data = mtcars, aes(x=cyl, y= ..count..)) + 
  geom_bar(aes(fill = factor(gear))) +
  geom_text(data = legendLabels, aes(x=cyl, y=yPos-0.5, label=paste0(percent,"%")))

给出这个图表: 在此处输入图像描述

希望这是您正在寻找的。


推荐阅读