Jak zrobić dobrą skalę intensywności kolorów?

12

Nie jestem dobry w statystyce, ale myślę, że trafiłem we właściwe miejsce. Moje pytanie jest proste:

Mój problem polega na porównaniu populacji kilku stanów w małym kraju, ale niektóre stany mają 3000 000 mieszkańców, a niektóre 2 000 mieszkańców.
Maluję to na mapie, a „intensywność” koloru zależy od tego, jak populacja każdego stanu porównuje się z populacją całego kraju.

Problem polega na tym, że stany o dużej populacji są wyświetlane w naprawdę intensywnych kolorach, a małe stany prawie nie mają kolorów.

Czy istnieje prosty sposób na „normalizację” lub porównanie danych?

Nie wiem, czy tłumaczę się właściwie, ale mam nadzieję, że ktoś może mi pomóc. Proszę o komentarz, jeśli moje pytanie nie jest jasne, a ja wyjaśnię.

Dziękuję za pomoc!

Zebs
źródło
4
Proponuję sprawdzić tag wizualizacji na stronie wymiany stosu gis, aby zobaczyć przykłady gis.stackexchange.com/questions/tagged/visualization
Andy W
1
W tej samej linii możesz sprawdzić gradienty na www.0to255.com.
Pete Wilson,
Niektóre pakiety map dla R mają wbudowane kody kolorów, które zapobiegają tego rodzaju problemom, ale czy o to pytasz?
ks.
Używam tego na niestandardowej mapie, a oczywiste podejście (dzielenie każdej wartości przez całkowitą populację) daje mi wartość od 0 do 1 (następnie używam tej wartości, aby wybrać „intensywność” koloru). Problem polega na tym, że istnieją wartości, które są zbyt dalekie, więc niektóre stany wyglądają na całkowicie kolorowe, a niektóre prawie w ogóle nie mają kolorów. Wiem, że ze statystycznego punktu widzenia jest to poprawne, ale chcę, aby reprezentacja danych była bardziej odpowiednia i łatwiejsza do zrozumienia.
Zebs,
Dlaczego warto stosować jednolite przerwy? Dlaczego nie skala dziennika? A może we wniosku możesz wybrać punkty przerwania, które mają pewne znaczenie (np. Wiejskie / podmiejskie / miejskie).
JMS

Odpowiedzi:

6

Przykro mi, ale dla mnie to brzmi, jakbyś próbował naprawić to, co nie jest zepsute. W rzeczywistości możesz nawet próbować złamać to, co nie jest zepsute. Jeśli masz zmienną ilościową (tutaj, populację), która obejmuje szeroki zakres, wówczas każda metryka, której użyjesz do jej przedstawienia, powinna również obejmować szeroki zakres.

Ale dla wszystkich rzeczy związanych z kolorem (a zwłaszcza mapami) kluczowym źródłem jest, jak sądzę, ColorBrewer

Peter Flom - Przywróć Monikę
źródło
2
Próbuję coś złamać; Wiem, że wartości, które otrzymuję, są statystycznie poprawne, ale chcę ułatwić użytkownikom zrozumienie danych. To decyzja UI.
Zebs,
@Zebs: Bend, bardziej jak ...
naught101
5

Dobre pytanie, Jednym z rozwiązań jest przeskalowanie kolorów, aby były bardziej równomiernie rozmieszczone, lub do rozkładu z niższymi ogonami ... ale wtedy twoja legenda musi być wystarczająco jasna, ponieważ odkształcenie skali jest w jakiś sposób niesprawiedliwe ...

Na przykład w R: przeskalowanie normalnej do jednolitej. (to, co masz, może pójść bardziej w drugą stronę, ponieważ masz duże ogony i chcesz je mniejsze, ale zasada jest taka sama)

X=array(rnorm(10000),c(100,100))
ramp=colorRamp(c("blue","cyan","white","yellow","red"),space ="rgb")
kleur <- rgb( ramp(seq(0,1,length=200)),max = 255)
par(mfrow=c(1,2))
image(X,col=kleur)### image without rescaling
Fn=ecdf(X)
ScaledX=array(Fn(X),c(100,100))
image(ScaledX,col=kleur)
Robin Girard
źródło
3

