2012-02-16 10 views
14

he definido un colorRampPalette:de Colorbar de la costumbre colorRampPalette

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

¿Cómo se puede trazar un elemento de barra de colores que "leyenda" para ello, preferentemente utilizando únicamente los paquetes base? Estoy buscando un rectángulo lleno con ese degradado de color.

De lo que estoy realmente después es una manera de producir el mismo tipo de leyenda (barras de color) que se traza con una trama "trama":

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

Tengo que ser capaz de colocar esta en la parte superior de otra trama

+0

Es curioso lo difícil que es hacer esto en la base R. Usualmente R tiene mucha magia pero aparentemente no es para barras de color. Supongo que los estadísticos solo piensan en blanco y negro. jaja – wordsforthewise

Respuesta

19

Hice una función flexible agradable hace un rato para hacer esto.

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

A continuación, puede hacer algo como:

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

enter image description here

Más ejemplos en: http://www.colbyimaging.com/wiki/statistics/color-bars

+0

Tu eje es más bonito que el mío. +1. – Spacedman

+3

Si saca el dev.new, puede usar una subtrama del paquete: Hmisc para superponer esto en los trazados existentes. – Spacedman

9

Hacer una matriz, utilizar una imagen con algunos parámetros ejes ...

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() desde el paquete de campos es una solución estándar. Mucha gente buscará soluciones que coloquen a la leyenda fuera del área de trazado estándar o del rango x/y original. Esta limitación de colorbar.plot() es fácilmente superada por:

  1. trazado de la imagen(),
  2. la ampliación del tamaño de la trama con par (= pin c (anchura, longitud))
  3. invocando colorbar.plot() utilizando los valores x e y originales

Como el área del dispositivo de trazado ahora está expandida, la leyenda aparecerá fuera del trazado original de la imagen(). Experimentar con los valores x e y aterriza la leyenda en cualquier lugar que desee. La leyenda de degradado puede ser horizontal o vertical usando opciones de argumento estándar.

+0

Sí, pero también necesita el argumento 'strip' y hasta ahora no es tan simple como debería ser averiguarlo. Un ejemplo de código de trabajo suele ser parte de una buena respuesta. – wordsforthewise

0

Sé que esta es una pregunta muy antigua, y las respuestas son geniales. Solo quería señalar que podría suavizar la barra de color desde levelplot.

hacer un poco de datos falsos y un degradado de color

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

Hacer la trama y especificar las pausas en la barra de color

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

Esta funcionalidad a levelplot puede haber sido añadida mucho después llegaron todos ustedes amigos con soluciones dulces de solución.

Cuestiones relacionadas