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

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

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

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

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

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

Редактировать:

Я просто заметил, что вы указали, что одним из ваших измерений является дата. В этом случае взгляните на диаграмму Джеффа Райана ChartSeries3d, которая предназначена для отображения трехмерных временных рядов. Здесь он показывает кривую доходности с течением времени:

Пример chartSeries http://sofru.miximages.com/r/chartSeries3d-thumb.png

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

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

Существует два основных пакета R для 3D-графика: 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://sofru.miximages.com/r/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 .

Давайте будем гением компьютера.