2014-05-16 4 views
0

현재 기후 변수 4 개에 대한 시뮬레이션 된 집수 흐름의 응답을보고 있습니다 : T, RH, Rs 및 uz. 나는 루피의 범위의 서로 다른 조합 및 조건으로T 플로우의 응답 및 RS 우스, 변수의 두 T 및 RS 내 흐름에 대한 몇 가지 '응답 표면'을 구축하고 싶습니다 RH 및 uz.여러 채워진. 컨투어 플롯을 다양한 레벨의 컨디셔닝 변수로 결합하십시오.

그러나 격자에 2 개의 조건 변수를 사용하여 표면을 구성 할 수있는 기능이 없거나 잘못 입력 한 것처럼 보입니다. 예를 들어 나는 levelplot을 (시도) 그러나 그것은 나에게 빈 플롯했다 :

그래서
# Separate input variables and define range intervals for plotting 
deltaT <- as.matrix(x$X$X1) 
deltaRH <- as.matrix(x$X$X2) 
deltaRs <- as.matrix(x$X$X3) 
deltauz <- as.matrix(x$X$X4) 
responseQave <- as.matrix(t(yPenman)[,11])  

# Use 2 intervals for each conditioning variable with 10% overlap 
deltaRHint <- equal.count(deltaRH,number=2,overlap=.1) 
deltauzint <- equal.count(deltauz,number=2,overlap=.1) 

levelplot(responseQave ~ deltaT * deltaRs | deltaRHint * deltauzint, zlim = c(-20,20),cuts=10, col.regions = colorRampPalette(c("red", "white", "blue"))) 

내가 수동 루피의 범위를 나누어 간격으로 UZ 및 위해 표면을 구성 filled.contour를 사용하려고 시도를 Rs와 uz의 간격의 각 조합.

그리고 여기에 내가 개발 한 코드 - 길이 미안 난 아직도 내 코딩 기술을 개발하고 있어요 같이

# Extract the boundaries of intervals for each conditioning variable 
deltaRHI <- as.matrix(levels(deltaRHint)) 
deltaRHI <- c(deltaRHI[[1]][1],deltaRHI[[1]][2],deltaRHI[[2]][1],deltaRHI[[2]][2]) 
deltauzI <- as.matrix(levels(deltauzint)) 
deltauzI <- c(deltauzI[[1]][1],deltauzI[[1]][2],deltauzI[[2]][1],deltauzI[[2]][2]) 

# response to T and Rs 
# first combination of RH and uz - interpolate irregular data using akima 

grid111 <- interp(x = deltaT[deltaRH>deltaRHI[1] & deltaRH<deltaRHI[2] & deltauz>deltauzI[2]], 
       y = deltaRs[deltaRH>deltaRHI[1] & deltaRH<deltaRHI[2] & deltauz>deltauzI[2]], 
       z = responseQave[deltaRH>deltaRHI[1] & deltaRH<deltaRHI[2]& deltauz>deltauzI[2]], 
       duplicate="strip") 
filled.contour(x = grid111$x, 
      y = grid111$y, 
      z = grid111$z, 
      xlim = c(0,8), ylim = c(-10,10), zlim = c(-20,20), 
      levels = c(seq(-20,20,by = 1)), 
      color.palette = colorRampPalette(c("red", "white", "blue"))) 

# second combination of RH and uz 
grid222 <- interp(x = deltaT[deltaRH>deltaRHI[2] & deltauz>deltauzI[2]], 
       y = deltaRs[deltaRH>deltaRHI[2] & deltauz>deltauzI[2]], 
       z = responseQave[deltaRH>deltaRHI[2]& deltauz>deltauzI[2]], 
       duplicate="strip") 
filled.contour(x = grid222$x, 
       y = grid222$y, 
       z = grid222$z, 
       xlim = c(0,8), ylim = c(-10,10), zlim = c(-20,20), 
       levels = c(seq(-20,20,by = 1)), 
       color.palette = 
       colorRampPalette(c("red", "white", "blue"))) 

# third combination of RH and uz 
grid333 <- interp(x = deltaT[deltaRH>deltaRHI[1] & deltaRH<deltaRHI[2] & deltauz>deltauzI[1] & deltauz<deltauzI[2]], 
       y = deltaRs[deltaRH>deltaRHI[1] & deltaRH<deltaRHI[2] & deltauz>deltauzI[1] & deltauz<deltauzI[2]], 
       z = responseQave[deltaRH>deltaRHI[1] & deltaRH<deltaRHI[2]& deltauz>deltauzI[1] & deltauz<deltauzI[2]], 
       duplicate="strip") 
filled.contour(x = grid333$x, 
       y = grid333$y, 
       z = grid333$z, 
       xlim = c(0,8), ylim = c(-10,10), zlim = c(-20,20), 
       levels = c(seq(-20,20,by = 1)), 
       color.palette = 
       colorRampPalette(c("red", "white", "blue"))) 

# fourth combination of RH and uz 
grid444 <- interp(x = deltaT[deltaRH>deltaRHI[2] & deltauz>deltauzI[1] & deltauz<deltauzI[2]], 
       y = deltaRs[deltaRH>deltaRHI[2] & deltauz>deltauzI[1] & deltauz<deltauzI[2]], 
       z = responseQave[deltaRH>deltaRHI[2]& deltauz>deltauzI[1] & deltauz<deltauzI[2]], 
       duplicate="strip") 
filled.contour(x = grid444$x, 
       y = grid444$y, 
       z = grid444$z, 
       xlim = c(0,8), ylim = c(-10,10), zlim = c(-20,20), 
       levels = c(seq(-20,20,by = 1)), 
       color.palette = 
       colorRampPalette(c("red", "white", "blue"))) 

그리고이 나에게 아래와 같이하지만,에 바없이 좋은 개별 표면 플롯을 제공하는 것 당신이 격자 사용하여 생성 표준 표면 플롯의 패널에서 보는 것과 같은 정상은 (조절 변수의 수준을 나타냅니다 -. 그래서 조절 변수를 보여주는이 막대를 함께 결합하는 투쟁과 함께하고

어떤 도움 대단히 감사하겠습니다! :)

답변

0

제공되지 않은 데이터로 수행하는 방법을 알 수 없으며 적절한 테스트 데이터 세트를 제공하지 않았지만 두 입력 요소에서 하나의 요소를 구성하는 interaction 함수가 있습니다.

dat <- data.frame(responseQave =rnorm(32), deltaT=rnorm(32), deltaRs=rlnorm(32), deltaRHint=a,deltazint=b) 
print(levelplot(responseQave ~ deltaT * deltaRs | interaction(deltaRHint, deltazint), data=dat)) 
+0

안녕하세요. BondedDust, (내 데이터 세트가 너무 커서 사용했던 임의의 숫자가 문제가되지 않습니다.) 시연 해 주셔서 감사합니다. 그러나 나는 상호 작용이 내 컴퓨터에서 엄청난 양의 메모리를 차지하고 있음을 발견했다. 내 데이터 세트가 크기 때문에 ... – user3643120