3

R パッケージ rgl を使用して交差面をプロットしたいと思います。データの 3D 配列があり、定数 "z" (array[,,n]) でサーフェスをプロットするのに問題はありません。ただし、同じ rgl プロットに垂直面 (array[n,,]) をプロットする方法がわかりません。

例: 次を使用してデータを設定できます。

dat <- list()
lengthout <- 20 # number of data in x, y and z
xrange <- seq(0,10,length.out=lengthout) # sets up dimensions
yrange <- xrange
zrange <- xrange

dat$x <- xrange # contain data in list
dat$y <- yrange
dat$z <- array(rnorm(lengthout^3),dim=c(lengthout,lengthout,lengthout)) # create random data

次に、配列 [,,n] の複数の平坦なセクションを値で色分けして次のようにプロットします。

for (n in seq(1,lengthout,4)){
  zlim <- range(dat$z[,,n],na.rm=T) # range of data in slice
  zlen <- diff(zlim) + 1 # 
  colorlut <- rainbow(zlen) # value color lookup table
  colmah <- colorlut[dat$z[,,n] -zlim[1]+1] # assign colors to value at each point
  surface3d(dat$x,dat$y,array(n,dim=c(lengthout,lengthout)), color=colmah,specular="black",alpha=(1-n/lengthout))
}

コードからの出力

このようなものをプロットできるように、個々のサーフェスの軸を回転させる方法はありますか (「z」の代わりに定数「x」に注意してください):

zlim <- range(dat$z[n,,],na.rm=T) # range of data in slice
zlen <- diff(zlim) + 1 # 
colorlut <- rainbow(zlen) # value color lookup table
colmah <- colorlut[dat$z[n,,] -zlim[1]+1] # assign colors to value at each point    
surface3d(dat$x,dat$y,array(n,dim=c(lengthout,lengthout)), color=colmah,specular="black")

乾杯

4

1 に答える 1

6

解決済み: surface3d(blah) を使用する代わりに、rgl.surface( blah, coords=c(3,1,2)) を使用しました:

dat <- list()
lengthout <- 20 # number of data in x, y and z
xrange <- seq(0,10,length.out=lengthout) # sets up dimensions
yrange <- xrange
zrange <- xrange

dat$x <- xrange # contain data in list
dat$y <- yrange
dat$z <- array(rnorm(lengthout^3),dim=c(lengthout,lengthout,lengthout)) # create random data

n=1
# Plot constant "z"
zlim <- range(dat$z[,,n],na.rm=T) # range of data in slice
zlen <- diff(zlim) + 1 # 
colorlut <- rainbow(zlen) # value color lookup table
colmah <- colorlut[dat$z[,,n] -zlim[1]+1] # assign colors to value at each point
rgl.surface(xrange,yrange,array(n,dim=c(lengthout,lengthout)), color=colmah,specular="black",alpha=(1-n/lengthout),coords=c(1,2,3))

# Plot constant "x"
zlim <- range(dat$z[n,,],na.rm=T) # range of data in slice
zlen <- diff(zlim) + 1 # 
colorlut <- rainbow(zlen) # value color lookup table
colmah <- colorlut[dat$z[n,,] -zlim[1]+1] # assign colors to value at each point
rgl.surface(yrange,zrange,array(n,dim=c(lengthout,lengthout)), color=colmah,specular="black",alpha=(1-n/lengthout),coords=c(3,1,2))

# Plot constant "y"
zlim <- range(dat$z[,n,],na.rm=T) # range of data in slice
zlen <- diff(zlim) + 1 # 
colorlut <- rainbow(zlen) # value color lookup table
colmah <- colorlut[dat$z[,n,] -zlim[1]+1] # assign colors to value at each point
rgl.surface(xrange,zrange,array(n,dim=c(lengthout,lengthout)), color=colmah,specular="black",alpha=(1-n/lengthout),coords=c(1,3,2))
axes3d()

ここに画像の説明を入力

于 2013-09-12T02:59:59.320 に答える