Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有ggplot和ggsave的R函数保存空文件_R_Performance_Ggplot2_Ggsave - Fatal编程技术网

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

带有ggplot和ggsave的R函数保存空文件,r,performance,ggplot2,ggsave,R,Performance,Ggplot2,Ggsave,我做了一个函数来绘制一些数据,但我想合并“ggsave”。但是,当我第一次运行代码时,保存的文件是空的,没有图形。当我再次运行时,第一次运行期间生成的图形被保存,等等。这显然不是我想要的,我认为这是因为ggsave在绘图完成之前发生。由于max.time和max.iter的原因,这需要很长时间,但在一些图中,有多达64个点,许多点很接近,我不希望有太多重叠。另外,我不太理解geom_label_repel中一些参数的解释,所以我尝试了一些方法,但可能我做了一些奇怪的事情 我写的代码是: plot

我做了一个函数来绘制一些数据,但我想合并“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", tolower(type), "as", tolower(site), "of read"),
         title = paste("Experiment ",Expnr, ". Frequency of ", tolower(type), " in spike vs at ", tolower(site), " 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",Expnr,"/Exp",Expnr,"RelFreq",type,site,".png", sep =""))
}

plot.frequency尝试将其保存在变量中,并在
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",Expnr,"RelFreq",type,site,".png"))
}

plot.frequency我敢肯定你错了,我一直在节省时间。也许“.png”参数就是问题所在?我想Ronaks(现在已删除的答案)是正确的,您可能需要先创建一个对象。我还认为你可能想过度思考你的功能。我认为如果你有一个创建绘图的函数会更好,如果你需要的话,你可以创建第二个函数,用ggsave保存这个绘图(即,第一个函数和ggsave的包装器)。通常(我认为几乎总是)最好为小步骤使用小函数,在调试方面,以及在将来理解您自己的代码等其他小技巧-您可以使用
paste(…,sep=“”)
,而不是
paste0(…)