繁体   English   中英

R (ggplot2) 中的堆积条形图,y 轴和条形作为计数的百分比

[英]Stacked bar chart in R (ggplot2) with y axis and bars as percentage of counts

我是 ggplot2 的新手,有一个关于生成堆积条形图的问题。 我查看了这本书和专用网页,但无法解决问题。 我有两个因素,其中一个有 2 个级别(存在 - 不存在),其他 10 个级别。 让我们称这两个为“变量”和“水果”。

我想创建一个堆叠条形图,其中每个条形反映一种水果,并且“变量”中存在-不存在观察的数量彼此堆叠。 这相对容易(请参阅下面图 1 的代码),但我还希望条形和 y 轴将“变量”中存在-不存在的计数表示为百分比。 换句话说,所有条形都应具有相同的高度(反映总数为 100%),并且存在与不存在观察的计数应转换为百分比。

我可以使用 ..count..*100/sum(..count..) 将 y 轴比例更改为百分比,但我无法理解如何转换实际条形。 我创建了另一个带有分面的图(下面图 2 的代码),它在百分比方面达到了我想要的效果,但我更喜欢两个条形图。 有没有人知道如何实现这一目标? 我提供了虚拟数据和可重复的示例。 谢谢你的帮助。

史蒂夫

dat <- data.frame( fruit=c("Apple", "Apple", "Orange", "Orange", "Orange", "Orange",
                   "Orange", "Pear", "Pear", "Pear"), variable=c("Present", "Absent",
                   "Present", "Present", "Present", "Present", "Absent", "Absent",
                   "Absent", "Present") )  

# stacked bar plot  
ggplot(dat, aes(x = fruit, fill = variable) ) +  
    geom_bar( aes(y = ..count..*100/sum(..count..) ) ) +
    xlab("Fruit") +
    ylab("Would like this to be percentage") + 
    scale_fill_manual("Condition", values = alpha( c("firebrick", "dodgerblue4"), 1) )  

在此处输入图片说明

# with faceting  
ggplot(dat, aes(x = variable, fill = variable) ) +   
    geom_bar( aes(y = ..count..*100/sum(..count..) ) ) +   
    facet_grid(. ~ fruit) +  
    xlab("Fruit") +
    ylab("Would like this to be percentage") + 
    scale_fill_manual("Condition", values = alpha( c("firebrick", "dodgerblue4"), 1) )  

在此处输入图片说明

对于第一个图形,只需将 position = 'fill' 添加到您的 geom_bar 线! 您实际上不需要缩放计数,因为 ggplot 有一种方法可以自动执行此操作。

ggplot(dat, aes(x = fruit)) + geom_bar(aes(fill = variable), position = 'fill')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM