绘制点数据,其值为高度图

时间:2015-12-14 16:45:02

标签: r opengl plot rgl

我的点数据包含latlng坐标。在每个点,都有一个特定的值,范围在0到100之间。我想使用rgl包将其绘制为高度图。如果找到here

,那就是一个例子
library(rgl)
data(volcano)
z <- 2 * volcano # Exaggerate the relief
x <- 10 * (1:nrow(z)) # 10 meter spacing (S to N)
y <- 10 * (1:ncol(z)) # 10 meter spacing (E to W)
zlim <- range(z)
zlen <- zlim[2] - zlim[1] + 1
colorlut <- terrain.colors(zlen,alpha=0) # height color lookup table
col <- colorlut[ z-zlim[1]+1 ] # assign colors to heights for each point
open3d()
rgl.surface(x, y, z, color=col, alpha=0.75, back="lines")

但是,我不明白。这是我第一次使用rgl并且不太明白这里提供了哪种数据(volcano)。 我看过它,但我不明白......

1:nrow(z)1:ncol(z)中的内容是什么?!为什么是间距? rgl.surface()函数需要哪些输入数据? 当我的数据只有三个列latlngvalue时,如何使用代码?我试图替换

z <- myData$value
x <- myData$lat
y <- myData$lng

那不起作用。

2 个答案:

答案 0 :(得分:1)

您找到的示例已超过6年。使用surface3dpersp3d,您将获得更好的结果;他们的帮助页面中有一些示例。 surface3d的设置与xyz的设置相同,然后使用

绘制它们
surface3d(x, y, z, color = col, back = "lines")

您的想法是网格上的点的x坐标是xy中的y坐标和z中的z坐标。您可以将它们作为矩阵给出(对于所有三个都是相同的形状),或者如果坐标在网格中的坐标相同,则将xy作为向量。

该示例使用

x <- 10 * (1:nrow(z))

x填充(10, 20, 30, ...),每行z一个条目。

答案 1 :(得分:0)

看起来z必须是您的值的矩阵。它包含值的相对位置([1,1] = 200将是3d绘图的一个角,它包含值200.您的点的位置包含在z以及你的观点的价值。

> z[1:5,1:5]
     [,1] [,2] [,3] [,4] [,5]
[1,]  200  200  202  202  202
[2,]  202  202  204  204  204
[3,]  204  204  206  206  206
[4,]  206  206  208  208  208
[5,]  208  208  210  210  210

xy基本上是x轴和y轴的刻度。在这种情况下,它希望每个值均匀地相隔10米,这就是为什么我们有10米的间距调整。如果你的情况是这些点相距不超过10米,你可以通过调整这些x和y值来显示点到点的相对距离。

如果您将行更改为 x <- 5 * (1:nrow(z)) # 5 meter spacing (S to N)你会看到所有点的位置仍然是正确的,但你通过告诉函数每个值之间的距离较小来将一个轴更靠近在一起。

在你的情况下,我会确保myData$value是一个矩阵,如果不是,请尝试使用long / lat对其进行排序。希望这会有所帮助。