【问题标题】:Repeated plotting of ggplots in R在 R 中重复绘制 ggplots
【发布时间】:2017-09-07 13:21:03
【问题描述】:

以前有人问过这个问题,但不适合我的数据,所以我再试一次:)

我想制作多个单独的 ggplots,而不必每次都指定如何制作。 我的数据集包含基因表达数据,我想从中绘制特定基因。

让我们以此为例

df <- read.table(header = TRUE, 
                   stringsAsFactors = FALSE, 
                   text="GENE   SYMBOL          Patient1   Patient2   
                   TP53         ILMN_2            3.55        3.66
                   TP53         ILMN_3            5.49        4.99
                   XBP1         ILMN_5            4.06        2.53
                   TP27         ILMN_1            2.53        3.33
                   REDD1        ILMN_4            3.99        4.56
                   ERO1L        ILMN_6            5.02        6.95
                   STK11        ILMN_9            3.64        2.01
                   HIF2A        ILMN_8            2.96        4.76 ")

为了从df 中绘制选定的基因,我通常会执行以下操作:

首先,我创建一个可用于在数据框中搜索的对象

SYMBOL_info <- select(df, SYMBOL)

然后,我将我感兴趣的基因定义为:

library(dplyr)
library(tidyr)
library(ggplot2)

geneOfInterest <- c(SYMBOL_info == "5")

接下来,在数据框中找到感兴趣的基因,并收集数据框以符合 ggplots 要求:

df_gather<- df %>%
  filter(geneOfInterest) %>% 
  gather(key=Patient, value=values, -c(GENE, SYMBOL))

最后,绘制数据集中感兴趣的基因:

ggplot()+
  geom_point(df_gather, mapping = aes(x=Patient, y=values, color=GENE))+
  labs(title="XBP1 plot", subtitle = "Symbol: 5")+
  ggsave("XBP1_plot.png")

但是,我有很多想要绘制的基因,例如TP53、REDD1、STK11 和 HIF1A 的两个版本。关于如何做到这一点的任何建议,而不必每次都更改 geneOfInterest 和代码绘图部分中的信息?我想需要创建一个 for 循环,但复制此处给出的其他解决方案对我没有帮助(如此处所示:R: saving multiple ggplots using a for loop)。

提前致谢! :)

编辑:符号值已更改为以 ILMN_ 开头,而不仅仅是数字

【问题讨论】:

  • 我会避免循环并改为编写一个小函数。我也收到一个错误:object 'PROBE_ID' not found
  • 这对我有用,使用 facets new.df % select(-SYMBOL)) ggplot(new.df) + geom_point(aes(x = variable, y = value,颜色 = 基因)) + facet_wrap(~基因)

标签: r for-loop ggplot2 dplyr tidyr


【解决方案1】:

根据您要绘制的基因和数据的数量,我建议使用这样的构面在一个图中绘制所有内容:

df %>% 
  filter(Gene %in% c("TP53", "ERO1L", "HIF2A")) %>% 
  gather(key, value, -Gene, -SYMBOL) %>% 
  ggplot(aes(key, value, fill=Gene))+
    geom_col()+
    facet_wrap(~Gene+ SYMBOL, labeller = label_both)

否则试试这个:

sapply(c(2,3,9), function(x){
  geneOfInterest <- df[ df$SYMBOL == x, 1]
  df %>%
   filter(SYMBOL == x) %>% 
   gather(key=Patient, value=values, -Gene,-SYMBOL) %>% 
   ggplot(aes(x=Patient, y=values, color=Gene))+
    geom_point()+
    labs(title="XBP1 plot", subtitle = "Symbol: 5") + 
    ggsave(paste0(geneOfInterest, "_plot.png"))
})

【讨论】:

    【解决方案2】:

    谢谢你,Jimbou!

    我只想补充一点,我将您建议的函数更改为这个(在绘图和文件名中包含基因和符号):

    sapply(c(2,5,9), function(x){
      geneOfInterest <- df[ df$SYMBOL == x, 1]
      df %>%
        filter(SYMBOL == x) %>% 
        gather(key=Patient, value=values, -GENE,-SYMBOL) %>% 
        ggplot(aes(x=Patient, y=values, color=GENE))+
        geom_point()+
        labs(title=paste0(symbolOfInterest, " plot"), subtitle =paste0("Symbol: ", x)) + 
        ggsave(paste0(geneOfInterest,"_symbol_",x, "_plot.png"))
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      相关资源
      最近更新 更多