Построение трехмерного участка поверхности с наложением карты контура, используя R

У меня есть набор из 3 кортежей (точки X, Y, Z), которые я хочу построить с использованием R.

Я хочу создать поверхностный график из данных и наложить контурную карту на графике поверхности, чтобы создать впечатление о том, что карта контура является "тенью" или проекцией из участка поверхности. Карта контура должна появиться ниже участка поверхности.

Мой набор данных выглядит примерно так:

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

Как я могу это достичь?

Ответ 1

Edit:

Я только что увидел, что вы указали, что одним из ваших измерений является дата. В этом случае посмотрите на Jeff Ryan chartSeries3d, который предназначен для диаграмм трехмерных временных рядов. Здесь он показывает кривую доходности по времени:

пример chartSeries http://www.quantmod.com/examples/chartSeries3d/chartSeries3d-thumb.png

Оригинальный ответ:

Как я понимаю, вы хотите, чтобы карта подсчета была проекцией на плоскость под 3D-графикой. Я не считаю, что есть простой способ сделать это, кроме создания двух сюжетов, а затем их объединения. Вы можете найти пространственный вид, полезный для этого.

Существует два основных пакета R для трехмерного построения: rgl (или вы можете использовать связанный misc3d) и scatterplot3d.

RGL

В пакете rgl используется OpenGL для создания интерактивных 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 делает эту поверхность частично прозрачной. Теперь у вас есть интерактивный 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")

На этой поверхности я устанавливаю высоты = 1, так что мы имеем плоскость под другой поверхностью. Это выглядит так и может поворачиваться с помощью мыши:

3D-график поверхности http://i45.tinypic.com/12637gy.jpg

scatterplot3d

scatterplot3d немного больше похож на другие функции построения в R (читать виньетку). Вот простой пример:

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 имеет хороший пост при создании фонового изображения tanslucent.