ggplot2: Несколько цветовых шкал или систематическое смещение цветов на разных слоях?

Когда я создаю коробчатые диаграммы, мне нравится показывать необработанные данные в фоновом режиме, например:

library(ggplot2)
library(RColorBrewer)

cols = brewer.pal(9, 'Set1')

n=10000
dat = data.frame(value=rnorm(n, 1:4), group=factor(1:4))

ggplot(dat, aes(x=group, y=value, color=group, group=group)) +
  geom_point(position=position_jitter(width=0.3), alpha=0.1) +
  scale_color_manual(values=cols) +
  geom_boxplot(fill=0, outlier.size=0)

enter image description here

Однако я не Мне не нравится, как мои ящичные диаграммы полностью исчезают, когда точки становятся слишком плотными. Я знаю, что могу настроить альфа , что в некоторых случаях нормально, но не тогда, когда мои группы имеют разную плотность (например, когда самая светлая группа полностью исчезнет, ​​если я уменьшу альфа настолько, чтобы самая темная группа не заслоняла прямоугольную диаграмму). Я пытаюсь систематически менять цвета для прямоугольных диаграмм - a возможно, немного темнее - так что они появляются, даже когда фон указывает на максимальное значение альфа. Например:

plot(1:9, rep(1, 9), pch=19, cex=2, col=cols)
cols_dk = rgb2hsv(col2rgb(brewer.pal(9, 'Set1'))) - c(0, 0, 0.2)
cols_dk = hsv(cols_dk[1,], cols_dk[2,], cols_dk[3,])
points(1:9, rep(1.2, 9), pch=19, cex=2, col=cols_dk)

enter image description here

Пока я не нашел способа подделать другой scale_color для слой geom_boxplot (который может показаться самым простым путем, если есть способ сделать это). Мне также не удалось найти простой синтаксис для систематической настройки цветов таким же образом y Вы можете легко компенсировать непрерывную эстетику, такую ​​как aes (x = x + 1) .

Самое близкое, что мне удалось получить, - это полностью дублировать уровни фактора ...

ggplot(dat, aes(x=group, y=value, color=group, group=group)) +
  geom_point(position=position_jitter(width=0.3), alpha=0.1) +
  scale_color_manual(values=c(cols[1:4], cols_dk[1:4])) +
  geom_boxplot(aes(color=factor(as.numeric(group)+4)), fill=0, outlier.size=0)

enter image description here

но затем мне приходится иметь дело с этой уродливой легендой. Есть идеи получше?

33
задан John Colby 10 February 2012 в 17:47
поделиться