R:如何快速在循环中绘制复杂图形?

时间:2018-02-05 21:50:38

标签: r performance matrix plot

我的第一个问题。

我想在循环中绘制三层颜色,这是我的代码:

matx<-array(rep(1:100,100),dim=c(100,100))       #Matrix of horizontal plot values
maty<-array(rep(1:100,each=100),dim=c(100,100))  #Matrix of vertical plot values

colPlant<-array("darkgreen",dim=c(100,100))    #Matrix for plants 
colHerbivores<-array(NA,dim=c(100,100))        #Matrix for herbivores
colPredator<-array(NA,dim=c(100,100))          #Matrix for predators

#Start simulation
for(i in 1:20) {
plot(maty~matx,cex=10,pch=".",col=colPlant)        #1st layer
points(maty~matx,cex=8,pch=".",col=colHerbivores)  #2nd layer
points(maty~matx,cex=6,pch=".",col=colPredator)    #3rd layer

colHerbivores[sample(1:10000,10)]<-"orange"
colPredator[sample(1:10000,3)]<-"black"
}

maty和matx包含y值和x值(100 * 100个单元格)。如您所见,我只是在100 * 100网格的每个位置上绘制一个点,并让颜色与三个矩阵中的信息相匹配。

绘制第一层会产生一个具有100 * 100绿色像素的图形设备,这正是我想要的。 cex值使得点之间没有空白区域(如果bg =“白色”)。第二层主要是透明的,但在“场”上添加了一些较小的橙色像素。第三层又主要是透明的,但在“场”上增加了一些较小的黑点。这是我的代码的一个非常简化的版本。

基本上,我首先绘制植物并使用较小的符号覆盖较高的营养水平。我使用NA值覆盖空位置,生成透明色。

然后跟随代码更改colHerbivores和colPredator中的彩色像素数。经过计算,我想重新绘制。 我的问题是绘制每一层都需要时间。与计算相比相对较长。结果是第一层在几分之一秒内可见,第二层被添加然后第三层,但是用户几乎没有时间实际看到第三层,因为在下一次迭代中绘制第一层也是如此在当前交互中绘制第3层后快速绘制。这导致colHerbivores和colPredator的'闪烁'与colPlant作为背景。

我希望一次看到所有营养级别,即迭代1的完整图像,然后是迭代2的完整图像,依此类推。因此,每次迭代只需要一个图像。 我的问题:我该怎么做?

我使用png()readPNG将图表导出为图像。这会将完整的绘图转换为图像,然后在图形设备上绘制图像而不是使用plot(),但这会大大减慢迭代过程。 我希望能够分别调整每个矩阵,因此将三个矩阵合并为一个不是计算的选项。

是否有人建议如何使营养水平同时出现(接近),同时保持迭代速度?

0 个答案:

没有答案