R facet_wrap 和 geom_density 有多个组
R facet_wrap and geom_density with multiple groups
这是我的数据框:
df <- data.frame(state = sample(c(0, 1), replace = TRUE, size = 100),
X1 = rnorm(100, 0, 1),
X2 = rnorm(100, 1, 2),
X3 = rnorm(100, 2, 3))
我想做的是在同一个图上为每个变量 X1, X2, X3
绘制两个 densities/histograms(给定 state
的值)的情节是在同一个方面。我分别做了这些事情:
ggplot() +
geom_density(data = df, aes(x = X1, group = state, fill = state), alpha = 0.5, adjust = 2) +
xlab("X1") +
ylab("Density")
ggplot(gather(df[df$state == 0, 2:4]), aes(value)) +
geom_density() +
facet_wrap(~key, scales = 'free_x')
但我很难让它一起工作。
我假设您想要变量 X1、X2 和 X3 的三个方面,每个方面都有两条由状态填充的曲线。
您需要使用 dplyr::mutate()
将 state
转换为一个因子,使其成为分类变量。我还会使用更新的 tidyr::pivot_longer()
而不是 gather
:这将默认生成列 name
+ value
。
您的数据,但带有种子以使其可重现并命名为 df1
:
set.seed(1001)
df1 <- data.frame(state = sample(c(0, 1), replace = TRUE, size = 100),
X1 = rnorm(100, 0, 1),
X2 = rnorm(100, 1, 2),
X3 = rnorm(100, 2, 3))
剧情:
library(dplyr)
library(tidyr)
library(ggplot2)
df1 %>%
pivot_longer(-state) %>%
mutate(state = as.factor(state)) %>%
ggplot(aes(value)) +
geom_density(aes(fill = state), alpha = 0.5) +
facet_wrap(~name)
结果:
这是我的数据框:
df <- data.frame(state = sample(c(0, 1), replace = TRUE, size = 100),
X1 = rnorm(100, 0, 1),
X2 = rnorm(100, 1, 2),
X3 = rnorm(100, 2, 3))
我想做的是在同一个图上为每个变量 X1, X2, X3
绘制两个 densities/histograms(给定 state
的值)的情节是在同一个方面。我分别做了这些事情:
ggplot() +
geom_density(data = df, aes(x = X1, group = state, fill = state), alpha = 0.5, adjust = 2) +
xlab("X1") +
ylab("Density")
ggplot(gather(df[df$state == 0, 2:4]), aes(value)) +
geom_density() +
facet_wrap(~key, scales = 'free_x')
但我很难让它一起工作。
我假设您想要变量 X1、X2 和 X3 的三个方面,每个方面都有两条由状态填充的曲线。
您需要使用 dplyr::mutate()
将 state
转换为一个因子,使其成为分类变量。我还会使用更新的 tidyr::pivot_longer()
而不是 gather
:这将默认生成列 name
+ value
。
您的数据,但带有种子以使其可重现并命名为 df1
:
set.seed(1001)
df1 <- data.frame(state = sample(c(0, 1), replace = TRUE, size = 100),
X1 = rnorm(100, 0, 1),
X2 = rnorm(100, 1, 2),
X3 = rnorm(100, 2, 3))
剧情:
library(dplyr)
library(tidyr)
library(ggplot2)
df1 %>%
pivot_longer(-state) %>%
mutate(state = as.factor(state)) %>%
ggplot(aes(value)) +
geom_density(aes(fill = state), alpha = 0.5) +
facet_wrap(~name)
结果: