点解no png support in this version of R?

2022-01-21 · 445 words · 1 minute read R

现在 Rstudio Server 上面能正常地用 echarts4r 包画图,也能正常 Knit。但是如果换别的画图包会报错,点击 Knit 倒是也不报错。举个栗子,在 Rstudio Server 上面新建一个 R Markdown 文档。

设定好如下参数。

```{r setup, include=TRUE,dev="CairoPNG"}
knitr::opts_chunk$set(echo = TRUE,dev="CairoPNG")
```

随便找个 ggplot2 画图的例子,比如。

library(ggplot2)

ggplot(mpg, aes(displ, hwy, colour = class)) + 
  geom_point()

最后点击 Knit 就会生成一个正常的有图的 html 文件。

但是如果直接在 R Markdown 里面运行上面画图的代码,就会报下面这个错误。

Error in .External2(C_X11, paste0("png::", filename), g$width, g$height, : unable to start device PNG

换到 Console 里面运行画图的代码,也会报出如下类似的错误。

Error in RStudioGD() : 
  Shadow graphics device error: r error 4 (R code execution error)
In addition: Warning message:
In grDevices:::png("/tmp/Rtmpz51ybW/c087935e645c447e881c4a3250b2fe36.png",  :
  no png support in this version of R

上网搜了搜,得到几种解决办法,一是往 Linux 上面装 libpng 以及各种依赖,二是重装R,三是library(Cairo)

前两个解题思路倒是不算难,但是对我这种对 Linux 不熟的人来说费时。我想既然 Knit 就能正常出图,而 echarts4r 包 也能正常用,那其他画图包应该至少能画出图来才对,于是照着方法三试了试。如下代码执行后,图片不会直接显示在R Markdown 文档里,也不会显示在 Viewer 窗格里,而是在默认路径下生成一张图片,也算是画出来图了。

library(Cairo)
library(ggplot2)

Cairo(
  file = "Cairo_PNG_dpi.png",
  type = "png",
  width = 1200,
  height = 800,
  dpi = 96
)

ggplot(mpg, aes(displ, hwy, colour = class)) +
  geom_point()

dev.off()