绘制具有高度图值的点数据
Plotting point data with value as heightmap
我有 lat
和 lng
坐标的点数据。在每个点,都有一个特定的值,范围在 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()
函数需要什么输入数据?
当我的数据只有三个列 lat
、lng
和一个 value
时,我将如何使用代码。我试图替换
z <- myData$value
x <- myData$lat
y <- myData$lng
那没用。
看起来 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
x
和 y
基本上是 x 轴和 y 轴的比例。在这种情况下,它希望每个值都均匀地相距 10 米,这就是我们进行 10 米间距调整的原因。如果您遇到点之间的距离不是 10 米的情况,您可以通过调整这些 x 和 y 值来显示点到点的相对距离。
如果将行更改为
x <- 5 * (1:nrow(z)) # 5 meter spacing (S to N)
您会看到所有点的位置仍然正确,但是通过告诉函数每个值之间的距离更小,您将其中一个轴靠得更近。
在你的情况下,我会确保 myData$value
是一个矩阵,如果不是,请尝试使用 long/lat 对其进行排序。希望这有帮助。
您找到的示例已有 6 年以上的历史。使用 surface3d
或 persp3d
会得到更好的结果;他们的帮助页面中有示例。 surface3d
的设置与 x
、y
和 z
相同,然后使用
绘制它们
surface3d(x, y, z, color = col, back = "lines")
想法是在 x
中发送网格上点的 x 坐标,在 y
中发送 y 坐标,在 z
中发送 z 坐标。您可以将它们作为矩阵(所有三个形状相同),或者将 x
和 y
作为向量,如果坐标在整个网格上相同。
示例使用
x <- 10 * (1:nrow(z))
用值 (10, 20, 30, ...)
填充 x
,每行一个条目 z
。
我有 lat
和 lng
坐标的点数据。在每个点,都有一个特定的值,范围在 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()
函数需要什么输入数据?
当我的数据只有三个列 lat
、lng
和一个 value
时,我将如何使用代码。我试图替换
z <- myData$value
x <- myData$lat
y <- myData$lng
那没用。
看起来 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
x
和 y
基本上是 x 轴和 y 轴的比例。在这种情况下,它希望每个值都均匀地相距 10 米,这就是我们进行 10 米间距调整的原因。如果您遇到点之间的距离不是 10 米的情况,您可以通过调整这些 x 和 y 值来显示点到点的相对距离。
如果将行更改为
x <- 5 * (1:nrow(z)) # 5 meter spacing (S to N)
您会看到所有点的位置仍然正确,但是通过告诉函数每个值之间的距离更小,您将其中一个轴靠得更近。
在你的情况下,我会确保 myData$value
是一个矩阵,如果不是,请尝试使用 long/lat 对其进行排序。希望这有帮助。
您找到的示例已有 6 年以上的历史。使用 surface3d
或 persp3d
会得到更好的结果;他们的帮助页面中有示例。 surface3d
的设置与 x
、y
和 z
相同,然后使用
surface3d(x, y, z, color = col, back = "lines")
想法是在 x
中发送网格上点的 x 坐标,在 y
中发送 y 坐标,在 z
中发送 z 坐标。您可以将它们作为矩阵(所有三个形状相同),或者将 x
和 y
作为向量,如果坐标在整个网格上相同。
示例使用
x <- 10 * (1:nrow(z))
用值 (10, 20, 30, ...)
填充 x
,每行一个条目 z
。