R:基于列的条件用线覆盖密度图
R: overlay density plot with lines based on condition of a column
我有一个数据框,它由一列条件(字符串)和多列数值组成。对于每一列,我想创建一个重叠的密度图,其中每条线代表一个条件。我发现了很多解决方案,可以将每一列作为一条线叠加在同一图上,但没有找到如何通过根据条件分组来创建线。由于这是一个大型数据集,我宁愿不手动指定组。
condition
c2
c3
c4
b
1
0
2
c
3
1
2
a
5
0
1
a
2
4
3
c
1
1
1
b
2
3
3
a
1
0
2
c
3
1
2
c
6
0
2
a
2
0
1
c
1
3
1
b
4
3
0
使用这个示例数据,我想为第 2-4 列的每一列绘制一个密度图。每个图应该有 3 条线(代表 a、b 和 c)。
我最好用 ggplot 来做这个。
library(tidyr)
library(ggplot2)
df %>%
pivot_longer(-condition) %>%
ggplot(aes(value, color = condition)) +
geom_density() +
facet_wrap(~ name)
returns
编辑
感谢 Brenton M. Wiernik 的评论,我们可以使用 scales = "free"
单独缩放所有地块。
df %>%
pivot_longer(-condition) %>%
ggplot(aes(value, color = condition)) +
geom_density(alpha = .3) +
facet_wrap(~ name, scales = "free")
returns
另一种选择是ggdensity
library(ggpubr)
out <- ggdensity(df, x = c("c2", "c3", "c4"), color = "condition",
fill = "condition")
ggarrange(plotlist = out, ncol = 2, nrow = 2)
-输出
数据
df <- structure(list(condition = c("b", "c", "a", "a", "c", "b", "a",
"c", "c", "a", "c", "b"), c2 = c(1L, 3L, 5L, 2L, 1L, 2L, 1L,
3L, 6L, 2L, 1L, 4L), c3 = c(0L, 1L, 0L, 4L, 1L, 3L, 0L, 1L, 0L,
0L, 3L, 3L), c4 = c(2L, 2L, 1L, 3L, 1L, 3L, 2L, 2L, 2L, 1L, 1L,
0L)), class = "data.frame", row.names = c(NA, -12L))
ggplot(df, aes(x = value, fill = condition)) +
geom_density(alpha = 0.5) +
facet_wrap(~name, scales = "free_x") +
theme_classic()
我有一个数据框,它由一列条件(字符串)和多列数值组成。对于每一列,我想创建一个重叠的密度图,其中每条线代表一个条件。我发现了很多解决方案,可以将每一列作为一条线叠加在同一图上,但没有找到如何通过根据条件分组来创建线。由于这是一个大型数据集,我宁愿不手动指定组。
condition | c2 | c3 | c4 |
---|---|---|---|
b | 1 | 0 | 2 |
c | 3 | 1 | 2 |
a | 5 | 0 | 1 |
a | 2 | 4 | 3 |
c | 1 | 1 | 1 |
b | 2 | 3 | 3 |
a | 1 | 0 | 2 |
c | 3 | 1 | 2 |
c | 6 | 0 | 2 |
a | 2 | 0 | 1 |
c | 1 | 3 | 1 |
b | 4 | 3 | 0 |
使用这个示例数据,我想为第 2-4 列的每一列绘制一个密度图。每个图应该有 3 条线(代表 a、b 和 c)。
我最好用 ggplot 来做这个。
library(tidyr)
library(ggplot2)
df %>%
pivot_longer(-condition) %>%
ggplot(aes(value, color = condition)) +
geom_density() +
facet_wrap(~ name)
returns
编辑
感谢 Brenton M. Wiernik 的评论,我们可以使用 scales = "free"
单独缩放所有地块。
df %>%
pivot_longer(-condition) %>%
ggplot(aes(value, color = condition)) +
geom_density(alpha = .3) +
facet_wrap(~ name, scales = "free")
returns
另一种选择是ggdensity
library(ggpubr)
out <- ggdensity(df, x = c("c2", "c3", "c4"), color = "condition",
fill = "condition")
ggarrange(plotlist = out, ncol = 2, nrow = 2)
-输出
数据
df <- structure(list(condition = c("b", "c", "a", "a", "c", "b", "a",
"c", "c", "a", "c", "b"), c2 = c(1L, 3L, 5L, 2L, 1L, 2L, 1L,
3L, 6L, 2L, 1L, 4L), c3 = c(0L, 1L, 0L, 4L, 1L, 3L, 0L, 1L, 0L,
0L, 3L, 3L), c4 = c(2L, 2L, 1L, 3L, 1L, 3L, 2L, 2L, 2L, 1L, 1L,
0L)), class = "data.frame", row.names = c(NA, -12L))
ggplot(df, aes(x = value, fill = condition)) +
geom_density(alpha = 0.5) +
facet_wrap(~name, scales = "free_x") +
theme_classic()