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)