r语言 - 为什么 pdf() plot, dev.off() 成功,但函数调用中的相同命令失败?



以下一组命令将打印一个格式适当的pdf文件,其中包含所表示的数据,这是Dimplot的文档。它运行正常,所有必需的包加载正常。

project_name<-"my_project"
file_stem<-" my_dim_plot_"
fig_name<-paste0(figure_dir, "/", file_stem, project_name, ".pdf")
base_plot<-DimPlot(combined_data_obj, reduction = "tsne", label = TRUE) + NoLegend()
ggsave(fig_name, width = 20, height = 16, units = "cm", device='pdf')
base_plot
dev.off()

那么,为什么这段代码要打印一个空的 pdf?

save_ggplot_figure<-function(plot_object, figure_dir, file_stem, project_name) {
# Need to add functionality for mutiple plots, different file extensions, etc.
fig_name<-paste0(figure_dir, "/", file_stem, project_name, ".pdf")
ggsave(fig_name, width = 20, height = 16, units = "cm", device='pdf')
plot_object
dev.off()
}
project_name<-"my_project"; file_stem<-"tsne_dim_plot_"; project_name<-"my_project"
base_plot<-DimPlot(combined_data_obj, reduction = "tsne", label = TRUE) + NoLegend()
save_ggplot_figure(base_plot, figure_dir, file_stem, project_name)

我能看到的唯一区别是打印绘图然后转dev.off()的命令在函数调用中,但这为什么重要? 我使用pdf()而不是ggsave()尝试了相同的代码,但结果相同(它打印了一个 4kb(空 pdf 文件,而不是在函数调用外部打印命令时打印的 120kb pdf 文件。

你错误地使用了 ggsave,第一个参数应该始终是对象,然后你指定文件名。因此,你会得到一个空文件,因为ggsave()试图在不存在的东西上创建一个pdf。因此,如果将函数更改为:

save_ggplot_figure<-function(plot_object, figure_dir, file_stem, project_name) {
fig_name<-paste0(figure_dir, "/", file_stem, project_name, ".pdf")
ggsave(plot_object, file = fig_name, 
width = 20, height = 16, units = "cm", device='pdf')
}

这应该有效。 而且您不需要打电话dev.off()

最新更新