2012-02-16 11 views
14

Ho definito un colorRampPalette:Colorbar dalla consuetudine colorRampPalette

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

Come posso tracciare un elemento colorbar "leggenda" per esso, preferibilmente utilizzando solo i pacchetti di 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 colori) che viene tracciata con un raster "raster":

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

ho bisogno di essere in grado di collocare questo in cima di un'altra trama.

+0

È strano quanto sia difficile da fare nella base R. Solitamente R ha così tanta magia ma apparentemente non per barre dei colori. Immagino che gli statistici pensino solo in bianco e nero? haha – wordsforthewise

risposta

19

ho fatto un bel flessibile funzione poco fa a 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) 
    } 
} 

Poi si può fare qualcosa di simile:

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

enter image description here

altri esempi in: http://www.colbyimaging.com/wiki/statistics/color-bars

+0

Il tuo asse è più bello del mio. +1. – Spacedman

+3

Se estrai il file dev.new puoi usare il sottotramma dal pacchetto: Hmisc per sovrascriverlo su grafici esistenti. – Spacedman

9

Fai una matrice, utilizzare un'immagine con alcuni parametri 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) 

image legend

4

colorbar.plot() dal pacchetto di campi è 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. tracciato l'immagine(),
  2. espandere le dimensioni del dispositivo di stampa con par (pin = c (larghezza, lunghezza))
  3. chiamata colorbar.plot() utilizzando i valori xey originali

Poiché l'area del dispositivo di stampa è ora espansa, la legenda apparirà al di fuori del grafico di 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.

+0

Sì, ma è necessario anche l'argomento "strip" e finora non è così semplice come dovrebbe essere da capire. Un esempio di codice funzionante di solito fa parte di una buona risposta. – wordsforthewise

0

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

fare un po 'di 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])) 

Fai un grafico e specificare le pause nella barra dei colori

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

Questa funzionalità di levelplot potrebbe essere stato aggiunto molto tempo dopo che tutti voi ragazzi è venuto con soluzioni di soluzioni dolci.

Problemi correlati