使用 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.table 和 ggplot2.
请看。诀窍是将两个对象合二为一 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 创建
我想为两个正态分布创建一个具有两个重叠直方图的图。
例如:
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.table 和 ggplot2.
请看。诀窍是将两个对象合二为一 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 创建