0

我在遗传学工作,最近开始练习 R,特别是 ggplot,以制作用于出版的图像。

我运行了几个分析并组合在一个表 (Attempt_mod_TopTen) 3 数据集中,其中包含:

  • y 轴 (GO_term) = 整个图形必须相同的名称
  • x1 轴 (N_Genes_AB) = 与 y 相关的基因数量,以及它们的 p_value
  • X2 轴 (N_Genes_A) = 与 y 相关的基因数量,以及它们的 p_value
  • X3 轴 (N_Genes_B) = 与 y 相关的基因数量,以及它们的 p_value

我可以仅使用一组数据(X1、X2 或 X3)制作带有单个面板的图形

    library(ggplot2)
    theme_set(
      theme_bw() 
    )
    ggplot(data = Attempt_mod_TopTen)+geom_point(aes(x=N_Genes_AB, y=GO_Term, size=P_value_AB)) +
      scale_size(range = c(4,.2))   
           

显示 GO_terms、基因数量及其 P 值之间关系的气泡图:

我看到有关于如何使用多个面板(即 facet_wrap)制作气泡图的帖子,但我想我的数据做错了,因为我找不到如何合并 X2 和 X3 的数据。我想在单个面板中显示我能够在 3 个面板中制作的内容,这些面板彼此相邻,共享相同的 y 轴。

4

1 回答 1

2

正如Allan Cameron在评论中所建议的那样,这里的关键是改变您的数据的结构方式tidyr::pivot_longer()。这可以像这样完成:

library(tidyverse)

dat <- Attempt_mod_TopTen %>%
    pivot_longer(
        !GO_Term,
        names_to = c(".value", "grp"),
        names_pattern = "([A-Z]_[A-Za-z]+)_([A-Z]+)"
    )

这是包的“透视”小插图中“更长”部分的“每行多个观察”小节的简单应用,tidyr您可以通过 R 命令访问该小节vignette("pivot", package = "tidyr");我强烈建议通读它,以深入了解那里所做的事情。但是,我们可以通过简单地查看结果来获得一个想法。你可以看到我们已经把每一行都变成了三行,一个用于“A”组,一个用于“B”组,一个用于“AB”组。然后我们不需要六列来观察“N_Genes”和“P_value”,而只需要两列。现在我们可以很容易地使用facet_wrap(),新创建的grp列指示方面:

ggplot(data = dat) +
    facet_wrap(~grp) +
    geom_point(aes(x = N_Genes, y = GO_Term, size = P_value)) +
    scale_size(range = c(4,.2)) +
    theme(
        axis.text = element_blank(),
        axis.title = element_blank(),
        axis.ticks = element_blank()
    )

在此处输入图像描述

于 2020-12-28T14:03:19.500 回答