使用 ggplot2 叠加两个具有不同行的直方图

Overlaying two histograms with different rows using ggplot2

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

例如:

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

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

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

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

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

你可以制作一个 "long" 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)

我使用了 data.tableggplot2.

请看。诀窍是将两个对象合二为一 data.frame.

library(data.table)
library(ggplot2)

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

dt1 <- data.table( id = rep("dist1", length(dist1) ),
                  dist = dist1 )
dt2 <- data.table( id = rep("dist2", length(dist2) ),
                  dist = dist2 )

dt <- rbindlist( list( dt1, dt2 ) )

ggplot( dt, aes( x = dist, fill = id ) ) +
  geom_histogram(alpha = .3)
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

reprex package (v0.3.0)

于 2020-04-29 创建