Możesz podzielić przez całkowitą populację. Zapewniłoby to, że wszystko mieści się w przedziale od 0 do 1. Jeśli skale są nadal zbyt rozbieżne, rozważ skalę logarytmiczną.

Gary
źródło
2

Czuję się niezręcznie, pytając o to, ale czy naprawdę jesteś zaangażowany w używanie koloru do przedstawienia ilościowej ilości? Czy nie ma sposobu na umieszczenie paska w każdym stanie, którego wysokość reprezentuje ilość?

Innym sposobem może być pokazanie mapy z obszarami reprezentującymi obszary geograficzne wraz z mapą, w której powierzchnia każdego stanu jest proporcjonalna do wielkości populacji - podobnie jak robi to homunkulus czuciowy . Ale to byłaby bolesna ilość rysowania - nie znam żadnego sposobu na zautomatyzowanie tego (choć może istnieć)

410 nie ma
źródło
Dobra uwaga!
robin girard
4
Wiele platform oprogramowania do mapowania ma możliwości wymienione w tym poście. Zniekształcenia oparte na atrybutach map są często nazywane kartogramami. Zobacz gis.stackexchange.com/q/7406/751 . To powiedziawszy, paski umieszczone na mapie nie są łatwiejsze do wizualizacji niż kolory. Kiedy paski nie są obok siebie, trudno jest dokonać względnych porównań, co nie jest tak dużym problemem w skali kolorów.
Andy W
Zgadzam się, że paski mniej niż optymalne na mapie. Innym sposobem na to jest zniekształcenie siatki, jak tutaj: viewsoftheworld.net/?p=832 . Osobiście często trudno mi je rozszyfrować, ale można to zrobić całkiem dobrze, w zależności od stopnia zniekształcenia.
naught101
1

Twój określony cel:

Porównaj populację kilku stanów w małym kraju.

Twój opisany problem:

Ponieważ niektóre stany mają populację 3000 000, a niektóre populację 2000. Czy istnieje prosty sposób na „normalizację” lub porównanie danych?

Cel normalizacji danych przed mapowaniem

Nie będzie tej odpowiedzi, ponieważ nie jestem pewien kontekstu, dlaczego tworzysz mapę.

Niemniej jednak, oto kilka pomysłów do przemyślenia: znormalizuj swoje dane, aby mapa stanowiła interesujące znaczenie dla potencjalnych czytelników mapy, aby mogli połączyć to, co widzą na mapie, z koncepcją, o której zwykle myślą. Zasadniczo uważam, że twoje nowe znormalizowane liczby powinny być powiązane z jakąś jakościową koncepcją, którą czytelnicy map uważają za interesującą do zrozumienia (losowa ciekawostka: miara = ilość x jakość, Hegel).

Dwa proponowane sposoby normalizacji danych

1. Aby zorientować się, ile otwartej przestrzeni jest w każdym stanie.

Utwórz nową zmienną stanu dla gęstości zaludnienia, obliczając populację podzieloną przez całkowitą powierzchnię stanu.

2. Aby kolorystyka stanów kontrastowała ze sobą.

Utwórz nową zmienną stanu, obliczając odchylenie od średniej każdego stanu. Załóżmy na przykład, że masz 3 stany z populacjami w następujący sposób:

  • Stan A wynosi 100.
  • Stan B to 50.
  • Stan C to 1.

Średnia wyniesie około 50.

Wartości nowej zmiennej dla każdego stanu będą następujące:

  • Stan A wynosi +50 (kolor intensywnie zielony ).
  • Stan B to 0 (kolor szary ).
  • Stan C wynosi -49 (kolor intensywnie czerwony ).

Możesz użyć dowolnego schematu kolorów, w którym liczby dodatnie kontrastują z liczbami ujemnymi (Google „Colorbrewer” dla wielu przykładów schematów kolorów dla map).

b_dev
źródło