2014-05-23 6 views
7

Oft invertiert divergierend verwende ich eine divergierende Farbpalette auf einen Parameter abgebildet, die einen interessanten Wendepunkt irgendwo in der Mitte hat.Farbpalette

Leider verfügbar divergierenden Paletten - z.B. die von C. Brewer - alle scheinen gesättigte Farben an den beiden Extremen anstatt in der Mitte, oft als weiß oder hellgrau definiert. Hier ist ein Beispiel zur Veranschaulichung

enter image description here

Der kontinuierliche Parameter durch die Text-Etikett angegeben durchläuft einen optimalen Wert, wo die Spitze der zugehörigen Kurve ein Maximum erreicht.

Auf einem hellen weißen oder grauen Hintergrund (typisch für ggplot2), der interessanteste Teil meiner Daten wird fast unsichtbar; Ich möchte, dass es mehr "knallt", während die Werte für beide Seiten allmählich von der Mitte verschwinden, mit einem anderen Farbton. Gibt es Quellen für gut divergierende Farbpaletten, die in der Mitte stärker gesättigt sind und auf beiden Seiten verblassen?

Hier ist ein Beispielcode für Illustration, als neutraler Mittelpunkt schwarz Kommissionierung (ich würde etwas weniger dramatisch bevorzugen, aber es ist schwer, es zu haben, mit beiden Seiten gut mischen).

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: zu klären, ich bin vertraut mit colorRampPalette und scale_colour_gradientn, ich suche Beratung in

1- gute Farben für diesen Zweck der Wahl;

2- Definieren einer Farbskala Abbilden der handgefertigten Palette auf eine Variable, ähnlich dem, was mit dem scale_colour_gradient2 tut mid Parameter

+2

nicht colorRampPalette geben Sie das? zum Beispiel "par (bg = 'grey97', xpd = NA); Plot (1: 1000, pch = 19, cex = 5, col = colorRampPalette (c ('hellgrün', 'schwarz', 'mediumpurple1')) (1000)) 'Und wenn du mehr hellere Schattierungen willst, wiederhole einfach die Farben:' plot (1: 1000, pch = 19, cex = 5, col = colorRampPalette (c ('hellgrün', 'hellgrün', 'schwarz', 'mediumpurple1', 'mediumpurple1')) (1000)) ' – rawr

+0

@raw Ich habe die Frage mit einem Zusatz bearbeitet, um das Problem zu klären – baptiste

Antwort

10

Sie (die zentrale Farbe an der genauen Mitte des Parameterbereich kann nicht sein) könnte es genießen, mit choose_palette() zu spielen, eine relativ neue Ergänzung zu dem ausgezeichneten Farbraum Paket.

Die Funktionen in diesem Paket geben Ihnen die vollständige und weitgehend orthogonal Kontrolle über den Farbton, Chroma und Luminanz Eigenschaften Ihres Farbraum. choose_palette() gibt Ihnen eine bequeme Möglichkeit, den riesigen Raum von Möglichkeiten zu erkunden, der sich öffnet.

Hier ist der Code, der die Palette Chooser starten werden, durch einen Screenshot des GUI-Tool gefolgt. (Beachten Sie, dass Sie, um die Mitte des Bereichs dunkler als die Enden zu machen, die Standardluminanzwerte der abweichenden Palette, die hier als "L1" und "L2" bezeichnet werden, vertauschen möchten.

)
library(colorspace) 
library(grid) 

custom <- choose_palette() 

enter image description here

Und hier ist ein Beispiel dafür, was es hat mich zwei innerhalb von etwa einer Minute zu spielen, um mit ihm

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

Sowohl das Paket und das Denken dahinter sind in der Packungsvignette (vignette("hcl-colors")) und in einem Begleitartikelschön dokumentiert 10 veröffentlicht in der Zeitschrift Computational Statistics and Data Analysis.

+1

Danke, das ist ein schönes Werkzeug. (Ich wünschte, Rstudio würde nicht jedes Mal sterben, wenn etwas nötig ist). – baptiste

+0

@baptiste - Das * ist * eine unglückliche Gewohnheit für RStudio zu haben! Beim nochmaligen Lesen Ihrer Frage sehe ich jetzt, dass meine Antwort nicht wirklich den interessantesten Teil anspricht. Hoffen wir, dass uns jemand anders auf professionelle Farbpaletten mit dunkleren Mitten aufmerksam macht, wie es uns der Farbpalettensatz RColorBrewer gibt. –

+0

Die "Isoluminant Color Maps" in Abbildung 6 in [diesem Artikel (Warnung: pdf)] (http://www.sandia.gov/~kmorel/documents/ColorMaps/ColorMapsExpanded.pdf) sehen vielversprechend aus, und die Diskussion folgt unmittelbar die Figur ist auch interessant. –

2

Ein Weg, den ich in der Vergangenheit gemacht habe, um die divergierenden Rampen umzukehren (was genau dem entspricht, was Sie getan haben, aber nicht genau), aber dann den Alphakanal verwenden, um die Enden der Rampen zu deaktivieren.

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

Der einzige Artikel, den ich davon bewusst bin, bespricht blätterte Farbe Rampen wie diese Der Kreisdataimage ist ein Diagramm für die hochauflösende kreis räumlichen Daten(Morphet & Symanzik, 2010) (keine Online-Version, sorry). Im Grunde ändern sie den Wert und die Sättigung, um die Enden der Rampen zusammenzuführen - obwohl sie in den Details ein wenig knapp waren. Hier ist ein Bild von einem ihrer Graphen.

Sie hatten diese Rampen in der jetzt veraltet Paket CircSpatial, so Sie in der Lage sein kann keulen, wie sie die Rampen von dort aus.