首页 > 解决方案 > 如何用两个类来调整 ggplot2 直方图,每个类都有独立的级别?

问题描述

假设我有这些数据:

xy <- data.frame(cbind(c(1,2,3,4,5,2,3,4),c(rep('A',5),rep('B',3))))

所以,当我输入

ggplot(xy, aes(x = x, fill = y)) +   
  geom_histogram(aes(y=..count../sum(..count..)), position = "dodge")

我得到这个图形:

在此处输入图像描述

但我想看到水平独立地拉平,即红条拉平至 0.2,蓝条拉平至 0.333。我怎样才能实现它?

另外,如何设置 y 轴以百分比而不是小数显示数字?

提前谢谢了。

标签: rggplot2histogram

解决方案


这似乎可以完成这项工作。它使用 ..density.. 而不是 ..count..,这是一种相当丑陋的方式来计算 A/B 因子列中的级别数,然后使用 scales 包来获取 y 轴上的标签

ggplot(xy, aes(x = x, fill = y)) +
  geom_histogram(aes(y=..density../sum(..density..)*length(unique(xy$y)), group = y), position = "dodge") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1))

推荐阅读