R ggplot按变量的级别绘制多个图

R ggplot按变量的级别绘制多个图,r,ggplot2,dplyr,histogram,data-visualization,R,Ggplot2,Dplyr,Histogram,Data Visualization,我有一个样本数据集 d=data.frame(n=rep(c(1,1,1,1,1,1,2,2,2,3),2),group=rep(c("A","B"),each=20),stringsAsFactors = F) 我想根据组变量画两个独立的直方图 我在这里的另一篇帖子中尝试了@jenesaisquoi建议的这种方法 它确实起了作用,但如果你仔细观察,比例是错误的。它没有计算每组的比例,而是一个大比例。我希望每组1号的比例为0.6,而不是0.3 然后我尝试了dplyr包,它甚至没有创建两个图

我有一个样本数据集

d=data.frame(n=rep(c(1,1,1,1,1,1,2,2,2,3),2),group=rep(c("A","B"),each=20),stringsAsFactors = F)
我想根据组变量画两个独立的直方图

我在这里的另一篇帖子中尝试了@jenesaisquoi建议的这种方法

它确实起了作用,但如果你仔细观察,比例是错误的。它没有计算每组的比例,而是一个大比例。我希望每组1号的比例为0.6,而不是0.3

然后我尝试了dplyr包,它甚至没有创建两个图。它忽略了
group_by
命令。但这次的比例是正确的

d%>%group_by(group)%>%ggplot(data=.)+geom_histogram(aes(x=n,y=..count../sum(..count..)),binwidth = 1)

最后,我尝试使用
颜色

ggplot(data=d)+geom_histogram(aes(x=n,y=..count../sum(..count..),color=group),binwidth = 1)
但结果远非理想。我本来打算接受一个输出,但箱子并排放置,而不是放在一起

总之,我想画两个单独的直方图,每组中计算出正确的比例。如果没有简单的方法可以做到这一点,我可以使用一个图表,但将这些箱子并排放置,并且每组的比例正确。在本例中,数字1的比例应为0.6。

通过将..count../sum(..count..)更改为..density..,它将为您提供所需的比例


ggplot(data=d)+geom_直方图(aes(x=n,y=…密度…),binwidth=1)+facet_wrap(~group)

事实上,通过变量正确地分离图表!特别是GGTRAP,有时需要考虑图形的尺度与形状的区别。code>Facet_wrap将新图层应用于数据,而不考虑比例。不管你的轴是什么,它的行为都是一样的。您也可以尝试添加
scale\u y\u log10()
作为一个层,您会注意到图形的整体形状和样式是相同的,只是更改了轴

你真正需要的是调整你的体重。可以理解-频率图可能令人困惑<代码>.count../sum(..count..))将每个箱子视为一个独立的单元,而不管其值如何。在这里可以看到一个很好的解释:

您需要的是
.density..
,它基本上是计数除以总计数。原则上差别很小,但重要的是x轴上的值很重要。对于这种极端情况,请参见此处:,其中微小的x轴值产生了巨大的密度

您的原始代码仍然有效,只需替换我上面描述的美学

ggplot(data=d)+几何柱状图(aes(x=n,y=…密度…)binwidth=1)+镶嵌面包裹(~group)


如果你仍然对密度感到困惑,那么很多人也是。Hadley Wickham写了一篇关于它的长篇文章,你可以在这里找到:

ggplot
不会在
groupby
之后为每组绘制单独的绘图;如果您需要完全独立的绘图,您可以结合使用
split
map
。但这也将比它可能值得的更复杂@路易斯·保罗·豪尔赫的回答是一个很好的直截了当的方法!你是最棒的
ggplot(data=d)+geom_histogram(aes(x=n,y=..count../sum(..count..),color=group),binwidth = 1)