如何在R中基于离屏(位图)图形创建“交互式”图形设备?

3
在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”)。我猜测,类型为“cairo”的png()需要比“Xlib”更长时间,因为它会产生抗锯齿输出。
对于中等大小的ggplot2绘图,我发现png()比X11()快1.7倍至2.6倍(这是使用 png(..); plot(g); dev.off()而不是 ggsave())。
由于我可以使用像“feh”这样的极简图像查看器几乎即时地加载和重新加载PNG文件,所以我想知道为什么我不使用png()作为我的主要R绘图设备。
当然,问题在于在调用dev.off()之前,PNG文件不会写入磁盘。这限制了标准绘图界面的风格,在该界面中,我设置一次设备,然后打开各种图形,有时添加线条或文本,同时在绘图窗口中立即查看每个更改。

创建一个新的R图形设备,将图像文件写入PNG(或其他图像格式)并在每个绘图命令后使用像"feh"这样的简单图像查看器显示它们是否困难?换句话说,我正在寻找一种"交互式"绘图设备,类似于X11,但其使用现有设备(如png()、jpeg()或tiff())的位图离屏呈现功能来绘制图像。可能可以修改png()设备以具有提供此行为的选项。 (或者也许我应该为所有内容使用knitR......但我更熟悉命令行......)


你提出这个问题已经7个月了。我也很感兴趣。你找到实现交互式图形设备的方法了吗? - Ramiro Magno
1
@rmagno 没有,但是最近在 R-devel 列表上有一个主题,你可能会对它感兴趣并愿意发表自己的想法。我认为那个列表上没有多少人使用 X11。 - Metamorphic
能指点一下吗?(我找不到它。) - Ramiro Magno
1
如果您没有订阅,那么可能不值得麻烦。这里是存档。 - Metamorphic
1个回答

1
如果您对X11感到不满,并且不想使用RStudio绘图查看器(或者因为您在无法安装RStudio服务器的远程服务器上),那么一个有趣的替代方案是使用rmote包。您可以将其安装在本地R安装程序上,或者如果您正在通过SSH连接到远程计算机并愿意转发端口,则可以在远程R实例上安装它。然后,您打印的任何绘图和帮助文件都将重定向到本地Web服务器,在那里您可以从浏览器访问它们。
它还带有一些很好的附加功能,例如:
  • 绘图历史记录,
  • 像在浏览器中保存任何其他图像一样右键单击并保存绘图,以及
  • 选择发送到服务器的输出类型的能力。
我发现这是在远程服务器上使用X11转发绘图的不错替代方案,在本地也很有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接