我想提高绘图的速度,我很满意(并且需要很多代码)R图形和ggplot包 - 所以我只想知道如何配置我的系统以加快绘图。
具体做法是:
更新:评论中的问题答案:
规格:Ubuntu 11.04,intel Core Duo,8GB ram,但我更感兴趣的是图形计算或图形渲染是限制性的,如果是,我该如何使用这些信息。
我的情节有很多对象,但我不知道绘图的计算成本是多少。我在绘图时没有进行任何具体的分析(我在完成任何必要的分析后进行绘图),虽然我知道有些是“动态”完成的,就像绘制平滑线或甚至将数据转换成位置一样。
答案 0 :(得分:9)
除非您拥有计算机密集型单一地块,否则加速多重绘图的一个好方法是并行处理。例如,假设您有一个数据框,并且您希望通过某个变量(或变量)将其分解,并为每个分区绘制图。
注册并行后端的方法有很多种,所以我不再赘述。例如,请参阅此小插图:http://cran.r-project.org/web/packages/doSMP/vignettes/gettingstartedSMP.pdf
然后查看Hadley的ddply
包中的函数plyr
并使用.parallel = TRUE
选项。基本上就是这样。然后就是正常绘图。
这是一个独立的例子:
#this is the particular library I chose to register a parallel backend. There are others. See the new "Parallel R" book for details.
library(doMC)
registerDoMC()
getDoParWorkers() #This lists how many workers you have (hopefully more than 1!)
library(ggplot2)
ddply(
mtcars, .variables = "vs", .fun = function(x) {
#do your plotting now
example_plot <- ggplot(x, aes(y = mpg, x = wt)) + geom_point() + geom_smooth(se = FALSE)
#save your plot
ggsave(paste(x$vs[1],".pdf",sep = ""), example_plot)
},
.parallel = TRUE
)
这将保存两个文件,即.pdf和1.pdf,它们是vs
数据帧的mtcars
变量的级别(即唯一值)。如果您通过变量country name
将其分解,则保存的文件将是国家/地区的名称。 0.pdf和1.pdf如下:
答案 1 :(得分:4)
正如@Xu Wang所指出的那样,你可以使用并行化来一次绘制几个图。
因此硬件方面,具有足够RAM的强大的快速多核机器会有所帮助。
如果你想在x-y图(散点图)中用100万个圆绘制单个图,那么图形硬件加速将非常有用。
但是,如果R中的图形设备支持硬件加速,那么快速显卡只会有所帮助。目前他们没有 - 正如@hadley指出的那样,ggplot
使用标准图形设备。
rgl
包显然使用OpenGL来制作3D图形。虽然没试过。您可以使用它来更有效地绘制一些图...
我有一些创建快速交互式硬件加速图(2d和3d)的经验,它的速度可以更快。 2d图实际上比3d图更难加速......但是插入R的当前图形设备概念可能并不容易。
更新我刚尝试了rgl
及其plot3d
一百万分。它是我的(相当强大的)笔记本电脑的完全交互式(小部分时间更新)。
library(rgl)
x <- sort(rnorm(1e6))
y <- rnorm(1e6)
z <- rnorm(1e6) + atan2(x,y)
plot3d(x, y, z, col=rainbow(1000))