遺伝的浮動をplot3dで描く

こちらでperspを使って描いているけど、plot3dでグリグリしたいので

N<-50                   #集団のサイズ
k<-3                    #残せる遺伝子の最大数
#k<-"infinity"          #残せる遺伝子が無限大の場合
T<-10                   #世代数
initial <- 5            #最初に存在する変異アレル数


#推移確率の行列を作る
A<-matrix(0,N+1,N+1)
for (i in 0:N){
	for(j in 0:N){
		if (k == "infinity"){
			A[j+1,i+1]<-choose(N,j)*i^j*(N-i)^(N-j)/N^N
			}else{
				A[j+1,i+1]<- choose(i*k,j)*choose((N-i)*k,N-j)/choose(N*k,N)
				}
		
		}
	}
#apply(A,1,sum)                                  #確認

#各世代ごとの変異アレル数の存在確率のベクトル
v<-c(rep(0,N+1))
v[initial+1]<-1                                  #第1世代の分布

#各世代のベクトルvを並べて行列Dを作る
D<-c()
D<-cbind(D,v)
for (t in 1:T){
	v<-A%*%v                                 #次世代のベクトル
	D<-cbind(D,v)
	}
#apply(D,2,sum)                                  #確認
persp(D,theta=150,phi=30,shade=0.2,xlab="mutatns",ylab="generations",zlab="probability",col="green")

で、ここからplot3d用

x<- 1:(N+1)                   # x点を用意
y<- 1:(T+1)                   # y点を用意
library(rgl)
plot3d(x,y,D,xlab="Mutatns",ylab="Generations",zlab="Probability")

こんな感じで大丈夫か?
なんか違うのであとで修正する。
 
やっぱりな。

open3d()
plot3d(x,y,D[,1])

でなんか傾いていることが判明。

open3d()
plot3d(x,1,D[,1])

ならうれしい。
 
行列を強引に(x,y,z)に持っていくことにしよう。
今、上でN,T,Dが生成されたとして

x<- t(t(c(rep(1:(N+1),T+1))))     # x点の生成
y<- c()
for(i in 1:(T+1)){
  y<- c(y,rep(i,N+1))
}
y<- t(t(y))                       # y点の生成
z<- c(D)                          # z点の生成

library(rgl)
plot3d(x,y,z,xlab="Mutatns",ylab="Generations",zlab="Probability",col=rainbow((T+1)*(N+1)))