2012-02-16 83 views
14

我已經定義了一個colorRampPalette:彩條從定製colorRampPalette

my.colors = colorRampPalette(c("light green", "yellow", "orange", "red")) 

我如何可以繪製它一個彩條「傳奇」的項目,最好只使用基礎包?我在填充了顏色漸變的矩形之後。

我所真正追求的是繪有「光柵」光柵產生相同類型的傳說(彩條)的方式:

require(raster) 
plot(raster("myfile.tif"), legend=T) 

我需要能夠把這個頂部另一個情節。

+0

這很有趣,這是在base R中做的難度。通常R有這麼多魔法,但顯然不適用於彩條。我猜統計學家只會認爲黑色和白色?哈哈 – wordsforthewise 2018-01-18 23:15:21

回答

19

我打了一個漂亮靈活的功能前一段時間做這個。

# Function to plot color bar 
color.bar <- function(lut, min, max=-min, nticks=11, ticks=seq(min, max, len=nticks), title='') { 
    scale = (length(lut)-1)/(max-min) 

    dev.new(width=1.75, height=5) 
    plot(c(0,10), c(min,max), type='n', bty='n', xaxt='n', xlab='', yaxt='n', ylab='', main=title) 
    axis(2, ticks, las=1) 
    for (i in 1:(length(lut)-1)) { 
    y = (i-1)/scale + min 
    rect(0,y,10,y+1/scale, col=lut[i], border=NA) 
    } 
} 

然後,你可以這樣做:在

> color.bar(colorRampPalette(c("light green", "yellow", "orange", "red"))(100), -1) 

enter image description here

更多的例子:從田野包http://www.colbyimaging.com/wiki/statistics/color-bars

+0

你的軸比我的更好。 +1。 – Spacedman 2012-02-16 16:33:55

+3

如果您取出dev.new,則可以使用包中的子圖:Hmisc將其覆蓋到現有的圖上。 – Spacedman 2012-02-16 18:05:09

9

做一個矩陣,使用像某些軸參數...

my.colors = colorRampPalette(c("light green", "yellow", "orange", "red")) 
z=matrix(1:100,nrow=1) 
x=1 
y=seq(3,2345,len=100) # supposing 3 and 2345 are the range of your data 
image(x,y,z,col=my.colors(100),axes=FALSE,xlab="",ylab="") 
axis(2) 

image legend

4

colorbar.plot()是一個標準的解決方案。許多人會在這裏尋找將圖例置於標準繪圖區域或原始x/y範圍之外的解決方案。

  1. 繪製圖像(),
  2. 擴大積裝置的尺寸與標準桿(銷= C(寬度,長度))
  3. :colorbar.plot的這一限制()很容易被克服使用原始x和y值調用colorbar.plot()

因爲繪圖設備的區域現在被展開,圖例將出現在原始圖像()圖的外部。使用x和y值進行試驗可以將您的圖例置於任何地方。使用標準參數選項,漸變圖例可以是水平或垂直的。

+0

是的,但你也需要'strip'參數,到目前爲止它並不像應該弄清楚的那樣簡單。一個工作代碼的例子通常是一個很好的答案的一部分。 – wordsforthewise 2018-01-18 23:12:16

0

我知道這是一個非常古老的問題,答案都很好。我只想指出,你可以從levelplot平滑彩條。

使一些假數據和顏色漸變

mat = matrix(rnorm(400,1,1), ncol=20) 
grad = rev(rainbow(1000, start=rgb2hsv(col2rgb('green'))[1], 
     end=rgb2hsv(col2rgb('blue'))[1])) 

使劇情和彩條

levelplot(mat, col.regions=grad, colorkey = list(at=seq(0,max(mat),length.out=400))) 

此功能levelplot可能已添加很久以後你的鄉親來到指定符采用甜蜜的解決方案。