我正在尝试在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)
如何使渲染更快?
R绘图的慢速主要有两个来源:
可以使用适当的设备打开和后端选择命令来更改图形后端–对我而言,这通常有帮助:
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=19
或pch=20
默认情况下的某些变体,由于抗锯齿,它们的速度太慢。通常,您可以通过使用pch='.'
(只是一个非锯齿像素)或pch=16
(一个小的非锯齿圆圈)来获得大约10倍的渲染速度。这也分别适用于带有shape='.'
和的ggplot shape=16
。如果您有很多点并设置了较低的Alpha,则可以免费获得“抗锯齿”。
对我来说,只需切换图形后端并设置不同的点形状,就可以将30万分钟到100万点的绘图从30分钟缩短到几秒钟。应该在一秒钟之内渲染500k数据点。
小智 3
一般来说,我为此使用两种策略:
1)如评论中所述,对数据进行合理的描述性样本不会影响您的绘图,并且您将减少要渲染的点数。
2)我使用的一个技巧实际上是创建对象而不显示绘图,而是将绘图保存到 PNG 图像中。这实际上大大加快了处理速度,因为当您打开图像时,它将是光栅图像而不是矢量图像。
归档时间: |
|
查看次数: |
3347 次 |
最近记录: |