ggplot关于群体百分比的条形图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ggplot关于群体百分比的条形图相关的知识,希望对你有一定的参考价值。

如果我执行以下命令

data(mtcars)
ggplot(data=mtcars, aes(cyl))+
  geom_bar(aes(fill=as.factor(gear), y = (..count..)/sum(..count..)), position="dodge") + 
  scale_y_continuous(labels=percent)

我会得到enter image description here

但是,我真正想做的是让每个gear级别加起来达到100%。所以,gear是我正在看的子组,我想知道每个组内的分布。

我不想使用facets,我也不想融化数据。有没有办法做到这一点?

答案

首先:你的代码对我来说是不可复制的(即使包括library(ggplot2)也没有)。我不确定..count..是否是一种我不知道的花哨语法,但无论如何如果我能够立即重现它会更好:-)。

话虽如此,我认为你正在寻找它在http://docs.ggplot2.org/current/geom_bar.html中描述并应用于你的例子代码

library(ggplot2)
data(mtcars)
mtcars$gear <- as.factor(mtcars$gear)
ggplot(data=mtcars, aes(cyl))+
  geom_bar(aes(fill=as.factor(gear)), position="fill")

产生

enter image description here

这是你想要的?


事后的想法:学习melt()或其替代品是必须的。然而,来自melt()reshape2gather()包装的tidyr的大多数用例中都获得了成功。

另一答案

我正在寻找这个确切问题的答案。这就是我使用Stack Overflow汇集在一起​​的信息以及熟悉..x ..,.. group ..和..count的一些反复试验所提出的信息。它应该不需要除了ggplot之外的任何其他软件包。

library(ggplot2)
ggplot(mtcars, aes(x=as.factor(cyl), fill=as.factor(gear)))+
  geom_bar(aes( y=..count../tapply(..count.., ..x.. ,sum)[..x..]), position="dodge" ) +
  geom_text(aes( y=..count../tapply(..count.., ..x.. ,sum)[..x..], label=scales::percent(..count../tapply(..count.., ..x.. ,sum)[..x..]) ),
            stat="count", position=position_dodge(0.9), vjust=-0.5)+
  ylab('Percent of Cylinder Group, %') +
  scale_y_continuous(labels = scales::percent)

生产enter image description here

另一答案

这是一个很好的资源,如何从Sebastian Sauer这样做。解决问题的最快方法是Way 4,其中你为..prop..替换(..count..)/sum(..count)

# Dropping scale_y_continuous, since you do not define percent
ggplot(data=mtcars, aes(cyl))+
  geom_bar(aes(fill=as.factor(gear), y = (..count..)/sum(..count..)), 
position="dodge")

我使用的另一种方法与链接页面中的方法1类似,是使用dplyr来计算百分比,并使用stat = 'identity'在条形图中使用y美学:

mtcars %>%
  mutate(gear = factor(gear)) %>%
  group_by(gear, cyl) %>%
  count() %>%
  group_by(gear) %>%
  mutate(percentage = n/sum(n)) %>%
  ggplot(aes(x = cyl, y = percentage, fill = gear)) +
    geom_bar(position = 'dodge', stat = 'identity')

以上是关于ggplot关于群体百分比的条形图的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化:ggplot2可视化水平堆叠条形图并且在每个堆叠条形图的内部居中添加百分比文本标签信息

将百分比标签添加到堆积条形图ggplot2

R语言ggplot2可视化:使用dplyr包计算每个分组个数的比例使用ggplot2可视化条形图(bar plot)并在条形图上添加百分比标签

R语言ggplot2可视化:使用dplyr包计算每个分组个数的比例(对计算获得的百分比进行近似,值保留整数部分)使用ggplot2可视化条形图(bar plot)并在条形图上添加百分比标签

带有组和构面的堆叠 ggplot 条形图的百分比标签

R Shiny ggplot 条形图和折线图,具有动态变量选择和 y 轴为百分比