2013-02-08 18 views
6

Mam dane w następujący sposób:ggplot2/paleta colorbrewer jakościowy 125 kategoriach

  • 10 państw
  • każdy ma stanowe dwa rodzaje
  • Każdy typ ma między 1 i 29 podmioty
  • Każdy państwowych entity-type ma numer

Kompletne dane available as a gist.

Próbuję wyobrazić sobie, jaka część zliczeń została wykonana dla każdej jednostki. Aby to zrobić, Użyłem następujący kod:

icc <- transform(icc, state=factor(state), entity=factor(entity), type=factor(type)) 
p <- ggplot(icc, aes(x=state, y=count, fill=entity)) + 
    geom_bar(stat="identity", position="stack") + 
    facet_grid(type ~ .) 
custom_theme <- theme_update(legend.position="none") 
p 

plot

Niestety, tracę dużo informacji, ponieważ państwowe typy z dużą ilością podmiotów nie są wyświetlane na tyle unikalne kolory.

Jak wspomniano powyżej, mam 125 jednostek, ale większość jednostek w typie stanu to 29. Czy istnieje sposób na wymuszenie ggplot2 i colorbrewer, aby przypisać unikalny (i miejmy nadzieję dość wyraźny) kolor w obrębie każdego typu jednostki ?

Jedyny sposób, w jaki wymyśliłem do tej pory, to zmuszenie entity do liczby całkowitej, która działa, ale nie zapewnia dużego zróżnicowania kolorów między poziomami.

+0

@Arun wytwarzania takiego paletowe z ładnym systemu rozbieżnej jest nietrywialne (może być dobrą odpowiedź, Wink). Konieczne jest uruchomienie browaru barwnego na jednostkach każdego typu państwowego (co jest problematyczne, ponieważ wydaje się, że większość palet ma więcej niż około 12), a następnie umieścić je we właściwej kolejności. –

+2

Trudno wymyślić 29 różnych kolorów. Dlaczego po prostu nie oznaczać encji tekstem? – hadley

+0

@hadley Noted. Tekst byłby świetny, ale prawdopodobnie skończy się pomieszaniem. Domyślam się, że moje wymaganie jest o wiele prostsze: kolory nie muszą nawet być unikalne w typie stanu, tylko na przemian. Mogę wypróbować coś takiego jak 'scale_fill_manual (values ​​= c (rep (c (" czerwony "," niebieski "), 125/2)," czerwony "))), ale wtedy nie ma gwarancji, że będzie naprzemiennie w każdym pasku . –

Odpowiedz

6

Oto podejście, które daje trochę więcej informacji. Weź koło barwne wygenerowane przez rainbow, a dla każdego innego koloru zamień go na kole przeciwnego.

col <- rainbow(30) 
col.index <- ifelse(seq(col) %% 2, 
        seq(col), 
        (seq(ceiling(length(col)/2), length.out=length(col)) %% length(col)) + 1) 
mixed <- col[col.index] 

p <- ggplot(icc, aes(x=state, y=count, fill=entity)) + 
    geom_bar(stat="identity", position="stack") + 
    facet_grid(type ~ .) + 
    scale_fill_manual(values=rep(mixed, length.out=nrow(icc))) 

custom_theme <- theme_update(legend.position='none') 
p 

enter image description here

Powiązane problemy