【问题标题】:Plot a surface and create a heatmap on it绘制表面并在其上创建热图
【发布时间】:2017-03-15 06:53:13
【问题描述】:

我需要使用 R 在 3 维绘图​​中表示一个表面。

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

目前我只能使用 rgl 绘制点

plot3d(nodes)

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

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

【问题讨论】:

  • 我不怎么使用 R,但我想这很容易做到。 [这里][1] 是关于使用矩形网格的 SO 的答案,但它可能适用于您拥有的三角形网格。您能否发布一些代码,以便我可以生成像您的网格和实验一样的网格? [1]:stackoverflow.com/questions/3786189/r-4d-plot-x-y-z-colours
  • 发布我链接的答案的人提到使用 rgl 所以也许你可以使用它。我刚刚搜索了“R 中的 4d 绘图”并得出了一些结果,如果您还没有搜索过,这可能会对您有所帮助。
  • 谢谢 Julian,我添加了一个指向 gdrive 存储库的链接,我在其中上传了文件和使用 matlab 获得的输出!
  • 找到了另一个解决方案。您必须先转换数据。 stackoverflow.com/questions/29502268/…。我无法打开您链接的文件,它们太大了。

标签: r plot heatmap mesh surface


【解决方案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 个数字表示,其中 9 个代表坐标,1 个代表颜色。

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)
}

输出是

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 2013-09-26
    • 2019-02-13
    • 1970-01-01
    相关资源
    最近更新 更多