首页 > 解决方案 > 如何在ggplot中对geom_col进行分组和标记?

问题描述

我正在尝试使用 R 和 ggplot2 从 GraphPad 重现图形。在少数情况下,我有少量样本的值:

df <- data.frame(Sample = c("blank", "blank", "blank", "A","A","A","A","A","A","B","B","B","B","B", "B", "C","C","C","C","C","C"), 
                 Condition = c("control", "control", "control", "C1", "C1", "C1", "C2", "C2", "C2","C1", "C1", "C1", "C2", "C2", "C2","C1", "C1", "C1", "C2", "C2", "C2"),
                 Value = c(0.719, 1.25, 0.687, 8.19, 4.68, 3.53, 14.1, 7.11, 8.8, 6.48, 7.05, 4.82, 6.32, 4.97, 6.97, 5.5, 7.22, 6.89, 8.89, 6.83, 8.73))

df$Sample <- factor(df$Sample, levels = c("blank", "A", "B", "C")) 
df$Condition <- factor(df$Condition, levels = c("control", "C1", "C2"))

我正在努力将它们组织和绘制为分组(按条件)和标记(按样本),如下所示:

图形板图像

我尝试使用fillposition="dodge"但这完全不是我想要的:

df %>%
  ggplot + 
  aes(x = Sample, y = Value, fill = Condition) + 
  geom_col(position = "dodge")

ggplot

请注意,我还想从图例中排除空白。

我正在尝试创建、绘制和标记另一列,例如:

df <- df %>%
  mutate(Sample.Condition = paste(Sample, Condition, sep = "."))

..但它变得(太?)复杂了。为了学习,我正在寻找关于如何做到这一点的简单而整洁的解决方案。谢谢!

标签: rggplot2graph

解决方案


最巧妙的解决方案可能是引入方面。

df %>%
  ggplot + 
  aes(x = Sample, y = Value, fill = Condition) + 
  geom_col() +
  facet_wrap(~Condition)

推荐阅读