我想在目前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)
是否有可能从每一个多边形后重绘抑制多边形()? 我猜这是耗时的步骤的时间最多,而且它不是在手册页提及。 对于如何实现这一另类的建议,将不胜感激。 谢谢。
你可以通过几个多边形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)
工作快。 我测试过控制种子和与你的代码生成的情节比较。
这里使用的矢量溶液grid.polygon
所述的grid
包。 我用的是lattice
刚刚绘制场景( xyplot(0~0)
plot(0)
library(lattice)
library(grid)
xyplot(0~0, xlim=c(min(x),max(x)), ylim=c(min(y),max(y)),
panel=function(...)
{
grid.polygon(x = as.vector(t(x)),
y = as.vector(t(y)),
id = rep(1:n,each=3),
gp=gpar(fill=cols),
def='native')
})
这需要不到30秒,我微薄的PC生成60000个多边形。