在函数内两次调用的GGPlot2仅产生一个图

我是ggplot2的新手,所以这可能是我不知道的简单错误。

我正在使用此功能来创建我的一些数据的小提琴图。有争议的数据是两种蛋白质在ChIP-seq读法的两个条件之间的对数倍数变化,我们怀疑在转录过程中遵循RNAPII,但是我认为这并不重要。唯一的是,我希望该函数创建两个图:一个用于在治疗条件下显示RNAPII增加的基因,另一个用于显示减少的基因。

Vioplot_LogFC = function(quant1,quant2,f,info = c("Quantif 1","Quantif 2","Factor")){


quant1_s = sample(quant1,length(f$top))
quant1_f = quant1[f$top]
quant2_s = sample(quant2,length(f$top))
quant2_f = quant2[f$top]

LogFC = c(quant1_s,quant1_f,quant2_s,quant2_f)
Factor = c(rep(info[1],length(quant1_s)+length(quant1_f)),rep(info[2],length(quant2_s)+length(quant2_f)))
Group = c(rep("Random",length(quant1_s)),rep("PolII increase",length(quant1_f)),rep("Random",length(quant2_s)),length(quant2_f)))

toplot=data.frame(LogFC,Factor,Group)

p1 = floor(-1*log10(wilcox.test(quant1_f,quant1_s)$p.value))
p2 = floor(-1*log10(wilcox.test(quant2_f,quant2_s)$p.value))

label1 = paste0(info[1],"; p<10^-",p1)
label2 = paste0(info[2],p2)

plot1 = ggplot(toplot,aes(x=Factor,y=LogFC,fill=Group)) +
    geom_violin() +
    scale_x_discrete(labels=c(label1,label2)) +
    scale_y_continuous(name="Log Fold Change") +
    scale_fill_discrete(name="Gene Group") +
    theme_bw()

##################################
##################################
##################################

quant1_s = sample(quant1,length(f$bot))
quant1_f = quant1[f$bot]
quant2_s = sample(quant2,length(f$bot))
quant2_f = quant2[f$bot]

LogFC = c(quant1_s,rep("PolII decrease",p2)
plot2 = ggplot(toplot,label2)) +
    scale_y_continuous(name="Log Fold Change") +
    scale_fill_discrete(name="Gene Group") +
    theme_bw()

plot1
plot2


}

我总是在pdf(...) dev.off()内使用此功能,但是pdf仅包含一个图。

是否由于两次使用相同的数据和名称而出现问题?创建第一个绘图后,是否应该使用一个clear()函数以创建新的绘图?

air6216 回答:在函数内两次调用的GGPlot2仅产生一个图

正如@StupidWolf所指出的那样,R函数默认将返回最后一行(而不是先前的对象)。不过,您可以使用return来调整函数以返回所需的内容。

ggplot对象可以存储在列表中并进行检索。因此,代替
plot1
plot2

在这种情况下,仅返回plot2,您可以使用

结束函数
 return(list(plot1,plot2))

现在,函数的输出是一个包含2个元素的列表,plot1plot2。正如@StupidWolf所指出的,您可以使用双方括号从列表中调用这些图来打印和保存这些图,所以如果您这样做

 PLOTS<-Vioplot_logFC(...)

您可以使用以下方式检索,打印或操纵plot1

 PLOTS[[1]]]

作为“操作”的示例,您可以事后更改“主题”,例如

 PLOTS[[1]]+theme_classic() 
本文链接:https://www.f2er.com/3116744.html

大家都在问