我希望创建一个ggplot函数,该函数循环遍历对象列表,并创建单个ggplot对象。下面的代码成功打印出列表中的最后一个图,但是没有任何内容保存为对象。
在此先感谢您的帮助!
negbinom_list <- c("cytoxic_CD4_CD8.wt.negbinom", "helper_CD4.wt.negbinom")
VolPlot <- function(data, title){
highlight_df <- data %>% filter(p_val_adj<=0.05) %>% filter(avg_logFC<=-0.5 | avg_logFC>=0.5)
data$ID <- row.names(data)
label_df <- filter(data, ID %in% GOI)
data$ID <- row.names(data)
VolPlot_name <- paste( 'volplot', title, sep = '.' )
VolPlot_name <- ggplot(data=data,
aes(x=avg_logFC, y =-log10(p_val_adj))) +
geom_point(alpha=0.4, size=1.75) +
xlim(c(-2, 2)) +
xlab("log2 fold change") + ylab("-log10 adjusted p value") +
theme_bw() +
theme(legend.position="none") +
geom_point(data=highlight_df, aes(x=avg_logFC, y =-log10(p_val_adj)), color='red', alpha=0.4,size=1.75) +
geom_text(aes(label=ifelse(avg_logFC<=-0.75 | avg_logFC>=0.75,as.character(ID),'')),hjust=0,vjust=0) +
geom_label_repel(data = label_df, aes(label = ID), nudge_y = 36, nudge_x = 1, direction = "x")
}
for(i in negbinom_list){
print(VolPlot(get(i), i))
}
答案 0 :(得分:2)
如果您打算将每个ggplot对象保存到一个变量中,最好在函数的末尾使用 return(list(VolPlot_name))返回列表中的每个ggplot对象强>。仅返回对象最终仅包含列表内的数据框。
通过这种方式,您可以在函数外部创建列表。在遍历变量 negbinom_list 时,可以将每个结果添加到新列表中。
稍后,您可以使用g访问列表中的每个ggplot对象。 new_list [[1]] ,等等。
让我知道它是否对您有用。
negbinom_list <- c("cytoxic_CD4_CD8.wt.negbinom", "helper_CD4.wt.negbinom")
VolPlot <- function(data, title){
highlight_df <- data %>% filter(p_val_adj<=0.05) %>% filter(avg_logFC<=-0.5 | avg_logFC>=0.5)
data$ID <- row.names(data)
label_df <- filter(data, ID %in% GOI)
data$ID <- row.names(data)
VolPlot_name <- paste( 'volplot', title, sep = '.' )
VolPlot_name <- ggplot(data=data,
aes(x=avg_logFC, y =-log10(p_val_adj))) +
geom_point(alpha=0.4, size=1.75) +
xlim(c(-2, 2)) +
xlab("log2 fold change") + ylab("-log10 adjusted p value") +
theme_bw() +
theme(legend.position="none") +
geom_point(data=highlight_df, aes(x=avg_logFC, y =-log10(p_val_adj)), color='red', alpha=0.4,size=1.75) +
geom_text(aes(label=ifelse(avg_logFC<=-0.75 | avg_logFC>=0.75,as.character(ID),'')),hjust=0,vjust=0) +
geom_label_repel(data = label_df, aes(label = ID), nudge_y = 36, nudge_x = 1, direction = "x")
return(list(VolPlot_name))
}
list_plots <- list()
count = 1
for(i in negbinom_list){
list_plots[count] <- VolPlot(get(i), i)
count = count + 1
}