绘制曲面并在其上创建热图

时间:2017-03-09 16:13:25

标签: r plot heatmap mesh surface

我需要使用R

在三维图中表示一个表面

我有一个矩阵“节点”(Nx3),每行有N个点中每个点的x,y,z坐标和一个矩阵“三角形”(Mx3),每行有3个点的索引是三角形的顶点。

目前我只能使用rgl

绘制点数
plot3d(nodes)

所以我想要做的是表示这个表面,我知道在Matlab中有一些很好的功能,但是我在R中找不到任何等价物!

然后我的目标是在三角形表面上绘制热图或色图,例如给定每个节点处某个函数的值

1 个答案:

答案 0 :(得分:1)

我从here偷了这个代码,然后根据你的目的调整它。我称之为三角形T和_T。每个三角形由三个坐标(x1,y1,z1),(x2,y2,z2)和(x3,y3,z3)组成,并且每个三角形具有与其颜色对应的数字c。此示例仅绘制两个三角形。在mymesh结构中,三角形存储为(x1,_x1,y1,_y1,z1,_z1,...,z3,_z3,c,_c)。尺寸为2x10,因为有两个三角形,一个三角形由10个数字表示,九个用于坐标,一个用于颜色。

mymesh <- structure(c(0,0,0,0,0,0,1,0,0,1,0,0,1,1,1,1,0,0,100,200),
                    .Dim = c(2, 10),
                    .Dimnames = list( NULL, c("x1", "y1", "z1",
                                              "x2", "y2", "z2",
                                              "x3", "y3", "z3",
                                              "value")
                    )
)

library(rgl)
rgl.open()
i <- 1
vertices <- c(mymesh[i,1:3],1,mymesh[i,4:6],1,mymesh[i,7:9],1)
indices <- c( 1, 2, 3)
shade3d( tmesh3d(vertices,indices) , col=1)
bg3d(color = "white")
for(i in 2:2){
  vertices <- c(mymesh[i,1:3],1,mymesh[i,4:6],1,mymesh[i,7:9],1)
  indices <- c( 1, 2, 3)
  shade3d( tmesh3d(vertices,indices) , col= i)
}

输出

two 3d triangles that can be rotated and stuff

可能有更好的方法。我不太了解R,并且坐标似乎以愚蠢的方式存储,因为R使用column major order.您可以更改它以便以更自然的方式输入坐标,即(x1,y1,z1,x2,..._y3,_z3,_c)然后将其转置到结构中。