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

Kar*_*wal 10 plot r 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)
Run Code Online (Sandbox Code Playgroud)

现在,绘制数据:

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

在此输入图像描述

如何使渲染更快?

exa*_*exa 5

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
Run Code Online (Sandbox Code Playgroud)

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

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

对我来说,只需切换图形后端并设置不同的点形状,就可以将30万分钟到100万点的绘图从30分钟缩短到几秒钟。应该在一秒钟之内渲染500k数据点。


小智 3

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

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

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