用等高线贴图绘制三维曲面图
我有一个三元组数据集(X,Y,Z点),我想用R来绘制。
我想从数据中创build一个曲面图,并在曲面图上叠加一个等高线图,以便创build等高线图的印象,即“阴影”或来自曲面图的投影。 等高线图将显示在曲面图下方。
我的数据集看起来有点像这样:
Axis | Data Type ------------------- X | Date value Y | Float value Z | Float value
我怎样才能做到这一点?
编辑:
我刚刚看到你指出你的一个维度是一个date。 在这种情况下, 可以看看Jeff Ryan的chartSeries3d , 这个chartSeries3d是用来绘制三维时间序列的。 在这里,他显示了随着时间的收益曲线:
chartSeries示例examples/chartSeries3d/chartSeries3d-thumb.png
原始答案:
据我所知,你想要一张地图作为三维表面图下的平面上的投影。 我不相信有一个简单的方法可以做到这一点,而不是创build两个地块,然后结合起来。 您可能会发现空间视图对此有帮助 。
有两个用于3D绘图的主要R包: rgl (或者您可以使用相关的misc3d包)和scatterplot3d 。
RGL
rgl包使用OpenGL创build交互式3D图( 在rgl网站上阅读更多信息 )。 这是一个使用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参数使这个表面部分透明。 现在,您有一个表面的交互式三维图,并且您要在下面创build一个计数图。 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")
在这个表面上,我将高度设置为1,以便在另一个表面下面有一个平面。 这最终看起来像这样,可以用鼠标旋转:
3D曲面图160wpb4.jpg
scatterplot3d
scatterplot3d更像R中的其他绘图function( 读小插曲 )。 这是一个简单的例子:
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 在创build一个tanslucent背景图像上有一个不错的post 。