如何在 R 中创建基于屏幕外(位图)图形的"interactive"图形设备?



在R中绘制大图可能会非常缓慢。我正在尝试一些解决方法,但即使使用最大缓冲的"dbcairo"X11 设备,绘图似乎也需要更长的时间。我注意到"png"设备对于小地块和大地块都更快。

小图,png(( 比 X11(( 高出约 3 倍:

> system.time({X11(type="dbcairo"); plot(1:1e3); dev.off()})
user  system elapsed 
0.234   0.029   0.373 
> system.time({png("file.png",type="cairo"); plot(1:1e3); dev.off()})
user  system elapsed 
0.114   0.000   0.113 
> system.time({png("file.png",type="Xlib"); plot(1:1e3); dev.off()})
user  system elapsed 
0.056   0.000   0.107 

大图,png(( 比 X11(( 高出 2.3 倍到 46 倍:

> system.time({X11(type="dbcairo"); plot(1:1e5); dev.off()})
user  system elapsed 
14.420   0.157  15.491 
> system.time({png("file.png",type="cairo"); plot(1:1e5); dev.off()})
user  system elapsed 
6.790   0.001   6.826 
> system.time({png("file.png",type="Xlib"); plot(1:1e5); dev.off()})
user  system elapsed 
0.144   0.010   0.340 

结果与其他X11((设备类型(类似于"dbcairo"(和其他位图图像类型(类似于"png"(几乎相同。我猜 png(( 类型"cairo"比"Xlib"需要更长的时间,因为它会产生抗锯齿输出。

使用中等大小的 ggplot2 图,我发现 png(( 比 X11(( 快 1.7 到 2.6 倍(这是使用png(..); plot(g); dev.off()而不是ggsave()(

由于我可以使用像"feh"这样的极简主义图像查看器几乎立即加载和重新加载 PNG 文件,我想知道为什么我不使用 png(( 作为我的主要绘图设备 R .

当然,问题是PNG文件在我调用dev.off((之前不会写入磁盘。这限制了标准绘图界面的样式,在标准绘图界面中,我设置一次设备,然后调出各种绘图,有时添加线条或文本,同时立即在绘图窗口中查看每个更改。

创建一个新的 R 图形设备,将图像文件写入 PNG(或其他一些图像格式(,但使用简单的图像查看器(如"feh"(在每个绘图命令后显示它们,这是否很困难?换句话说,我正在寻找像 X11 这样的"交互式"绘图设备,但它使用现有设备(如 png((、jpeg(( 或 tiff(( 的位图屏幕外渲染工具来绘制图像。或者,也许可以修改 png(( 设备以具有赋予其此行为的选项。(或者也许我应该在所有事情上使用 knitR ...但我更熟悉命令行...

如果 X11 让你上墙,而你不想使用 RStudio 绘图查看器(或者不能,因为你在远程服务器上,你不能安装 RStudio 服务器(,一个有趣的选择是使用rmote包。可以将其安装在自己的本地 R 安装上,或者,如果要 SSH 连接到远程计算机并愿意转发端口,则可以将其安装在远程 R 实例上。然后,您打印的任何绘图和帮助文件都将重定向到本地Web服务器,您可以在其中从浏览器访问它们。

它还带有一些不错的附加功能,例如:

  • 剧情历史,
  • 能够右键单击和保存绘图,就像您在浏览器中的任何其他图像一样,以及
  • 选择将哪些类型的输出发送到服务器的功能。

我发现这是在远程服务器上使用绘图进行 X11 转发的一个不错的替代方案,并且在本地也🙂运行良好

最新更新