簡體   English   中英

結合多個填充輪廓圖和R中不同級別的條件變量

[英]Combine multiple filled.contour plots with different levels of conditioning variables in R

我目前正在研究模擬流域流量對四個氣候變量的響應: T,RH,Rs和uz 我想為我對兩個變量T和Rs的流動構建一些“響應面”, 使用Rs和uz的范圍的不同組合,即,以RH和uz 條件的流動對T和Rs的響應。

但是,似乎格子中沒有可以用於構造具有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")))

因此,我手動將Rs和uz的范圍划分為間隔,並嘗試使用fill.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")))

這些似乎為我提供了如下很好的單個表面圖,但是頂部沒有指示條件變量級別的條形圖(就像您在使用晶格生成的標准表面圖的面板上看到的那樣,因此我努力將它們組合在一起)以及這些條顯示條件變量。

任何幫助將不勝感激! :)

我無法告訴您如何使用您未提供的數據來完成此操作,並且您也沒有提供適當的測試數據集來完成我們的工作,但是有一個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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM