Jakościowa paleta kolorów - bezpieczna do kopiowania (gotowa na skalę szarości)

12

Szukam 5-klasowej jakościowej palety kolorów, którą można wydrukować na drukarkach czarno-białych.

Poniższe zdjęcie pokazuje mapę w kolorze (góra: jakościowa, dół: rozbieżna) oraz sposób, w jaki każda z nich wygląda w skali szarości (prawa strona). Obie palety kolorów ( Set3i Spectral) należą do ColorBrewer .

  1. [UL] Jakościowy Set3
  2. [UR] Jakościowy Set3 w skali szarości
  3. [LL] Rozbieżne Spectral
  4. [LR] Rozbieżne Spectralw skali szarości

wprowadź opis zdjęcia tutaj

Szczególnie cierpię na rozróżnianie grup na obrazie w prawym górnym rogu, podczas gdy dolny (spektralny) jest znacznie lepszy, jeśli nie idealny (nie mogę powiedzieć, który był niebieski lub czerwony). Według ColorBrewer schemat kolorów Spectral (ten, którego tu użyłem) jest jedyny photocopy safedla palety 5-klasowej.

Zmniejszenie klas (do 3 lub 4) może być opcją, ale obawiam się, że nie był to zamierzony cel tej mapy.

Prawdopodobnie nie jest to związane z oprogramowaniem GIS, ale w zasadzie używam QGIS, który oferuje ColorBrewer, cpt-city oraz inne palety i rampy kolorów.


@obrl_soil zasugerował, że jest to zestaw kolorów Viridis

wprowadź opis zdjęcia tutaj


@underdark zasugerował, że jest to dwa rodzaje 4 colors + whitepodejścia.

wprowadź opis zdjęcia tutaj

LEWO: Pomarańczowo-czerwony + biały (sekwencyjny), PRAWO: Fioletowo-pomarańczowy + biały (rozbieżny)

Kazuhito
źródło
Znalazłeś już dobrą odpowiedź, ale chciałbym przedstawić Cię na colorbrewer2.org, który umożliwia generowanie ładnych schematów kolorów
LaughU
@LaughU W rzeczywistości jest to strona internetowa, o której mówiłem ... przepraszam, jeśli nie została wyraźnie wymieniona. Ale dzięki, to naprawdę dobry zasób, zgadzam się.
Kazuhito

Odpowiedzi:

8

Czy spojrzałeś na rodzinę viridis? Najłatwiejszym sposobem dodania ich do QGIS jest ten link - http://rocksandwater.net/blog/2016/07/qgis_perceptually_uniform_colorramps/

obrl_soil
źródło
1
Dziękuję bardzo @obrl_soil! To jest świetne. Myślę, że już jakiś czas widziałem nazwę viridis w społeczności R, ale prawdopodobnie nie poświęciłem wystarczającej uwagi. (Dodano wynik viridis do mojego postu jako Edytuj).
Kazuhito
10

Jak sugeruje ColorBrewer, tylko pięcioklasowy schemat kolorów jest „bezpieczny” dla kserokopiarki (tj. Skali szarości). Najłatwiejszym rozwiązaniem jest użycie innego sposobu rozróżnienia klas, takiego jak kreskowanie.

W QGIS łatwo jest wybrać 5 różnych kreskowań w klasyfikacji, zmieniając pędzel wypełniający.

wprowadź opis zdjęcia tutaj

Lub za pomocą wypełnienia Wzorem punktu o różnych odległościach:wprowadź opis zdjęcia tutaj

Ian Turton
źródło
1
Dzięki @iant, ale czy powinienem to wziąć (to znaczy, ColorBrewer) sugeruje, że nie ma możliwości stworzenia 5-klasowego schematu kolorów poza tym konkretnym zestawem? Jeśli tak, nie mam problemu z wylęgiem.
Kazuhito
7

Colorbrewer 2.0 w zasadzie mówi nam, że nie ma schematu kolorów „bezpiecznych dla kserokopii” z 5 kolorami, więc oto rozwiązanie 4 kolorów:

wprowadź opis zdjęcia tutaj

Oczywiście nie liczy się jako „biały” jako potencjalny 5. kolor, więc to rozwiązanie może być nadal wystarczające dla Twojej aplikacji.

podmrok
źródło
1
Ładny. Dodanie bieli to genialny pomysł, który nigdy nie przyszedł mi do głowy (byłem prawie gotowy zrezygnować z ColorBrewer). Dzięki!
Kazuhito
4

Miałem ten sam problem. Potrzebowałem 8 lekcji. Stworzyłem obejście, które pozwala przynajmniej uczynić kategorie możliwie najbardziej rozróżnialnymi. Zwiększa odległość między wartościami nasycenia każdego koloru, które są domyślnie tworzone przez przeglądarkę kolorów. Dzięki temu otrzymujesz najbardziej wyróżniające się kategorie w druku czarno-białym. Dwie wykresy zmieniają się tylko nieznacznie, jak widać poniżej, ale w mc może to mieć znaczenie.

Musisz znać R, aby użyć skryptu:

library("ggplot2")
library("colorspace")
library("RColorBrewer")


# display all color scales with n=8
display.brewer.all(n = 8,type = "div")
# choose a brewer
brewer.pal(8,"Spectral")
# transform palette to HSV values
(palette.HSV<-as(hex2RGB(brewer.pal(8,"Spectral")), "HSV")) 

# plot
plot(1:8,1:8,pch=21,bg=hex(palette.HSV),col=hex(palette.HSV),cex=5)

# sort and get indices of HSV values
sort(palette.HSV@coords[,2],index.return=TRUE)

# calculate steps for distance
9/8 # 8 classes until 0.9 saturation

# change accordingly
palette.HSV@coords[1,2]<-0.7875 # swapped with second
palette.HSV@coords[2,2]<-0.675
palette.HSV@coords[3,2]<-0.5625
palette.HSV@coords[4,2]<-0.3375
palette.HSV@coords[5,2]<-0.225
palette.HSV@coords[6,2]<-0.1125
palette.HSV@coords[7,2]<-0.45
palette.HSV@coords[8,2]<-0.9

plot(1:8,1:8,pch=21,bg=hex(palette.HSV),col=hex(palette.HSV),cex=5)

# save your costum colorscale
my.scale<-hex(palette.HSV)

zmienione wartości zmienione wartości

oryginalne wartości wprowadź opis zdjęcia tutaj

edycja: jeśli chcesz również zmienić jasność (patrz dyskusja poniżej), użyj następującego kodu:

# change brightness accordingly (reverse order)
palette.HSV@coords[1,3]<- 0.225
palette.HSV@coords[2,3]<-0.4
palette.HSV@coords[3,3]<-0.5625
palette.HSV@coords[4,3]<-0.9
palette.HSV@coords[5,3]<-0.7875
palette.HSV@coords[6,3]<-0.675
palette.HSV@coords[7,3]<-0.3
palette.HSV@coords[8,3]<-0.1125
joaoal
źródło
1
Dzięki @joaoal! Czy masz coś przeciwko dodaniu reprezentacji w skali szarości dla każdego obrazu? Moja szybka próba na twoim kodzie dała prawie identyczne obrazy (dla moich niewprawnych oczu), kiedy zmieniły się w 8-bitową skalę szarości.
Kazuhito,
1
@Kazuhito nie jestem pewien, jak to zrobić w R. Na wydruku mc moje rozwiązanie jest wyraźnie trochę lepsze niż domyślne, jednak, jak napisałem powyżej, trudno jest wprowadzić naprawdę dobre różnice, jeśli użyjesz 8 klas. w twoim przypadku z 5 klasami może być lepiej. Oprócz ulepszenia rampy kolorów, możesz również rozważyć dodanie symboli do mapy w środku każdego wielokąta, gdzie każdy unikalny symbol reprezentuje inną kategorię, lub możesz użyć różnych stylów wypełnienia, np. Wzorów linii. moje rozwiązanie dotyczyło danych rastrowych, w których nie można tego zrobić.
joaoal
2
+1 @joaoal Dziękujemy za dodatkowe informacje. Tylko myśl, ale co powiesz na zmianę, palette.HSV@coords[x,3]która odpowiada wartości (lub jasności) w przestrzeni kolorów HSV? (Pracujesz nad Nasyceniem). Mój szybki test coords[ ,3]wytworzył większy kontrast, ale nie jestem pewien w twoim otoczeniu.
Kazuhito,
2
@Kazuhito Próbowałem tego na mój przykład i nie przyniosłem lepszych rezultatów, zmieniam tylko jasność. Teoretycznie nasycenie jest bezpośrednio związane z szarością, gdzie 0 to biel, a 1 to czerń na wydruku mc / lub pełny kolor, np. „Czerwony” na wydruku kolorowym. Jasność wpływa również na szarość wydruku, ale w jakiś sposób twój zasięg jest ograniczony, ponieważ zmienia kolor pomiędzy pełnym kolorem, np. „Czerwony” i „czarny”. Kombinacja obu może być opcją i dodałem trochę kodu powyżej, aby to uwzględnić. Miałem wrażenie, że tylko poprawia różnicę w jaśniejszych kolorach, ale pogarsza te ciemniejsze.
joaoal,
Dzięki, dobrze wiedzieć. Zgadzam się również, że nie powinniśmy zbytnio poświęcać wartości.
Kazuhito,