在R中,哪些硬件限制了绘图速度?

16

我想要提高绘图的速度,而且我对 R 图形和 ggplot 包很满意(并且有许多需要的代码),所以我只想知道如何配置系统来加速绘图。

具体来说:

  1. R 中绘图的速度是否受处理器、内存、显卡的限制?
  2. 是否有特定的硬件组件或配置可以增加绘图速度?

更新:回答评论中的问题:

规格:Ubuntu 11.04,intel Core Duo,8GB 内存,但我更普遍地感兴趣的是图形计算或图形渲染是否有限制,如果有,我该如何利用这些信息。

我的图表有很多对象,但我不知道绘图的计算成本。我在绘图时不进行任何特定的分析(我在完成所需的任何分析后绘图),尽管我理解一些东西是“即时完成”的,例如绘制平滑线或将数据转换为位置。


你有研究过并行处理吗?还是你主要关注于计算密集型的单一图形? - Xu Wang
@Xu 不,我没有考虑到这个情况用于图形绘制,我通常对多个图形绘制感兴趣。 - David LeBauer
你有多个处理器吗?你使用的操作系统是什么?另外请注意,如果你真的想要更多的CPU功率或RAM,请考虑使用云服务,比如亚马逊的。不过我对此一无所知。 - Xu Wang
1
你的图表中有很多对象吗?还是只进行了大量计算?换句话说,你是计算受限还是渲染受限? - Tommy
@Tommy 我的图有很多对象,但我不确定这是计算限制到什么程度,例如 plot(rnorm(10e6)) 需要计算每个点的位置(绘图需要几秒钟,rnorm 只需要千分之一秒)。 - David LeBauer
显示剩余2条评论
2个回答

10
除非您有计算密集型的单个图形,否则加速多个绘图的好方法是使用并行处理。例如,假设您有一个数据框,并且您想按某个变量(或变量)将其分解,并为每个分区进行绘图。
有许多注册并行后端的方法,因此我不会详细介绍。例如,请参见此vignette: http://cran.r-project.org/web/packages/doSMP/vignettes/gettingstartedSMP.pdf 然后查看Hadley的plyr包中的函数ddply,并使用.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
)

这将保存两个文件,0.pdf和1.pdf,它们是mtcars数据框的vs变量的级别(即唯一值)。如果您按country name变量进行拆分,则保存的文件将是国家名称。 0.pdf和1.pdf如下所示:

enter image description here

enter image description here


3
不错的例子,但公正地说有时候使用格子图(lattice)比ggplot2更有帮助。它可以更快速地绘图。 - Dieter Menne

4
正如@Xu Wang所指出的那样,您可以使用并行化一次绘制多个图形。
因此,在硬件方面,具有大量RAM的强大快速的多核机器会有所帮助。
如果您想绘制一个仅包含100万个圆的x-y图(散点图),则图形硬件加速将非常有益。
但是,仅当R中的图形设备支持硬件加速时,快速的显卡才有用。目前它们不支持-正如@hadley所指出的那样,ggplot使用标准图形设备。
rgl软件包显然使用OpenGL来进行3D图形处理。虽然没有尝试过,但您可能能够使用它更有效地绘制一些图形...
我有一些创建快速交互式硬件加速绘图(2D和3D)的经验,速度可以提高数倍。 2D图绘制实际上比3D图更难加速... 可能不容易插入到R当前的图形设备概念中。
更新:我刚刚尝试了rgl及其plot3d,其中包含了100万个点。在我的(相当强大的)笔记本电脑上,它是完全交互式的(更新需要小于一秒钟)。
library(rgl)
x <- sort(rnorm(1e6))
y <- rnorm(1e6)
z <- rnorm(1e6) + atan2(x,y)
plot3d(x, y, z, col=rainbow(1000))

2
如果 R 图形设备支持的话,ggplot2 将支持硬件加速。 - hadley
大家的回答都很好。这里还有一个不错的rgl示例:https://dev59.com/H2w15IYBdhLWcg3wLI3I#6814180 - Ari B. Friedman
Hadley的观点相关的讨论:https://groups.google.com/forum/#!topic/ggplot2/nFabw697JK0 - naught101

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