2016-03-16 2 views
2

J'utilise persp() pour créer un tracé 3D (mais je suis ouvert à tout ce qui fera l'affaire). Maintenant, je veux ajouter un champ 2d pour préciser où le tracé 3D est au-dessus d'une valeur Z spécifique. Y a-t-il un moyen d'y parvenir? Idéalement, ce serait idéalement quelque chose comme une surface semi-transparente où vous pouvez voir la masse sous la surface par rapport à la surface.Insérer un champ "tronqué" dans le graphique de la surface R

En utilisant l'exemple de la documentation persp

f <- function(x, y) { r <- sqrt(x^2+y^2); 10 * sin(r)/r } 

x <- seq(-10, 10, length= 30) 
y <- x 
z <- outer(x, y, f) 
z[is.na(z)] <- 1 

persp(x, y, z, theta = 30, phi = 30, expand = 0.5, col = "lightblue", 
     ltheta = 120, shade = 0.75, ticktype = "detailed", 
     xlab = "X", ylab = "Y", zlab = "Sinc(r)" 
) 

Comment puis-je insérer un champ qui tranche le graphique à un certain point de l'axe z?

Répondre

2

Que diriez-vous - il y a beaucoup plus de possibilités utilisant le paquet rgl, mais il a une fonction persp3d pour la mise à jour facile de la base graphics.

library(rgl) 

f <- function(x, y) { r <- sqrt(x^2+y^2); 10 * sin(r)/r } 
x <- seq(-10, 10, length= 30) 
y <- x 
z <- outer(x, y, f) 
z[is.na(z)] <- 1 

persp3d(x, y, z, theta = 30, phi = 30, expand = 0.5, col = "lightblue", 
     ltheta = 120, shade = 0.75, ticktype = "detailed", 
     xlab = "X", ylab = "Y", zlab = "Sinc(r)") 

# Here we add a transparent purple square to mark the top 

# x and y mark the corners of the purple square, z is its height 
sqdf <- data.frame(x=c(-10,-10,10,10,-10), 
        y=c(-10, 10,10,-10,-10), 
        z=c(5,5,5,5,5)) 

# now draw the purple square, 
# note: 
# - the "add=T" parameter that appends it to the previous 3d-plot 
# - the coord paramter tells it what two planes to use when 
#  tesselating the polygon into triangles 
#  (a necessary step and expensive to calculate) 

polygon3d(sqdf$x,sqdf$y,sqdf$z,coord=c(1,2),alpha=0.5,color="purple",add=T) 

Cédant:

enter image description here

+0

Il a été cassé, le fixe ... –

+0

Tous les commentaires à ce sujet? –

+0

Désolé voyagé ces derniers jours - c'est parfait, merci beaucoup. –