【问题标题】:How to differentiate samples on the x axis using ggplot in r如何在 r 中使用 ggplot 在 x 轴上区分样本
【发布时间】:2019-11-19 00:14:36
【问题描述】:

我使用 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")

【问题讨论】:

  • 您好,先生,我认为您可能需要合并两个图。另一个图将是您需要的水平条形图。你在 gridExtra 中使用 cowplot 或 grid.arrange 进行组合

标签: r ggplot2 graph figure geom-bar


【解决方案1】:

我们没有您的数据,但我认为您要查找的是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”,以便每个方面仅包含特定组的变量。最后,刻面增加了两个图之间的空间。您可以通过将面板间距归零来删除它。

您可以使用以下方法更改构面的颜色: 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")))

【讨论】:

  • 嗨,泰勒,这正是我所追求的!我对 R 比较陌生,所以我在将您的示例解释为我的数据时遇到了一些麻烦。我的数据中有三列标题为|Genus|variable|value|。变量是我的样本 ID (HH*),值是我感兴趣的属的读取计数。在您的示例中,您提到使用 group
  • @mrad 您可以使用基于“变量”列的嵌套 ifelse 语句,并且看起来类似于 mutate(group = ifelse(variable == "HH11" | variable == "HH12" | variable == "HH15", "Group 1", ifelse(variable == "HH24" | variable == "H1", "Group 2", "Group 3"))) 显然您需要在其中添加正确的变量名称。作为替代方案,您也可以使用case_when()function
  • @TaylorI 尝试了以下操作:mutate(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", ifelse(variable == "HH31" | variable == "HH33" | variable == "HH4" | variable == "HH5", "PEDIS4")))) 这给了我这个错误:错误:“mutate(group = ifelse(variable == "HH11" | variable =") 中的意外'=' >
  • @mrad 您需要在 ifelse 逻辑中使用“==”。 HH12 中只有一个“=”
  • 感谢您的帮助。这解决了这个问题,但现在我得到了这个错误:mutate(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", ifelse(variable == "HH31" | variable == "HH33" | variable == "HH4" | variable == "HH5", "PEDIS4")))) Error in is.data.frame(.data) : argument ".data" is missing, with no default
猜你喜欢
  • 1970-01-01
  • 2021-06-14
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
相关资源
最近更新 更多