如何在 r 中使用 ggplot 区分 x 轴上的样本

How to differentiate samples on the x axis using ggplot in r

我使用 ggplot 创建了一个 geom_bar 图,它在 x 轴上有 14 个单独的样本。这些样本属于不同的组,我希望在图中添加一个元素来指示哪些样本属于每个组。

例如在这个输出图中,样本HH11-HH21属于一组,HH21-35属于另一组,其余属于另一组。

是否可以在图的顶部添加一个彩色条,指示样本属于哪个组?

这是我用来生成这张图的代码:

ggplot(full_table_top30, aes(x = variable, y = value, fill = Genus)) +
  geom_bar(position = "fill", stat = "identity") +
  scale_fill_manual(breaks = Genus2, values = Cb64k) +
  scale_y_continuous(labels = percent_format()) +
  theme(legend.position = "right", text=element_text(size=12),
        axis.text.x = element_text(angle=90, vjust=1)) +
  guides(fill = guide_legend(ncol=2)) +
  ggtitle(opt$gtitle) +
  xlab("Patient ID") + ylab("Relative activity")

我们没有您的数据,但我认为您要找的是 facet_grid()。如果我们构建一些数据:

df <- tibble(class = rep(c("H1", "H2", 
                           "H3", "H4"), each = 3),
             variable = rep(c("V1","V2",
                              "V3"), 4),
             value = sample(20:50, 12),
             group = ifelse(class == "H1" | class == "H2", 
                            "Group 1", "Group 2"))

然后绘制它:

df %>% 
  ggplot(aes(x = class, y = value, fill = variable)) + 
  geom_bar(stat = "identity") + 
  facet_grid(cols = vars(group), scales = "free_x") +
  theme(panel.spacing = unit(0, "lines"))

facet_grid() 中指定组变量,并使用 "free_x" 以便每个方面仅包含特定组的变量。最后,faceting 在两个图之间添加了 space。您可以通过将面板间距归零来删除它。

您可以使用以下方法更改刻面的颜色: theme(strip.background=element_rect(fill="#ff0000", color = NA))

附录

mutate(full_table_top30, group = ifelse(variable == "HH11" | variable == "HH12" | 
                                            variable == "HH15" | variable == "HH21", "PEDIS2", 
                                          ifelse(variable == "HH1" | variable == "HH18" | 
                                            variable == "HH20" | variable == "HH24" | 
                                            variable == "HH34" | variable == "HH35", 
                                            "PEDIS3", "PEDIS4")))