2012-07-02 11 views
11

La modifica dei limiti superiori per scale_fill_gradient2 influenza anche la scala colori per i valori < 0 poiché la distribuzione del colore intorno a 0 sembra essere sempre simmetricamente, esiste un modo per ottenere una distribuzione asimmetrica dei valori dei colori?distribuzione dei colori asimmetrica in scale_gradient2?

Qui un esempio minimo di un grafico usando geom_tile():

data <- read.csv("http://protzkeule.de/data.csv") 
p <- ggplot(data=data, aes(x=variable, y=meas)) + geom_tile(aes(fill=value)) 

trama con limiti simmetrici:

p + scale_fill_gradient2(low="blue", mid="white", high="red", guide="colorbar", limits=c(-.1,.1)) 

ma quando si cambia il limite superiore, il color mapping basso modifica così (vedere il colorbar):

p + scale_fill_gradient2(low="blue", mid="white", high="red", guide="colorbar", limits=c(-.1,.3)) 
+0

ho potuto essere equivoco quello che stai cercando, ma prova a passare 'midpoint = -0.1' a' scale_fill_gradient2'. E 'questo quello che vuoi? – joran

+0

Intendevo '0.1', non' -0.1' ovviamente, ma sto pensando che non è quello che stavi cercando, basandomi sulla risposta di Brian. – joran

risposta

14

Quello che desideri è scale_fill_gradientn . Gli argomenti non sono molto chiare (mi hanno portato un'ora o giù di lì per capire finalmente parte di esso fuori), però:

library("scales") 
p + scale_fill_gradientn(colours = c("blue","white","red"), 
         values = rescale(c(-.1,0,.3)), 
         guide = "colorbar", limits=c(-.1,.3)) 

che dà:

enter image description here

+0

Grazie, penso che ora ce l'ho fatta. Correggetemi se ho torto ma con 'values' si assegnano i valori a cui un colore del vettore' colori 'è mappato? L'unica cosa che non capisco è che cosa succede se il vettore passato a 'values' ha più elementi del vettore passato a' colours'. – Dahaniel

+0

'valori' e' colori 'dovrebbero avere la stessa lunghezza. Sono abbinati in modo efficace, dove il valore corrisponde al colore in quel punto e tutto ciò che si trova tra esso e il punto successivo viene interpolato. In realtà non so cosa succederebbe se non fossero della stessa lunghezza; è almeno concettualmente un errore, ma non so se viene generato un errore reale. Nel tuo esempio, -0.1 è mappato al blu, 0.0 è mappato al bianco e 0.3 è mappato al rosso; i valori compresi tra -0,1 e 0,0 sono interpolati tra il blu e il bianco; i valori compresi tra 0.0 e 0.3 sono interpolati tra bianco e rosso. –

+0

@BrianDiggs Sto usando la tua soluzione in modo simile ma c'è un modo per visualizzare la barra dei colori in modo discreto per la prima manciata di valori? Per esempio. [la risposta della lunghezza sepale qui] (https://stackoverflow.com/questions/17713456/easiest-way-to-discretize-continuous-scales-for-ggplot2-color-scales) – guy

Problemi correlati