Построение трехмерного участка поверхности с наложением контурной карты, используя R
У меня есть 3-кортежный набор данных (X,Y, Z точек), которые я хочу построить с помощью R.
Я хочу создать участок поверхности из данных и наложить контурную карту на участок поверхности, чтобы создать впечатление контурной карты, являющейся "тенью" или проекцией с участка поверхности. Контурная карта должна появиться под поверхностным участком.
мой набор данных выглядит так:
Axis | Data Type
-------------------
X | Date value
Y | Float value
Z | Float value
Как я могу этого достичь?
1 ответ:
Edit:
Я только что видел, что вы указали, что одно из ваших измерений-это дата. В таком случае, взгляните на chartSeries3d Джеффа Райана, который предназначен для Таблица 3-мерных временных рядов. Здесь он показывает кривую доходности с течением времени:
пример карт http://www.quantmod.com/examples/chartSeries3d/chartSeries3d-thumb.png
Оригинальный Ответ:
как я понимаю, вы хотите, чтобы карта countour была проекцией на плоскость под 3D-поверхностью. Я не верю, что есть простой способ сделать это, кроме как создать два сюжета, а затем объединить их. Вы можете найти пространственный вид полезно для этого.
есть два основных пакета R для 3D-печати:rgl (или вы можете использовать соответствующие misc3d пакета) и scatterplot3d.
rgl
пакет rgl использует OpenGL для создания интерактивных 3D-графиков (подробнее на сайте ргл). Вот пример использования :
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")параметр "Альфа" делает эту поверхность частично прозрачным. Теперь у вас есть интерактивный 3D-График поверхности, и вы хотите создать карту countour внизу. 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 имеет хороший пост о создании серебристого фонового изображения.
Comments