2014-05-23 7 views
7

Molto spesso utilizzo una tavolozza di colori divergenti mappata su un parametro che ha un punto di svolta interessante da qualche parte vicino al centro.palette di colori divergenti invertita

Sfortunatamente, le tavolozze divergenti disponibili - ad es. quelli di C. Brewer - tutti sembrano avere colori saturi ai due estremi piuttosto che al centro, spesso definiti come bianco o grigio chiaro. Ecco un esempio illustrativo

enter image description here

Il parametro continuo indicato dalle etichette di testo passa attraverso un valore ottimale dove il picco della curva associato raggiunge un massimo.

Su uno sfondo bianco o grigio chiaro (tipico di ggplot2), la parte più interessante dei miei dati diventa quasi invisibile; Mi piacerebbe che "pop" di più, mentre i valori per entrambi i lati svaniscono gradualmente dal centro, con una tinta diversa. Ci sono fonti di buone tavolozze di colori divergenti che hanno una saturazione più forte nel mezzo e si sbiadiscono su entrambi i lati?

Ecco un codice di esempio per l'illustrazione, scegliendo il nero come un punto medio neutro (preferirei qualcosa di meno drammatico, ma è difficile farlo fondere bene con entrambi i lati).

require(RColorBrewer) 
grid.newpage() 
grid.raster(brewer.pal(7,"PRGn"), 0.25, 0.5, 0.4, 1) 

custom <- c(brewer.pal(3,"BuPu"), "black", rev(brewer.pal(3,"BuGn"))) 
grid.raster(custom, 0.75, 0.5, 0.4, 1) 

enter image description here

Edit: Per chiarire, ho familiarità con colorRampPalette e scale_colour_gradientn, cerco consiglio nel

1- scegliere buoni colori per questo scopo;

2- definire una scala di colori mappatura della tavolozza artigianale a una variabile, simile a quello che scale_colour_gradient2 fa con il parametro mid (il colore centrale può non essere al centro esatto del campo di parametri)

+2

non colora RampPalette darti questo? per esempio 'par (bg = 'grey97', xpd = NA); trama (1: 1000, pch = 19, cex = 5, col = colorRampPalette (c ('lightgreen', 'black', 'mediumpurple1')) (1000)) 'E se vuoi sfumature più chiare, basta ripetere i colori:' trama (1: 1000, pch = 19, cex = 5, col = colorRampPalette (c ('lightgreen', 'lightgreen', 'black', 'mediumpurple1', 'mediumpurple1')) (1000)) ' – rawr

+0

@rawr Ho modificato la domanda con un addendum per chiarire il problema – baptiste

risposta

10

È potrebbe piacerti giocare con choose_palette(), un'aggiunta relativamente recente all'eccellente pacchetto colorspace.

Le funzioni in tale pacchetto offrono un controllo completo e in gran parte ortogonale sulle caratteristiche di tonalità, crominanza e luminanza del proprio spazio colore. choose_palette() ti offre un modo conveniente per esplorare l'enorme spazio di possibilità che si apre.

Ecco il codice che avvierà il selettore di palette, seguito da uno screenshot dello strumento GUI. (Si noti che, per rendere il centro dell'intervallo più scuro delle estremità, si vorrà scambiare i valori di luminanza di default della tavolozza divergente, qui indicati come "L1" e "L2".)

library(colorspace) 
library(grid) 

custom <- choose_palette() 

enter image description here

Ed ecco un esempio di ciò che mi ha due ottenuto nel giro di circa un minuto di gioco intorno con esso

custom <- diverge_hcl(20, h=c(-225,277), c=80, l=c(80,25)) 
grid.newpage() 
grid.raster(custom, 0.25, 0.5, 0.4, 1) 

enter image description here

Sia il pacchetto e il pensiero dietro di esso sono ben documentati nel pacchetto vignetta (vignette("hcl-colors")) e in un articolo complementare "Escaping RGBland: Selecting colors for statistical graphics" (Warning: pdf) pubblicato nella rivista Computational Statistics and Data Analysis.

+1

grazie, questo è uno strumento di bell'aspetto. (Vorrei che Rstudio non morisse ogni volta che qualcosa richiede tck). – baptiste

+0

@baptiste - Quella * è * un'abitudine sfortunata per RStudio di avere! Nel rileggere la tua domanda, vedo ora che la mia risposta non riguarda davvero la parte più interessante. Speriamo che qualcun altro possa indicarci palette di divergenza di qualità professionale con intervalli medi più scuri, come già ci offre il set di tavolozza "RColorBrewer". –

+0

Le "mappe a colori isoluminanti" nella Figura 6 in [questo articolo (Avviso: pdf)] (http://www.sandia.gov/~kmorel/documents/ColorMaps/ColorMapsExpanded.pdf) sembrano promettenti e la discussione immediatamente successiva anche la figura è interessante. –

2

Un modo in cui l'ho fatto in passato per invertire le rampe divergenti (che è vicino a quello che hai fatto, ma non esattamente) ma poi usare il canale alfa per ridimensionare le estremità delle rampe.

library(ggplot2) 
pal <- brewer.pal(7,"PRGn") 
custom <- c(rev(pal[1:3]),rev(pal[5:7])) 
alpha <- c(seq(3),rev(seq(3)))/3 
x <- 1:6 
y <- rep(1) 
MyDF <- data.frame(custom,alpha,x,y) 
MyPlot <- ggplot(data = MyDF, aes(x = x, y = y, fill=custom, alpha=alpha)) + geom_bar(stat = "identity", color="white") + 
      scale_fill_identity() + scale_alpha_continuous(range = c(0.6, 1)) 
MyPlot 

enter image description here

L'unico articolo sono consapevole che discute capovolto rampe di colori come questo è Il DataImage circolare, un grafico per alta risoluzione dati circolari-spaziali(Morphet & Symanzik, 2010) (nessuna versione on-line, mi dispiace). Fondamentalmente alterano il valore e la saturazione per far coincidere le estremità delle rampe - sebbene fossero un po 'avari nei dettagli. Ecco un'immagine di uno dei loro grafici.

Avevano queste rampe nel pacchetto ormai deprecato CircSpatial, in modo da essere in grado di abbattere come hanno fatto le rampe da lì.

Problemi correlati