在R中调用多边形时取消重画

use*_*817 4 graphics r

我想在R中的单个绘图上绘制60,000+个不重叠的三角形(非结构化三角形网格的一部分)。当前,每个绘图需要15-20分钟,因此无法使用它制作动画。例如,

n <- 100 #Except replace this with 60,000
x <- matrix(runif(3*n), n)
y <- matrix(runif(3*n), n)
cols <- heat.colors(n)[order(x[,1])]
poly <- function(i) {polygon(x[i,], y[i,], col=cols[i])}
plot(0, xlim=c(min(x),max(x)), ylim=c(min(y),max(y)))
sapply(1:n, poly)
Run Code Online (Sandbox Code Playgroud)

是否可以禁止在每个多边形之后重绘polygon()?我猜这是最耗时的步骤,并且在手册页中没有提到。如何实现这一目标的替代建议将不胜感激。谢谢。

Fer*_*aft 5

您可以将多个多边形传递到polygon。您所需要做的就是与分开NA。这是一个代码:

cuts <- function(x)
{
    n <- length(x) %/% 3

    map <- rep(c(TRUE,TRUE,TRUE,FALSE), n)

    result <- rep(NA, n*4)

    result[map] <- x

    result
}


set.seed(1234)

n <- 10000
x <- matrix(runif(3*n), n)
y <- matrix(runif(3*n), n)
cols <- heat.colors(n)[order(x[,1])]
plot(0, xlim=c(min(x),max(x)), ylim=c(min(y),max(y)))
polygon(x=cuts(t(x)), y=cuts(t(y)), col=cols)
Run Code Online (Sandbox Code Playgroud)

工作迅速。我已经测试了控制种子并与您的代码生成的图进行比较。