2013-02-08 2 views
6

У меня есть данные следующим образом:ggplot2/ColorBrewer качественные паллетные 125 категорий

  • 10 государств
  • Каждое государство имеет два типа
  • Каждый тип имеет между 1 и 29 субъектов
  • Каждый state- сущ.-тип имеет счет

Завершено данные available as a gist.

Я пытаюсь представить, какая доля подсчетов была сделана для каждого объекта. Чтобы сделать это, я использовал следующий код:

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

К сожалению, я теряю много информации, так как государственные-типы с большим количеством лиц, которые не отображаются достаточно уникальных цветов.

Как уже упоминалось выше, у меня есть 125 объектов, но большинство объектов в состоянии типа - 29. Есть ли способ заставить ggplot2 и colorbrewer назначить уникальный (и, надеюсь, довольно четкий) цвет в каждом сущности ?

Единственный способ, с которым я пришел, заключается в том, чтобы принудить entity к целому числу, которое работает, но не обеспечивает значительной цветоделения между уровнями.

+0

@Arun Производство такой паллетные с хорошей расходящейся схемы является нетривиальной (может быть хороший ответ, подмигивание подмигивания). Необходимо запустить цветной пивовар на сущности каждого типа состояния (сам по себе проблематичен, так как большинство паллетов задыхается более чем на 12, кажется), а затем положите его в правильном порядке. –

+2

Очень сложно придумать 29 разных цветов. Почему бы просто не пометить объекты текстом? – hadley

+0

@hadley отметил. Текст был бы замечательным, но, скорее всего, в конечном итоге превратился в беспорядочный беспорядок. Я предполагаю, что мое требование на самом деле намного проще: цвета даже не должны быть уникальными в государственном типе, просто чередуясь. Я могу попробовать что-то вроде 'scale_fill_manual (значения = c (rep (c ('red', 'blue'), 125/2), 'red'))', но тогда они не гарантируются чередованием в каждом баре , –

ответ

6

Вот такой подход, который дает вам немного больше информации. Возьмите цветовое колесо, созданное rainbow, и для любого другого цвета поменяйте его на противоположное колесо.

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

Смежные вопросы