在R中有效地绘制数百万个数据点

时间:2016-01-20 14:42:33

标签: r plot ggplot2

我试图在R中绘制数百万个数据点。我目前正在使用ggplot2(但我对替代包的建议持开放态度)。问题是图表渲染时间太长(通常超过一分钟)。我正在寻找更快速实现这一目标的方法 - 实时理想。我将不胜感激任何帮助 - 为了清楚起见,将代码附加到问题上。

创建一个包含~500000个数据点的(随机)数据框:

letters <- c("A", "B", "C", "D", "E", "F", "G")
myLetters <- sample(x = letters, size = 100000, replace = T)
direction <- c("x", "y", "z")
factor1 <- sample(x = direction, size = 100000, replace = T)
factor2 <- runif(100000, 0, 20)
factor3 <- runif(100000, 0, 100)
decile <- sample(x = 1:10, size = 100000, replace = T)


new.plot.df <- data.frame(letters = myLetters, factor1 = factor1, factor2 = factor2, 
                      factor3 = factor3, decile = decile)

现在,绘制数据:

color.plot <- ggplot(new.plot.df, aes(x = factor3, y = factor2, color = factor1)) +
geom_point(aes(alpha = factor2)) +
facet_grid(decile ~ letters)

enter image description here

如何让渲染更快?

2 个答案:

答案 0 :(得分:4)

R绘图的慢速主要有两个来源:

  1. 图形设备和一般后端
  2. 绘制太多复杂的形状

可以使用适当的设备打开和后端选择命令来更改图形后端-对我来说,这通常有帮助:

options(bitmapType='cairo')  #set the drawing backend, this may speed up PNG rendering
x11(type='cairo')   #drawing to X11 window using cairo is the fastest interactive output for me

(X11在Windows上不可用,在Rstudio中有点混乱,但这是另一回事了)

绘制简单形状很有帮助。 ggplot默认使用pch=19pch=20的某些变体,由于抗锯齿,它们变慢了。通常,使用pch='.'(这是一个非锯齿像素)或pch=16(这是一个较小的非锯齿圆圈),渲染速度通常可以提高10倍左右。这也分别适用于具有shape='.'shape=16的ggplot。如果您有很多点并设置了较低的Alpha,则可以免费获得“抗锯齿”。

对我来说,只需切换图形后端并设置不同的点形状,就可以将30万分钟内的100万个点的绘图提高到几秒钟。应该在一秒钟之内呈现50万个数据点。

答案 1 :(得分:1)

一般来说,我使用两种策略:

1)如评论中所述,对数据进行合理的描述性样本不会影响您的情节,您将减少要渲染的点数。

2)我使用的一个技巧实际上是创建对象而不显示绘图,而是将绘图保存为PNG图像。这实际上加快了这个过程,因为当你打开图像时,它将是一个光栅而不是一个矢量图像。