Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 让ggplot2直方图显示y轴上的类别百分比_R_Ggplot2 - Fatal编程技术网

R 让ggplot2直方图显示y轴上的类别百分比

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.

我想比较颜色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..), 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)