我的第一个问题。
我想在循环中绘制三层颜色,这是我的代码:
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()
,但这会大大减慢迭代过程。
我希望能够分别调整每个矩阵,因此将三个矩阵合并为一个不是计算的选项。
是否有人建议如何使营养水平同时出现(接近),同时保持迭代速度?