带有ggplot和ggsave的R函数保存空文件

问题描述

我制作了一个绘制一些数据的函数,但我想合并“ggsave”。但是第一次运行代码的时候,保存的文件是空的,没有图。当我再次运行时,第一次运行时制作的图形被保存等。这显然不是我想要的,我认为这是因为 ggsave 发生在情节完成之前。由于 max.time 和 max.iter 需要很长时间,但在某些数字中最多有 64 个点,而且许多点靠得很近,我不想太多重叠。另外,我不是很理解geom_label_repel中一些参数的解释,所以我尝试了一些东西,但也许我做了一些奇怪的事情。

我写的代码

plot.frequency <- function(name,type,site){
  max_scale <- max(name$perc_spike,name$perc_reads)
  ggplot(name,aes(x= perc_spike,y = perc_reads,label=pattern)) +
    geom_point(color="blue",size = 1) +
    geom_abline(linetype = "dotted",slope = 1,intercept = 0)+
    labs(x = paste("Percentage of",tolower(type),"in spike"),y = paste("Percentage of","as",tolower(site),"of read"),title = paste("Experiment ",Expnr,". Frequency of "," in spike vs at "," of reads",sep = "")) +
    xlim(0,(max_scale)) + 
    ylim(0,(max_scale)) +
    geom_text_repel(data = subset(name),aes(label=pattern),size = 2.5,Box.padding = 0.20,point.padding = 0.2,segment.color = 'grey50',direction = "both",max.overlaps = 25,max.time= 5,max.iter = 1000000) +
    ggsave(filename = paste("/data/mydata/spike/figures/figuresExp","/Exp","RelFreq",site,".png",sep =""))
}

有没有人有建议来解决这个我认为在情节完成之前保存的问题?

我是一个相对缺乏经验的 R 用户,所以如果您有其他改进此代码的建议,请告诉我,但请善待:)

解决方法

尝试将其保存在变量中并在 ggsave 中使用。

plot.frequency <- function(name,type,site){
  max_scale <- max(name$perc_spike,name$perc_reads)
  ggplot(
    ##...code...for...ggplot
    ##...code...for...ggplot
    ) -> plt
  ggsave(plt,filename = paste0("/data/mydata/spike/figures/FiguresExp",Expnr,"/Exp","RelFreq",site,".png"))
}