R 在ggplot2中使用百分比绘制直方图

R 在ggplot2中使用百分比绘制直方图,r,ggplot2,R,Ggplot2,我正在尝试使用ggplot2绘制直方图,y轴为百分比,x轴为数值 我的一个数据和脚本示例如下所示(见下文),大约有100000行(或更多行) ggplot(数据,aes(A,颜色=B))+geom_bar()+stat_bin(breaks=seq(0,1,by=0.05))+scale_y_连续(标签=百分比) 我想知道在一个值的每个bin中分布的B值的百分比,而不是每个A值的B值的数量 现在的代码给了我一个y轴,ymax为15000。y轴应以百分比(0-100)表示。这是您想要的吗?我假设您

我正在尝试使用ggplot2绘制直方图,y轴为百分比,x轴为数值

我的一个数据和脚本示例如下所示(见下文),大约有100000行(或更多行)

ggplot(数据,aes(A,颜色=B))+geom_bar()+stat_bin(breaks=seq(0,1,by=0.05))+scale_y_连续(标签=百分比)

我想知道在一个值的每个bin中分布的B值的百分比,而不是每个A值的B值的数量


现在的代码给了我一个y轴,ymax为15000。y轴应以百分比(0-100)表示。

这是您想要的吗?我假设您的数据帧称为df:

# calculate proportions of B for each level of A
df2 <- as.data.frame(with(df, prop.table(table(A, B))))
df2
#       A B      Freq
# 1   0.2 x 0.1666667
# 2   0.5 x 0.3333333
# 3 0.995 x 0.1666667
# 4     1 x 0.0000000
# 5   0.2 y 0.1666667
# 6   0.5 y 0.0000000
# 7 0.995 y 0.0000000
# 8     1 y 0.1666667

ggplot(data = df2, aes(x = A, y = Freq, fill = B)) +
geom_bar(stat = "identity", position = position_dodge())
#计算A的每一级B的比例

是的!但是,当我尝试使用第一行添加频率列时,我的数据会缩短,并且缺少一些B值。@Mengll,对不起,我不太明白你的意思。转换为数据帧的频率表是原始数据帧的聚合版本,因此您的数据将“缩短”。假设你有500行y=0.5。这些将归结为“bin”0.5中y百分比的一行。我不理解这一点,但现在它是有意义的。我的结果图看起来很奇怪,但这可能是因为我自己的数据集。非常感谢。
# calculate proportions of B for each level of A
df2 <- as.data.frame(with(df, prop.table(table(A, B))))
df2
#       A B      Freq
# 1   0.2 x 0.1666667
# 2   0.5 x 0.3333333
# 3 0.995 x 0.1666667
# 4     1 x 0.0000000
# 5   0.2 y 0.1666667
# 6   0.5 y 0.0000000
# 7 0.995 y 0.0000000
# 8     1 y 0.1666667

ggplot(data = df2, aes(x = A, y = Freq, fill = B)) +
geom_bar(stat = "identity", position = position_dodge())