在R

时间:2018-02-07 03:28:03

标签: r animation

我正在尝试创建一个放大圆来测试鱼的表观隐藏阈值。我希望能够控制圆的半径和半径增加的速率。 我有以下代码:

library(plotrix)
px=1:50
py=1:50
plot(px,py,type="n",xlab="",ylab="",axes = FALSE)#create blank plot
x=25#set x location of circle
y=25#set y location of circle
radius=seq(1,20,by=.5)#set sequence of radii to plot
#plot circle on top of each other to give appearance of growing circle
#at a rate of Sys.sleep(x)
for (i in radius){
  draw.circle(x,y,radius = i,col="black")
  Sys.sleep(1)#plot one circle per second
}

该代码允许我更改圆的半径和速率,但是,如果Sys.sleep(x)设置为低于1,则for循环需要太长时间才能处理并跳过序列中的圆圈。是否有替代for循环可以加快绘图速度,以便我可以让整个动画运行速度超过每秒1帧? 谢谢

1 个答案:

答案 0 :(得分:0)

我怀疑Students比for循环慢了plotrix。你可以只绘制一个正常的点,让他用cex精益求精;将所有内容包装成函数。

growCycle <- function(x) {
  plot(25, 25, xlab="", ylab="", axes=FALSE, asp=1, col=1, pch=20, cex=x)
  Sys.sleep(.2)  # at least 5 fps
}

注意:考虑更多图形参数,请考虑?plot?par

然后使用sapply()

radius = seq(1, 20, by=.5)
sapply(radius, growCycle) 

结果速度提高了400%!

希望这有帮助。

circle