2014-05-23 17 views
7

Dość często używam rozbieżnej palety kolorów odwzorowanej na parametr, który ma interesujący punkt zwrotny gdzieś w pobliżu środka.odwrócona rozbieżna paleta kolorów

Niestety, dostępne rozbieżne palety - np. te z C. Brewera - wszystkie wydają się mieć nasycone kolory na dwóch skrajnościach, a nie na środku, często definiowane jako białe lub jasnoszare. Oto przykład dla zilustrowania

enter image description here

Ciągły parametr oznaczonej tekstowych przechodzi optymalnej wartości, przy której szczyt krzywej związanej osiąga maksimum.

Na jasnym białym lub szarym tle (typowym dla ggplot2) najciekawsza część moich danych staje się prawie niewidoczna; Chciałbym, żeby "pop" więcej, podczas gdy wartości po obu stronach stopniowo oddalają się od centrum, z innym odcieniem. Czy są jakieś źródła dobrych rozbieżnych palet kolorów, które mają silniejsze nasycenie w środku i blakną po obu stronach?

Oto przykładowy kod do ilustracji, wybierając czarny jako neutralny środkowy punkt (wolałbym coś mniej dramatycznego, ale trudno jest go dobrze wtopić w obie strony).

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: do wyjaśnienia, jestem zaznajomiony z colorRampPalette i scale_colour_gradientn, szukam porady w

1- wybierając dobre kolory dla tego celu;

2- wyznaczającą skalę kolorów palety mapowania ręcznie spreparowane do zmiennej, podobnego do tego, co robi scale_colour_gradient2 z parametrem mid (centralna kolor może nie być dokładnie w środku zakresu parametrów)

+2

czy colorRampPalette Ci to daje? na przykład 'par (bg = 'grey97', xpd = NA), spisek (1: 1000, pch = 19, cex = 5, col = colorRampPalette (c ('lightgreen', 'black', 'mediumpurple1')) (1000)) 'A jeśli chcesz więcej jaśniejszych odcieni, po prostu powtórz kolory:' plot (1: 1000, pch = 19, cex = 5, col = colorRampPalette (c ("jasnozielony", "jasnozielony", "czarny", 'mediumpurple1', 'mediumpurple1')) (1000)) ' – rawr

+0

@rawr Edytowałem pytanie z dodatkiem, aby wyjaśnić kwestię – baptiste

Odpowiedz

10

You może cieszyć się zabawą z choose_palette(), względnie niedawnym dodatkiem do doskonałego pakietu kolorystycznego.

Funkcje zawarte w tym pakiecie zapewniają pełną i w dużym stopniu prostopadłą kontrolę nad kolorystyką barwy, nasycenia i luminancji. choose_palette() to wygodny sposób na poznanie ogromnej przestrzeni otwierających się możliwości.

Oto kod, który uruchomi selektor palety, a następnie zrzut ekranu narzędzia GUI. (Zauważ, że aby środek zakresu był ciemniejszy niż koniec, będziesz chciał zamienić domyślne wartości luminancji palety rozbieżnej, tutaj oznaczone jako "L1" i "L2".)

library(colorspace) 
library(grid) 

custom <- choose_palette() 

enter image description here

A oto przykład tego, co zrobiło mi dwa w ciągu około minuty z gry z nim

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

Zarówno pakiet i myślenia za nim są ładnie udokumentowane w winiecie pakietu (vignette("hcl-colors")) oraz w artykule towarzyszącym "Escaping RGBland: Selecting colors for statistical graphics" (Warning: pdf) opublikowane w czasopiśmie Computational Statistics and Data Analysis.

+1

dzięki, to ładne narzędzie wyglądające. (Szkoda, że ​​Rstudio nie umrze za każdym razem, gdy coś wymaga tck). – baptiste

+0

@baptiste - To * jest * niefortunnym nawykiem dla RStudio! Wracając do twojego pytania, widzę teraz, że moja odpowiedź nie odnosi się do najbardziej interesującej części. Mamy nadzieję, że ktoś inny wskaże nam profesjonalną jakość rozbieżnych palet z ciemniejszymi średnimi zakresami, jak już daje nam zestaw palet "RColorBrewer". –

+0

"Mapy kolorów insuliny" na rys. 6 w [tym artykule (Ostrzeżenie: pdf)] (http://www.sandia.gov/~kmorel/documents/ColorMaps/ColorMapsExpanded.pdf) wyglądają obiecująco, a dyskusja bezpośrednio po figura też jest interesująca. –

2

Jednym ze sposobów, w jaki zrobiłem to w przeszłości, aby odwrócić rozbieżne rampy (które jest blisko tego, co zrobiłeś, ale nie dokładnie), ale potem użyj kanału alfa, aby zdematyzować końce ramp.

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

Jedyny artykuł Jestem świadomy, że omawia odwrócenie kolorów rampy jak to Okrągła dataimage, wykres dla wysokiej rozdzielczości danych okrągłych-przestrzenna(Morphet & Symanzik, 2010) (brak wersji online, przepraszam). Zasadniczo zmieniają one wartość i nasycenie, aby połączyć końcówki ramp - chociaż były trochę skąpe w szczegółach. Oto obraz jednego z ich wykresów.

Mieli te rampy w obecnie nieaktualnych pakietu CircSpatial, więc być może uda się zerwać jak zrobili rampy stamtąd.

Powiązane problemy