在R中绘制大图可能会非常缓慢。我正在尝试一些解决方法,但即使使用最大缓冲的“dbcairo” X11设备,绘图似乎仍需要比可能更长的时间。我注意到,“png”设备对于小图和大图都更快。
对于小图,png()比X11()快约3倍:
结果与其他X11()设备类型相似(类似于“dbcairo”),与其他位图图像类型相似(类似于“png”)。我猜测,类型为“cairo”的png()需要比“Xlib”更长时间,因为它会产生抗锯齿输出。
对于中等大小的ggplot2绘图,我发现png()比X11()快1.7倍至2.6倍(这是使用
由于我可以使用像“feh”这样的极简图像查看器几乎即时地加载和重新加载PNG文件,所以我想知道为什么我不使用png()作为我的主要R绘图设备。
当然,问题在于在调用dev.off()之前,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......但我更熟悉命令行......)