R/graphics:在函数中绘制为 PNG

Posted

技术标签:

【中文标题】R/graphics:在函数中绘制为 PNG【英文标题】:R/graphics: Plotting to PNG in function 【发布时间】:2021-12-11 16:06:19 【问题描述】:

我想使用一个函数让cowplot::plot_grid() 直接写入PNG。我可以通过脚本使它工作:

  g <- ggplot2::ggplot(datasets::iris, ggplot2::aes(x = Sepal.Length, y= Sepal.Width)) + ggplot2::geom_point()
  
  grDevices::png(filename = "mypic1.png", width = 1000, height = 1000, units = "px", bg = "transparent")
  cowplot::plot_grid(g)
  grDevices::dev.off()

但是,如果我在一个函数中尝试这个,它不起作用:

  pxPrint <- function(ggobject, fn, x = 1000, y = 1000) 
    
    grDevices::png(filename = fn, width = x, height = y, units = "px", bg = "transparent")
    cowplot::plot_grid(ggobject)
    grDevices::dev.off()
  

  pxPrint(ggobject = g, fn = "mypic2.png")

这会产生与脚本相同的消息...

RStudioGD 
        2 

...但没有创建文件 mypic2.png。

假设这可能与文件位置有关,我在默认 WD 中的 RStudio 项目之外尝试了相同的代码。同样,mypic1.png 是在标准目录中创建的,但不是 mypic2。但显示的消息不同(在两种情况下):

null device
          1

我错过了什么?

【问题讨论】:

我想你只是想要save_plot,比如cowplot::save_plot("mypic1.png", plot = plot_grid(g)) 虽然这不是答案,但它是一个更好的解决方案,太棒了! 【参考方案1】:

请告诉我这是您所期待的。

g <- ggplot2::ggplot(datasets::iris, ggplot2::aes(x = Sepal.Length, y= Sepal.Width)) + ggplot2::geom_point()

pxPrint <- function(ggobject, fn, x = 1000, y = 1000) 

  grDevices::png(filename = fn, width = x, height = y, units = "px", bg = "transparent")
  print((cowplot::plot_grid(ggobject)))
  grDevices::dev.off()


pxPrint(ggobject = g, fn = "mypic2.png")

原因:在您自己的函数中,您需要一个明确的print() 语句。

【讨论】:

以上是关于R/graphics:在函数中绘制为 PNG的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用pROC包绘制ROC曲线实战:roc函数计算AUC值plot.roc函数绘制ROC曲线添加置信区间为回归模型中的每个因子绘制ROC曲线并在同一个图中显示出来

在 QGraphicsWidget::paint 函数中绘制文本

在 R 中绘制 Haar 函数

使用“Plots.jl”将 2d 函数绘制为 3d 空间中的曲面

利用python绘制太阳花

在Java中为网格创建绘制矩形(填充黑色)函数