2015-12-07 30 views
0

我是R中的業餘人員,想要在R中繪製兩個3-d圖形並對它們進行比較。例如,這是我的R-代碼:在r中繪製兩個3-d圖形

theta <- 0.3 

f <- function(u,v,theta=0.5){return(1/(1-theta*u*v-theta*(1-theta*u*v)^(-2)*(1-2*u-2*v+3*u*v+(1-theta*u*v)^(-3)*2*theta^2*u*v*(1-u)*(1-v))))} 
x<- seq(0,1,length=20) 
y<-x 
z<-outer(x,y,Vectorize(f)) 
z[is.na(z)]<-1 
op<-par(bg = "white") 
persp(x,y,z,theta=40, phi=30, expand = 0.5,ltheta=120,shade =0.1, col="tomato",zlim=c(0,2),main="", zlab="",xlab="X", ylab="Y") 
z2<-matrix(rep(1,c(20*20)),ncol=20) 
par(new=TRUE) 
persp(x,y, z2, theta = 40, phi = 30, expand = 0.5, col = NA, border="lightgreen", zlab="",zlim=c(0,2)) 

的問題是,我無法從圖中清楚地看到在該​​部分,f的點大於1,反之亦然。我想讓這個更加明顯。任何建議將不勝感激。

回答

1

如何情節z和1,然後之間的差由不同的顏色爲大或小於1

非常簡單的代碼(僅示出功能)如下面區分:

z3 <- z -z2 
zcol <- sapply(z3, FUN=function(x) if(x>0) "red" else "blue") 
# Trick in here, see help(presp): 
# col the color(s) of the surface facets... 
# This is recycled to the (nx-1)(ny-1) facets 
zcol <- matrix(zcol, ncol=20)[1:19, 1:19] 
persp(x,y, z3, theta = 40, phi = 30, expand = 0.5, col = zcol , border= NA, zlab="", zlim=c(-1,1)) 

繪圖如下所示,您可以通過以下方式繼續改進:

  1. 使用暗色/淺色顯示距離;
  2. 嘗試二維繪圖,這將更清楚地顯示差異。

color

+0

感謝帕特里克。我也這樣做了,並得到了同樣的圖表,但這裏着色的方式肯定是不正確的,我無法驗證。我的功能是對稱的,但是像這樣定義的顏色並沒有顯示這個事實? –

+0

@ThuongNguyen,修復了代碼。其實,原因是這個「col」應該被回收並且看到詳細的幫助。 – Patric

+0

太好了。非常感謝Patric。我現在有了我想要的圖表。 –