在 R 中重复绘制 ggplots
Repeated plotting of ggplots in R
之前有人问过这个问题,但与我的数据不符,所以我再试一次:)
我想制作多个单独的 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_ 开头,而不仅仅是数字
根据您要绘制的基因和数据的数量,我建议使用这样的构面将所有内容绘制在一个图中:
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"))
})
谢谢你,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"))
})
之前有人问过这个问题,但与我的数据不符,所以我再试一次:)
我想制作多个单独的 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_ 开头,而不仅仅是数字
根据您要绘制的基因和数据的数量,我建议使用这样的构面将所有内容绘制在一个图中:
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"))
})
谢谢你,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"))
})