Kreślenie wykresu powierzchni 3D za pomocą nakładki mapy konturowej, przy użyciu R

Mam zestaw danych 3 krotek (punkty X,Y,Z), które chcę wykreślić za pomocą R.

Chcę utworzyć wykres powierzchni z danych i nałożyć mapę konturową na wykres powierzchni, aby stworzyć wrażenie, że mapa konturowa jest "cieniem" lub projekcją z wykresu powierzchni. Mapa konturowa ma pojawić się pod wykresem powierzchni.

Mój zestaw danych wygląda mniej więcej tak:

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

Jak mogę to osiągnąć?

Author: Peter Mortensen, 2009-12-13

1 answers

Edit:

Właśnie zauważyłam, że jednym z Twoich wymiarów jest data. W takim przypadku, spójrz na karty Jeffa Ryana3d, które są przeznaczone do Wykresów 3-wymiarowych szeregów czasowych. Tutaj pokazuje krzywą wydajności w czasie:

Przykład kart http://www.quantmod.com/examples/chartSeries3d/chartSeries3d-thumb.png

Oryginalna ODPOWIEDŹ:

Jak rozumiem, chcesz, aby Mapa countour była projekcją na płaszczyzna pod wykresem powierzchni 3D. Nie wierzę, że jest łatwy sposób, aby to zrobić inaczej niż tworzenie dwóch wątków, a następnie łączenie ich. Możesz uznać widok przestrzenny za pomocny dla tego .

Istnieją dwa podstawowe pakiety R do kreślenia 3D: rgl (lub możesz użyć powiązanego pakietu misc3d) i scatterplot3d.

Rgl

Pakiet rgl wykorzystuje OpenGL do tworzenia interaktywnych wykresów 3D (Czytaj więcej na stronie rgl ). Oto przykład użycia funkcji 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")

Parametr Alfa sprawia, że powierzchnia jest częściowo przezroczysta. Teraz masz interaktywny wykres 3D powierzchni i chcesz utworzyć mapę countour pod spodem. rgl pozwala dodać więcej Wykresów do istniejącego obrazu:

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")

Na tej powierzchni ustawiam heights=1 tak, że mamy płaszczyznę pod drugą powierzchnią. To wygląda tak i może być obracany za pomocą mysz:

Wykres powierzchni 3D http://i45.tinypic.com/12637gy.jpg

Scatterplot3d

Scatterplot3d jest trochę bardziej podobny do innych funkcji kreślarskich w R (przeczytaj winietę ). Oto prosty przykład:

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)

W tym przypadku, trzeba będzie nakładać obrazy. R-Wiki ma ładny post na temat tworzenia tansucent background image.

 84
Author: Shane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-03 12:38:21