2013-11-21 17 views
5

Ho questo semplice codice (dati + barplot):ggplot2: barplot con colori in funzione del valore dell'asse y

dat <- c('Jan','Feb','Mar', 'Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec') 
val <- c(-2.5, 3, 2.5, -3.3, -1, 0.2, 6, 4.3, 5.5, 2, -1.9, -2.3) 
df <- data.frame(dat, val) 
bar <- ggplot(data = df, aes(x = factor(dat, levels = month.abb), y = val)) + 
    geom_bar(stat = 'identity') 
print(bar) 

Altrove ho creato un heatmap utilizzando il seguente palette:

# Palette 
LtoM <-colorRampPalette(c('red', 'yellow')) 
Mid <- "snow3" 
MtoH <-colorRampPalette(c('lightgreen', 'darkgreen')) 

che viene chiamato da:

scale_fill_gradient2(low = LtoM(100), mid = Mid, high = MtoH(100)) 

Ora vorrei utilizzare una tavolozza di colori simile per il mio barplot, cioè vorrei che la co Per ogni barra si intende una funzione dell'altezza (un grado da rosso per mimimo y a verde per massimo y).

Come posso farlo, per favore?

risposta

3

Sei praticamente lì con il tuo codice attuale. Basta aggiungere la funzione scale_fill_gradient.

bar <- ggplot(data = df, aes(x = factor(dat, levels = month.abb), y = val, 
       fill=val)) + 
     geom_bar(stat = 'identity') + 
     scale_fill_gradient2(low=LtoM(100), mid='snow3', 
     high=MtoH(100), space='Lab') 

custom colors

Tuttavia, permettendo scale_fill_gradient2 a prendersi cura del gradiente-ing funziona piuttosto bene

bar <- ggplot(data = df, aes(x = factor(dat, levels = month.abb), y = val, 
       fill=val)) + 
     geom_bar(stat = 'identity') + 
     scale_fill_gradient2(low='red', mid='snow3', high='darkgreen', space='Lab') 

generated colors

+0

grazie per la risposta lilster. in realtà sapevo come ottenere il tuo primo grafico, ma non è esattamente quello che sto cercando. voglio tutte le barre a dire val = -2 essere 'rosso' e 'verde' quando val = 5 (e una scala di colori in mezzo). è diverso da ogni barra colorata (uniformemente) a seconda del valore che rappresenta. Spero di essere un po 'più chiaro ora – tagoma

+0

Penso di aver bisogno di maggiori dettagli qui. 'voglio tutte le barre a dire val = -2 essere' rosso 'e' verde 'quando val = 5 (e una scala di colori in mezzo).' <- Entrambi i grafici che ho postato sembrano soddisfare questo. 'è diverso da ogni barra colorata (in modo uniforme) a seconda del valore che rappresenta.' <- È diverso, ma nelle mie risposte, nessuno dei due colori è colorato in modo uniforme. Il gradiente di riempimento della scala ha impostato il valore minimo per essere il "più rosso", il valore massimo per essere il "più verde" e quindi una scala di colori in mezzo. Puoi descrivere come questo è diverso da quello che stai cercando, magari con un file di immagine attache – lilster

+0

ciao lilster grazie per la tua pazienza :) mi piacerebbe disegnare una trama 'come' questo http: //www.quinn-curtis .com/QCChar96.jpg vedi, con qualsiasi valore y tutte le barre sono dello stesso colore e il colore è una funzione del valore y. – tagoma

Problemi correlati