Éditer :
Je viens de voir que vous avez indiqué qu'une de vos dimensions est une date. Dans ce cas, regardez le chartSeries3d de Jeff Ryan qui est conçu pour représenter des séries temporelles en 3 dimensions. Ici, il montre la courbe des rendements au fil du temps :
Réponse Originale :
Si je comprends bien, vous voulez qu'une carte de contours soit la projection sur le plan situé en dessous du graphique en surface 3D. Je ne pense pas qu'il y ait de moyen facile de le faire autrement qu'en créant les deux graphiques et en les combinant ensuite. Vous pouvez trouver la vue spatiale utile pour cela.
Il existe deux packages principaux pour le tracé en 3D sur R : rgl (ou vous pouvez utiliser le package associé misc3d) et scatterplot3d.
rgl
Le package rgl utilise OpenGL pour créer des graphiques interactifs en 3D (en savoir plus sur le site rgl). Voici un exemple utilisant la fonction surface3d
:
library(rgl)
data(volcano)
z <- 2 * volcano # Exagérer le relief
x <- 10 * (1:nrow(z)) # Espacement de 10 mètres (S au N)
y <- 10 * (1:ncol(z)) # Espacement de 10 mètres (E au O)
zlim <- range(z)
zlen <- zlim[2] - zlim[1] + 1
colorlut <- terrain.colors(zlen,alpha=0) # table de recherche des couleurs de hauteur
col <- colorlut[ z-zlim[1]+1 ] # attribuer des couleurs aux hauteurs pour chaque point
open3d()
rgl.surface(x, y, z, color=col, alpha=0.75, back="lines")
Le paramètre alpha rend cette surface partiellement transparente. Maintenant, vous avez un graphique interactif en 3D d'une surface et vous voulez créer une carte de contours en dessous. rgl vous permet d'ajouter d'autres graphiques à une image existante :
colorlut <- heat.colors(zlen,alpha=1) # utiliser des couleurs différentes pour la carte de contours
col <- colorlut[ z-zlim[1]+1 ]
rgl.surface(x, y, matrix(1, nrow(z), ncol(z)),color=col, back="fill")
Dans cette surface, j'ai fixé les hauteurs à 1 pour avoir un plan en dessous de l'autre surface. Cela donne l'apparence suivante, et peut être tournée avec une souris :
scatterplot3d
scatterplot3d ressemble un peu plus aux autres fonctions de tracé de R (lisez la vignette). Voici un exemple simple :
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)
Dans ce cas, vous devrez superposer les images. Le R-Wiki a un article intéressant sur la création d'une image de fond translucide.