R 让ggplot2直方图显示y轴上的类别百分比
我想比较颜色D和E的克拉柱状图,并使用y轴上的类别百分比。我尝试过的解决方案如下: 解决方案1:R 让ggplot2直方图显示y轴上的类别百分比,r,ggplot2,R,Ggplot2,我想比较颜色D和E的克拉柱状图,并使用y轴上的类别百分比。我尝试过的解决方案如下: 解决方案1: library(ggplot2) data = diamonds[, c('carat', 'color')] data = data[data$color %in% c('D', 'E'), ] 这并不完全正确,因为y轴显示了估计密度的高度 解决方案2: ggplot(data=data, aes(carat, fill=color)) + geom_bar(aes(y=..density.
library(ggplot2)
data = diamonds[, c('carat', 'color')]
data = data[data$color %in% c('D', 'E'), ]
这并不完全正确,因为y轴显示了估计密度的高度
解决方案2:
ggplot(data=data, aes(carat, fill=color)) + geom_bar(aes(y=..density..), position='dodge', binwidth = 0.5) + ylab("Percentage") +xlab("Carat")
这也不是我想要的,因为用于计算y轴上比率的分母是D+E的总计数
有没有办法用ggplot2的堆叠直方图显示按类百分比?也就是说,我不希望在y轴上显示(#obs in bin)/count(D+E),而是希望它分别显示两个颜色类别的(#obs in bin)/count(D)和(#obs in bin)/count(E)。谢谢。将数据放在ggplot2之外似乎是一种方法。但我仍然有兴趣看看是否有办法用ggplot2实现这一点
ggplot(data=data, aes(carat, fill=color)) + geom_histogram(aes(y=(..count..)/sum(..count..)), position='dodge', binwidth = 0.5) + ylab("Percentage") +xlab("Carat")
您可以通过使用
.group..
特殊变量来子集.count..
向量,按组缩放它们。因为有这么多的点,它很难看,但现在它来了
library(dplyr)
breaks = seq(0,4,0.5)
data$carat_cut = cut(data$carat, breaks = breaks)
data_cut = data %>%
group_by(color, carat_cut) %>%
summarise (n = n()) %>%
mutate(freq = n / sum(n))
ggplot(data=data_cut, aes(x = carat_cut, y=freq*100, fill=color)) + geom_bar(stat="identity",position="dodge") + scale_x_discrete(labels = breaks) + ylab("Percentage") +xlab("Carat")
当我尝试罗夏的答案时,它对我不起作用,原因并不明显,但我想评论一下,如果你愿意在直方图中添加密度线,一旦你这样做,它会自动将y轴更改为百分比 例如,我有一个二元结果(0,1)的“剂量”计数 此代码生成以下图形:
ggplot(data, aes(carat, fill=color)) +
geom_histogram(aes(y=c(..count..[..group..==1]/sum(..count..[..group..==1]),
..count..[..group..==2]/sum(..count..[..group..==2]))*100),
position='dodge', binwidth=0.5) +
ylab("Percentage") + xlab("Carat")
但当我在ggplot代码中加入一个密度图并加上y=…密度。。我得到了Y轴上有百分比的曲线图
ggplot(data, aes(x=siadoses, fill=recallbin, color=recallbin)) +
geom_histogram(binwidth=1, alpha=.5, position='identity')
有点绕开你的原始问题,但我想与你分享。你考虑过在ggplot之外总结你的数据吗?与其将
aes
y向量缩放100,你只需添加scale\u y\u continuous(labels=percent)
。Hrrrm,我能在哪里读到“.count..”和“.group..”的信息特殊变量及其作用方式?我不太明白程序是如何理解如何将组号与颜色联系起来的@Magnus我已经有一段时间没有研究细节了,但是IIRC的…
对应于ggplot\u build(ggplot(data,…)$data
中的列aes
执行一系列元操作来转换变量名
ggplot(data, aes(x=siadoses, fill=recallbin, color=recallbin)) +
geom_histogram(aes(y=..density..), binwidth=1, alpha=.5, position='identity') +
geom_density(alpha=.2)