Il existe plusieurs façons de représenter des surfaces en 3D. Je vous en propose une qui utilise la fonction de base persp().



#on construit les fonctions à représenter f1 et f2

f1<-function(x,y){
    15*sin(sqrt(x^2+y^2))
}


################

mu1<-0
mu2<-0
s11<-15
s12<-20
s22<-10
rho<-0.5

f2<-function(x,y){

term1<-1/(2*pi*sqrt(s11*s22*(1-rho^2)))
term2<--1/(2*(1-rho^2))
term3<-(x-mu1)^2/s11
term4<-(y-mu2)^2/s22
term5<--2*rho*((x-mu1)*(y-mu2))/(sqrt(s11)*sqrt(s22))
term1*exp(term2*(term3+term4-term5))}

# on définit deux vecteurs correspondant aux axes x et y

x<-seq(-15,15,length=50)
y<-x

# on calcule la valeur de z=f(x,y) pour tous les couples x[i],y[i] avec la fonction outer

z1<-outer(x,y,f1)
z2<-outer(x,y,f2)

#on utilise la fonction persp

x11()
persp(x,y,z1,theta=30,phi=40,expand=0.5,col="lightblue",ticktype="detailed")
x11()
persp(x,y,z2,theta=40,phi=30,expand=0.5,col="lightgreen",ticktype="detailed")


Il est possible d’ajouter des points au graphique en utilisant points(trans3d()).
Regardez bien tous les arguments de la fonction persp() : ?persp. Ils sont nombreux et vous permettront d’obtenir votre surface sous l’angle que vous voulez.

Enfin il existe comme souvent d’autres fonctions pour représenter des surfaces : plot3d du package rgl, plot.surface du package fields…à vous de choisir!

bonne 3D!