【问题标题】:ggplot draw multiple plots by levels of a variableggplot 按变量的级别绘制多个图
【发布时间】:2018-10-07 12:12:24
【问题描述】:

我有一个样本数据集

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 建议的这种方法 Generating Multiple Plots in ggplot by Factor

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

它成功了,但如果你仔细观察,比例是错误的。它没有计算每个组的比例,而是一个很大的比例。我希望每个组的数字 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)

最后我尝试使用 color 进行保理

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

但结果远非理想。我打算接受一个输出,但箱子并排,而不是彼此重叠。

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

【问题讨论】:

  • ggplot 不会在group_by 之后为每个组制作单独的图;如果您需要完全独立的绘图,您可以组合使用splitmap。但这也将比它可能的价值更复杂。 @Luis Paulo Jorge 的回答是一个很好且直接的方法

标签: r ggplot2 dplyr histogram data-visualization


【解决方案1】:

您实际上已经通过变量正确地分隔图表!尤其是使用 ggplot,您有时需要将图形的比例与形状分开考虑。 Facet_wrap 将新层应用于您的数据,无论规模如何。不管你的轴是什么,它的行为都是一样的。您也可以尝试将scale_y_log10() 添加为图层,您会注意到图表的整体形状和样式是相同的,只是更改了轴。

您真正需要的是修复您的体重秤。可以理解 - 频率图可能会令人困惑。 ..count../sum(..count..)) 将每个 bin 视为一个独立的单元,无论其值如何。在这里查看一个很好的解释:Show % instead of counts in charts of categorical variables

你想要的是..density..,它基本上是计数除以总计数。原则上差异是微妙的,但重要的是 x 轴上的值很重要。对于这种极端情况,请参见此处:Normalizing y-axis in histograms in R ggplot to proportion,其中微小的 x 轴值会产生巨大的密度。

您的原始代码仍然可以工作,只需替换我上面描述的美学即可。

ggplot(data=d)+geom_histogram(aes(x=n,y=..density..,)binwidth = 1)+facet_wrap(~group)

如果您仍然对密度感到困惑,那么很多人也是如此。 Hadley Wickham 写了一篇关于它的长篇文章,你可以在这里找到:http://vita.had.co.nz/papers/density-estimation.pdf

【讨论】:

    【解决方案2】:

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

    ggplot(data=d)+geom_histogram(aes(x=n,y=..density..),binwidth = 1)+facet_wrap(~group)

    【讨论】:

    • 不错!你是顶级的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2015-04-23
    • 2015-03-16
    • 1970-01-01
    • 2015-01-31
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多