Wednesday, March 14, 2018

Some points moving around randomly in a box

For my PopGen I was thinking about writing some spatial population genetic simulations.

First I thought I'd write a little animation of things moving randomly in two dimensions. Here's what that looks like:

moving.randomly<-function(sig2=0.1,ngen=1000,sleep=0.1){
    x<-rep(1:9,9)
    y<-c()
    for(i in 1:9) y<-c(y,rep(i,9))
    n<-length(x)
    dev.hold()
    plot(x,y,xlim=c(0,10),ylim=c(0,10),pch=21,
        bg=phytools:::make.transparent("blue",0.2),cex=2)
    lines(c(0,0,10,10,0),c(0,10,10,0,0),lwd=6,
        col=phytools:::make.transparent("blue",0.2))    
    dev.flush()
    for(i in 1:ngen){
        x<-x+rnorm(n=n,sd=sqrt(sig2))
        while(!(all(x<10)&&all(x>0))){
            x[which(x<0)]<-abs(x[which(x<0)])
            x[which(x>10)]<-10-(x[which(x>10)]-10)
        }
        y<-y+rnorm(n=n,sd=sqrt(sig2))
        while(!(all(y<10)&&all(y>0))){
            y[which(y<0)]<-abs(y[which(y<0)])
            y[which(y>10)]<-10-(y[which(y>10)]-10)
        }
        dev.hold()
        plot(x,y,xlim=c(0,10),ylim=c(0,10),pch=21,
            bg=phytools:::make.transparent("blue",0.2),cex=2)
        lines(c(0,0,10,10,0),c(0,10,10,0,0),lwd=6,
            col=phytools:::make.transparent("blue",0.2))
        dev.flush()
        Sys.sleep(sleep)
    }
}
moving.randomly(sig2=0.01)

The above .gif I actually made & then subsequently embedded in the .html using ImageMagick as follows:

png(file="mr-%04d.png",width=600,height=600)
moving.randomly(sig2=0.01,sleep=0)
dev.off()
system("ImageMagick convert -delay 10 -loop 0 *.png 14Mar18b-post.gif")
file.remove(list.files(pattern=".png"))

No comments:

Post a Comment

Note: due to the very large amount of spam, all comments are now automatically submitted for moderation.