ggplot2/colorbrewer качественная паллета с 125 категориями

У меня есть данные следующим образом:

  • 10 штатов
  • У каждого государства есть два типа
  • Каждый тип имеет от 1 до 29 объектов
  • Каждый тип-сущность-состояние имеет счет

Полные данные доступны в виде сущности.

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

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

сюжет

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

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

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

1 ответ

Решение

Вот подход, который дает вам немного больше информации. Возьмите цветовое колесо, сгенерированное 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

Другие вопросы по тегам