为什么 R 无法将绘图渲染为 PNG 文件?

jak*_*115 6 linux png unix r x11-forwarding

我试图让 R 在 UNIX 中做一些非常基本的绘图等,但是我收到了一个与 X11 相关的奇怪错误,据我所知,我什至不需要 X11。

我有一个矩阵名称d,想保存该矩阵的热图图像,而无需实际显示图像(因为我不想使用 X11)。这是我的代码:

png(file="my_image.png")
heatmap(d)
dev.off()
Run Code Online (Sandbox Code Playgroud)

问题是我收到以下错误:

Error in X11(paste("png::", filename, sep = ""), g$width, g$height, pointsize,  :
  unable to start device PNG
Run Code Online (Sandbox Code Playgroud)

另外: 警告信息:

In png(file = "interative_hen.png") :
  unable to open connection to X11 display ''
Run Code Online (Sandbox Code Playgroud)

我不知道这种情况正在发生,因为我不知道 R 是如何需要 X11 的,即使它需要 X11,X11 也已安装并为我测试过的每个应用程序正常工作。

Bre*_*ugh 5

首先,检查R您使用的版本是否具有 PNG 功能。您可以通过从提示符调用该capabilities()函数来完成此操作R。它应该打印出类似于以下内容的列表:

> capabilities()

jpeg    png    tiff    tcltk  X11    aqua     http/ftp  sockets
FALSE   FALSE  FALSE   TRUE   FALSE  FALSE    TRUE      TRUE

libxml  fifo   cledit  iconv  NLS    profmem  cairo
TRUE    TRUE   TRUE    TRUE   TRUE   FALSE    FALSE 
Run Code Online (Sandbox Code Playgroud)

如果您看到FALSE下面的内容png,那么您需要R使用显式 PNG 支持手动重新编译。只要您安装了必要的构建依赖项,构建过程就会自动启用 PNG 功能。


最后,假设集群上没有运行本地 X 服务器,您的 SSH 客户端可能未正确配置 - 具体来说,请确保您已启用 X11 转发(如果您使用的是类似 UNIX 的工具,请使用-X或标志)。或者,您可以尝试使用虚拟帧缓冲区。-Yssh

有关详细信息,请参阅此堆栈溢出问题:如何在没有 X11 的服务器上运行 R,并避免损坏的依赖项