Графическое изображение 3D объемной поверхностной диаграммы с наложением контурной карты, использование R

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

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

Мой набор данных несколько походит на это:

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

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

60
задан Peter Mortensen 24 November 2012 в 16:02
поделиться

1 ответ

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

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

chartSeries example

Исходный ответ:

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

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

rgl

Пакет rgl использует OpenGL для создания интерактивных трехмерных графиков ( подробнее см. На веб-сайте 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-график поверхности, и вы хотите создать карту 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 surface plot

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)

В этом случае вам нужно будет наложить изображения.

85
ответ дан 24 November 2019 в 17:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: