rgl矩阵的二维曲面图没有足够的细节

时间:2014-12-26 21:56:38

标签: r rgl

我正在尝试使用rgl来表面绘制这个矩阵“r”:

library(rgl)             

          Banana      Apple   BlueBerry Kiwi      Raisin      Strawberry
Chicago   1.0000000 0.9972928 0.9947779 1.0623767 0.9976347   0.9993892
Wilmette  1.0016507 1.0000000 0.9976524 0.9863927 0.9985248   1.0016828
Winnetka  1.0040722 1.0025362 1.0000000 0.9886008 1.0016501   0.9955785
Glenview  0.9961316 1.0105463 1.0167024 1.0000000 1.0129399   1.0123440
Deerfield 1.0023308 1.0026052 0.9979093 0.9870921 1.0000000   1.0025606
Wheeling  1.0073697 0.9985745 1.0045129 0.9870925 1.0008054   1.0000000


rgl.surface(1:6 , 1:6 , r, color="red", back="lines")

由于z值在幅度上非常接近,因此表面图看起来几乎是平坦的,即使数据中存在细微的颠簸。

1)我如何制作它以便我有一个放大版本,我可以看到尽可能多的细节?

2)有没有办法以不同的颜色显示具有最大“斜率”,的数据(面),以便保留矩阵的列和行的标签3D表面(可能只是使用标签的前三个字母)?换句话说,我可以看到芝加哥的新西兰人和威尔梅特的新西兰人造成最大/最大变化?

1 个答案:

答案 0 :(得分:4)

这样的东西?

library(rgl)
library(colorRamps)         # for matlab.like(...)
palette <- matlab.like(10)  # palette of 10 colors
rlim    <- range(r[!is.na(r)])
colors  <- palette[9*(r-rlim[1])/diff(rlim) + 1] 

open3d(scale=c(1/6,1/6,1/diff(range(r))))
surface3d(1:6 , 1:6 , r, color=colors, back="lines")

您的部分问题是您错误地使用了rgl.surface(...)第二个参数是z值的矩阵。使用surface3d(...)时,参数的顺序为x,y,z。

编辑:回应OP的评论。

使用您的事后数据集......

open3d(scale=c(1/6,1/6,1/diff(range(r))))
bbox3d(color="white")
surface3d(1:6 , 1:6 , r, color=colors, back="lines")
axis3d('x--',labels=rownames(r),tick=TRUE)
axis3d('y-+',labels=colnames(r),tick=TRUE)
axis3d('z--',tick=TRUE)