2013-02-08 4 views
6

Ich habe Daten wie folgt:ggplot2/ColorBrewer qualitative Pallette mit 125 Kategorien

  • 10 Staaten
  • jeder Staat hat zwei Typen
  • Jeder Typ hat zwischen 1 und 29 Einheiten
  • Jede staatlich Entitätstyp hat eine Zählung

Vollständige Daten available as a gist.

Ich versuche zu visualisieren, welcher Anteil der Zählungen für jede Entität gemacht wurde. Um das zu tun, habe ich den folgenden Code verwendet:

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

Leider bin ich eine Menge Informationen zu verlieren, weil staatlich Typen mit vielen Einheiten sind nicht genug, um einzigartige Farben. Wie oben erwähnt, habe ich 125 Entitäten, aber die meisten Entitäten in einem Zustandstyp sind 29. Gibt es eine Möglichkeit, ggplot2 und colorbrewer zu zwingen, innerhalb jedes Entity-Typs eine eindeutige (und hoffentlich ziemlich unterschiedliche) Farbe zuzuweisen ?

Die einzige Möglichkeit, die ich bisher gefunden habe, ist, entity zu einer ganzen Zahl zu zwingen, die funktioniert, aber nicht viel Farbdifferenzierung zwischen den Ebenen bietet.

+0

@Arun Herstellung eines solchen Pallette mit einem schönen abweichenden Regelung ist nicht trivial (vielleicht eine gute Antwort, wink wink sein). Müssen Sie eine Farbe Brauer auf die Entitäten jeder Staat-Art (selbst problematisch, da die meisten Paletten an mehr als etwa 12 würgen, scheint es), dann legen Sie es in der richtigen Reihenfolge. –

+2

Es ist sehr schwierig mit 29 verschiedenen Farben zu kommen. Warum beschriften Sie nicht einfach die Entitäten mit Text? – hadley

+0

@hadley Notiert. Der Text wäre großartig, aber es wird wahrscheinlich zu einem Durcheinander kommen. Ich denke, meine Anforderung ist eigentlich viel einfacher: Die Farben müssen nicht einmal innerhalb eines Zustandstyps einzigartig sein, sondern nur alternierend. Ich kann etwas wie "scale_fill_manual" (Werte = c (rep (c ('rot', 'blau'), 125/2), 'rot')) '' versuchen, aber dann ist es nicht garantiert, dass sie innerhalb jedes Balkens alternieren . –

Antwort

6

Hier ist ein Ansatz, der Ihnen ein wenig mehr Informationen gibt. Nehmen Sie das Farbrad, das von rainbow erzeugt wird, und für jede andere Farbe, tauschen Sie es mit dem Gegenteil auf dem Rad.

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

Verwandte Themen