首页 > 解决方案 > 使用 ggplot2 覆盖具有不同行的两个直方图

问题描述

我想为两个正态分布创建一个带有两个叠加直方图的图。

例如:

dist1 <- rnorm(1000, 35, 3)
dist2 <- rnorm(1200, 40, 5)

如您所见,问题是分布具有不同的行数。

当您尝试叠加这两个直方图时,会弹出一个错误。

由于相同的原因,您也不能在同一数据框中重新排列两个分布。

我想过用 NULL 值填充最小的分布,但这似乎带来的问题比它解决的要多。

标签: rggplot2histogram

解决方案


您可以制作一个“长”的 data.frame 并使用 ggplot2 绘制它:

set.seed(1)
library(ggplot2)
dist1 <- rnorm(1000, 35, 3)
dist2 <- rnorm(1200, 40, 5)

df <- data.frame(variable = c(rep("dist1", length(dist1)), 
                              rep("dist2", length(dist2))), 
                 value=c(dist1, dist2))
ggplot(df, aes(x=value, fill=variable))+
    geom_histogram()
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

您还可以考虑密度图,因为它们更容易叠加:

ggplot(df, aes(x=value, fill=variable))+
    geom_density(alpha=.5)


推荐阅读