如何使用 ggplot 在 R 中对比较密度图进行分面包裹

问题描述 投票:0回答:1

我有一个具有长度值的不同条件的数据集。 我可以用它制作直方图/密度图,并可以将其分面包裹以与控制条件进行比较。

我还可以制作单独的图,将控制与特定条件进行比较(即具有透明度的重叠密度图)。这有助于我查看与对照相比每个条件的值的分布。

但是,我想并排查看所有条件的比较,例如当我使用 Facetwrap 时。

例如,如果这是我在数据集“test”中的数据: |状况 |尺寸| | -------- | -------------- | |控制| 3 | |控制| 4 | |控制| 4 | |控制| 5 | |条件1| 1 | |条件1| 2 | |条件1| 2 | |条件1 | 3 | |条件 2 | 5 | |条件 2 | 6 | |条件 2 | 6 | |条件 2 | 7 |

这就是我制作密度图小面包裹的方法:

test %>%
  ggplot(mapping = aes(x = Size, fill = Condition)) +
  geom_density(alpha = 0.2) +
  facet_wrap(vars(Condition))

这是我个人的重叠密度图(我创建了一个新数据集,其中仅包含我想要比较的 2 个条件):

test_compare <- test %>% 
  filter(Condition == "Control" | Condition == "Condition 1")
test_compare %>%
  ggplot(mapping = aes(x = Size, fill = Condition)) +
  geom_density(alpha = 0.2)

两者重叠的地方如下: enter image description here

我想要一个网格,可以在其中看到每个条件与控件的比较。有办法做到这一点吗?

r ggplot2 comparison density-plot
1个回答
0
投票

编辑:这本质上是@MrFlick 评论中链接的内容

您应该能够使用“控制”数据创建第二个数据框,并添加第二个

geom_density()
调用以独立于任何分面添加控制数据。

可重现的示例,因为您没有提供任何数据。

dat <- data.frame(Size = 0:100)

dat <- dat %>%
  mutate(Condition = case_when(Size >= 75 ~ "C1", 
                               Size >= 50 & Size < 75 ~ "C2",
                               Size >= 25 & Size < 50 ~ "C3",
                               Size >= 0 & Size < 25 ~ "Control",
                               TRUE ~ "NA"), 
         Control = case_when(str_detect(Condition, "Control") ~ "Control",
                             TRUE ~ "Sample"))

dat.control <- dat %>%
  select(Size, Control)

ggplot(dat %>% filter(Condition != "Control"), aes(x = Size)) +
  geom_density(data = dat.control %>% filter(Control == "Control"), aes(x = Size), alpha = 0.2, fill = "orange") +
  geom_density(alpha = 0.2, aes(fill = Condition)) +
  facet_wrap(~Condition)

© www.soinside.com 2019 - 2024. All rights reserved.