2015-12-15 138 views
2

有沒有辦法在image.plot()函數中繪製zlim截斷點之上的值?這裏有一個例子:在image.plot中自定義顏色範圍R

library('gplots') 
library('fields') 
library('RColorBrewer') 

rf <- colorRampPalette(rev(brewer.pal(11,'Spectral'))) # make colors 
r <- rf(64) 

z <- matrix(data = 0, nrow = 3, ncol = 3) 
z[1,1] <- .15 
z[2, ] <- .10 
z[3, ] <- .05 

image.plot(z, 
      col = r, 
      zlim = c(0, .10)) 

此代碼產生這一形象:

enter image description here

我想,如果左下角(.15)是紅色(如0.10)。但我找不到用image.plot()函數來做到這一點的方法。

我應該提到的是需要這個傳說。而且,真實的數據要大得多。有任何想法嗎?

回答

3

作爲一種快速入門手段,只需在色彩漸變中多加幾次即可重複最終色彩,從而使該區域的色彩漸變變得「平坦」。其結果是,最高z值都將具有相同的顏色:

library('gplots') 
library('fields') 
library('RColorBrewer') 

# Original 11 colors 
cols = rev(brewer.pal(11,'Spectral')) 

# Repeat the 11th color an extra 5 times 
cols = c(cols,rep(cols[11],5)) 

rf <- colorRampPalette(cols) # make colors 
r <- rf(64) 

z <- matrix(data = 0, nrow = 3, ncol = 3) 
z[1,1] <- .15 
z[2, ] <- .10 
z[3, ] <- .05 

image.plot(z, col = r, zlim = c(0, .15)) 

enter image description here

UPDATE:根據您的意見,得到的傳說,你想要的方式最簡單的方法,可能是在繪圖之前(z[z>0.1]=0.1)將所有大於0.1的值更改爲0.1(或任何z-cutoff值)。然後你可以使用你的原始代碼。但是,如果出於某種原因您不想這樣做,那麼這裏有一個解決方案(無論如何,這是一個破解)來獲取高於截斷點的z值,同時僅顯示低於截斷值的值。首先,運行上面的代碼。然後,下面的代碼用填充的白色矩形「覆蓋」圖例,並添加一個具有所需值範圍的新圖例。

注意,在下面的解決方案,在0-0.15顏色漸變顏色到值的映射一般不會正是匹配的0-0.1顏色漸變,但你可以讓他們很接近通過調整您在第一個顏色漸變中重複最終顏色的次數。爲了獲得完全匹配,我想你可以使用colorRamp函數將特定顏色映射到特定的z值。

# Cover legend 
rect(1.3,-1,1.6,2, col="white", border="white", xpd=TRUE) 

# Go back to original 11 colors for color ramp 
cols = rev(brewer.pal(11,'Spectral')) 
rf <- colorRampPalette(cols) # make colors 
r <- rf(64) 

# Plot only the legend with z cutoff at 0.10 
image.plot(z, col = r, zlim = c(0, .10), legend.only=TRUE) 

enter image description here

+0

呀,但隨後拋出關閉圖例。如果您可以找到縮小圖例以僅顯示值0到.10的方法,那麼您有一個工作解決方案。 – Nick