密度图网格,每组绘制参考数据
grid of density plots with reference data plotted in each group
假设我有一个数据框:
df = data.frame(var = c("a", "a", "b", "b", "c", "c", "a", "a", "b", "b", "c", "c", "a", "a", "b", "b", "c", "c"),
source = c("ref", "ref", "ref", "ref", "ref", "ref", "source1", "source1", "source1", "source1", "source1", "source1", "source2", "source2", "source2", "source2", "source2", "source2"),
value = c(2.5, 1, 3.5, 1.6, 2.2, 3.1, 2, 1.2, 1.8, 0.4, 1.4, 1.3, 3, 2.8, 4, 3.6, 2.9, 3.8))
> df
var source value
1 a ref 2.5
2 a ref 1.0
3 b ref 3.5
4 b ref 1.6
5 c ref 2.2
6 c ref 3.1
7 a source1 2.0
8 a source1 1.2
9 b source1 1.8
10 b source1 0.4
11 c source1 1.4
12 c source1 1.3
13 a source2 3.0
14 a source2 2.8
15 b source2 4.0
16 b source2 3.6
17 c source2 2.9
18 c source2 3.8
并且我想为每个 var
/ source
对生成 value
的密度图。适用于:
library(tidyverse)
library(ggplot2)
df %>%
ggplot(aes(x = value)) +
geom_density(aes(y = ..density.., fill = source), adjust = 1, alpha = 0.5) +
facet_grid(source ~ var, scales = "fixed") +
theme_bw()
生产:
但根据这个例子,我真正想要的是只有两行,对应于 source1
和 source2
,并根据值在每个图中添加另一条密度曲线来自 ref
.
我试图在 之后找到解决方案,但没有成功。
换句话说,我希望网格中的每个图都将 ref
中的值分布作为参考,而 ref
组为 而不是 在情节图例中被考虑在内。
非常感谢任何帮助。谢谢。
一种选择是将您的数据框一分为二,一个包含参考值,一个包含其他值。对于包含参考值的 df,我们还必须删除 source
列。然后利用两个geom_density
。从图例中删除引用没什么大不了的。只需删除填充 aes 并设置所需的填充颜色(如果有)作为参数。在我下面的代码中,我简单地设置了 fill=NA
.
library(ggplot2)
df1 <- df[df$source == "ref", -2]
df2 <- df[!df$source == "ref", ]
ggplot(mapping = aes(x = value)) +
geom_density(data = df1, aes(y = ..density..), fill = NA, adjust = 1, alpha = 0.5) +
geom_density(data = df2, aes(y = ..density.., fill = source), adjust = 1, alpha = 0.5) +
facet_grid(source ~ var, scales = "fixed") +
theme_bw()
假设我有一个数据框:
df = data.frame(var = c("a", "a", "b", "b", "c", "c", "a", "a", "b", "b", "c", "c", "a", "a", "b", "b", "c", "c"),
source = c("ref", "ref", "ref", "ref", "ref", "ref", "source1", "source1", "source1", "source1", "source1", "source1", "source2", "source2", "source2", "source2", "source2", "source2"),
value = c(2.5, 1, 3.5, 1.6, 2.2, 3.1, 2, 1.2, 1.8, 0.4, 1.4, 1.3, 3, 2.8, 4, 3.6, 2.9, 3.8))
> df
var source value
1 a ref 2.5
2 a ref 1.0
3 b ref 3.5
4 b ref 1.6
5 c ref 2.2
6 c ref 3.1
7 a source1 2.0
8 a source1 1.2
9 b source1 1.8
10 b source1 0.4
11 c source1 1.4
12 c source1 1.3
13 a source2 3.0
14 a source2 2.8
15 b source2 4.0
16 b source2 3.6
17 c source2 2.9
18 c source2 3.8
并且我想为每个 var
/ source
对生成 value
的密度图。适用于:
library(tidyverse)
library(ggplot2)
df %>%
ggplot(aes(x = value)) +
geom_density(aes(y = ..density.., fill = source), adjust = 1, alpha = 0.5) +
facet_grid(source ~ var, scales = "fixed") +
theme_bw()
生产:
但根据这个例子,我真正想要的是只有两行,对应于 source1
和 source2
,并根据值在每个图中添加另一条密度曲线来自 ref
.
我试图在 ref
中的值分布作为参考,而 ref
组为 而不是 在情节图例中被考虑在内。
非常感谢任何帮助。谢谢。
一种选择是将您的数据框一分为二,一个包含参考值,一个包含其他值。对于包含参考值的 df,我们还必须删除 source
列。然后利用两个geom_density
。从图例中删除引用没什么大不了的。只需删除填充 aes 并设置所需的填充颜色(如果有)作为参数。在我下面的代码中,我简单地设置了 fill=NA
.
library(ggplot2)
df1 <- df[df$source == "ref", -2]
df2 <- df[!df$source == "ref", ]
ggplot(mapping = aes(x = value)) +
geom_density(data = df1, aes(y = ..density..), fill = NA, adjust = 1, alpha = 0.5) +
geom_density(data = df2, aes(y = ..density.., fill = source), adjust = 1, alpha = 0.5) +
facet_grid(source ~ var, scales = "fixed") +
theme_bw()