如何在每个图例的条形图中绘制百分比标签?

时间:2019-05-09 00:16:37

标签: r ggplot2

我正在尝试使用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 

有关此文档的列表为here

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

对不起,我无法上传图像,因为我是一个没有足够声誉可以发布图像的新手,但是运行mtcars代码将生成我想要的图像。

1 个答案:

答案 0 :(得分:0)

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

使用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,"%")))

提供此图表: http://phpseclib.sourceforge.net/interop.html#rsaencpkcs1,p1phpseclib,p2openssl

希望这就是您想要的。