使用 R 绘制带有等高线图叠加的 3D 曲面图

Posted

技术标签:

【中文标题】使用 R 绘制带有等高线图叠加的 3D 曲面图【英文标题】:Plotting a 3D surface plot with contour map overlay, using R 【发布时间】:2010-12-26 04:02:25 【问题描述】:

我有一个三元组数据集(X、Y、Z 点),我想使用 R 进行绘图。

我想从数据中创建一个曲面图,并在曲面图上叠加一个等高线图,以创建等高线图是曲面图的“阴影”或投影的印象。等高线图将出现在曲面图下方。

我的数据集看起来有点像这样:

Axis  |  Data Type
-------------------
X     |  Date value
Y     |  Float value
Z     |  Float value

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

编辑:

我刚刚看到您指出您的维度之一是日期。在这种情况下,have a look at Jeff Ryan's chartSeries3d 旨在绘制 3 维时间序列。在这里,他展示了一段时间内的收益率曲线:

原答案:

据我了解,您希望计数地图成为 3D 曲面图下方平面上的投影。除了创建两个情节然后将它们组合起来之外,我认为没有其他简单的方法可以做到这一点。你可以find the spatial view helpful for this。

3D 绘图有两个主要的 R 包:rgl(或者您可以使用相关的misc3d 包)和scatterplot3d

rgl

rgl 包使用 OpenGL 创建交互式 3D 绘图 (read more on the rgl website)。下面是一个使用surface3d 函数的例子:

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

alpha 参数使这个表面部分透明。现在您有一个表面的交互式 3D 图,并且您想在下面创建一个计数地图。 rgl 允许您向现有图像添加更多图:

colorlut <- heat.colors(zlen,alpha=1) # use different colors for the contour map
col <- colorlut[ z-zlim[1]+1 ] 
rgl.surface(x, y, matrix(1, nrow(z), ncol(z)),color=col, back="fill")

在这个表面上,我设置了 heights=1 以便我们在另一个表面下方有一个平面。这最终看起来像这样,并且可以用鼠标旋转:

scatterplot3d

scatterplot3d 有点像 R 中的其他绘图函数 (read the vignette)。这是一个简单的例子:

temp <- seq(-pi, 0, length = 50)
x <- c(rep(1, 50) %*% t(cos(temp)))
y <- c(cos(temp) %*% t(sin(temp)))
z <- c(sin(temp) %*% t(sin(temp)))
scatterplot3d(x, y, z, highlight.3d=TRUE,
 col.axis="blue", col.grid="lightblue",
 main="scatterplot3d - 2", pch=20)

在这种情况下,您需要叠加图像。 R-Wiki has a nice post on creating a tanslucent background image.

【讨论】:

非常感谢谢恩。我认为这是一个非常好的起点。顺便说一句,您可能已经注意到其中一个轴是按时间顺序排列的(即日期)。在尝试绘图之前我是否需要进行任何操作,或者 R(或者实际上是 rgl 包)是否会正确处理日期? 您好 Shane,非常感谢您的帮助。你给了我足够的弹药让我感到兴奋。如果我遇到更具体的问题,我会带着更具体的问题回到这里。我会将您的答案标记为已接受。 我想知道这是否也适用于点数据?我有纬度/经度数据,每个点都有一定的值。我也可以将这些数据用作“高度图”吗?

以上是关于使用 R 绘制带有等高线图叠加的 3D 曲面图的主要内容,如果未能解决你的问题,请参考以下文章

如何用excel做等高线图

使用 Plotly 在等高线图上叠加线

如何在稀疏点之间插入数据以在 R & plotly 中绘制等高线图

arcmap如何通过捕捉功能将等高线与画框图层叠合

origin做等高线图文字和线条重叠,怎么弄

R:将两个等高线图组合在一起