Colorbar da colorRampPalette personalizzato

Ho definito un colorRampPalette:

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

Come posso tracciare un elemento “legenda” colorbar, preferibilmente usando solo i pacchetti base? Sto cercando un rettangolo riempito con quella sfumatura di colore.

Quello che sono veramente dopo è un modo per produrre lo stesso tipo di leggenda (barra dei colors) che viene tracciata con un raster “raster”:

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

Devo essere in grado di posizionarlo sopra un’altra trama.

Ho fatto una bella funzione flessibile tempo fa per fare questo.

 # 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) } } 

Quindi puoi fare qualcosa come:

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

inserisci la descrizione dell'immagine qui

Altri esempi su: http://www.colbyimaging.com/wiki/statistics/color-bars

Crea una matrice, usa l’immagine con alcuni parametri degli assi …

 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) 

legenda immagine

colorbar.plot () dal pacchetto fields è una soluzione standard. Molte persone cercheranno qui soluzioni che posizionano la legenda al di fuori dell’area del tracciato standard o della gamma x / y originale. Questa limitazione di colorbar.plot () è facilmente superabile da:

  1. tracciare la tua immagine (),
  2. espandendo la dimensione del dispositivo di trama con il par (pin = c (larghezza, lunghezza))
  3. chiamando colorbar.plot () usando i valori xey originali

Poiché l’area del dispositivo di stampa è ora espansa, la legenda apparirà al di fuori della trama dell’immagine originale (). Sperimentando con i valori x e y, la legenda viene trascinata dove vuoi. La legenda del gradiente può essere orizzontale o verticale utilizzando le opzioni degli argomenti standard.

So che questa è una domanda molto vecchia e le risposte sono tutte ottime. Volevo solo sottolineare che si poteva semplicemente lisciare la barra dei colors da levelplot .

Crea alcuni dati falsi e una sfumatura di colore

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

Crea la trama e specifica le interruzioni nella barra dei colors

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

Questa funzionalità di levelplot potrebbe essere stata aggiunta molto tempo dopo che tutti voi avete trovato soluzioni per soluzioni dolci.