Когда я создаю диаграммы, мне нравится также показывать необработанные данные в фоновом режиме, например:
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)
Однако мне не нравится, как мои полевые сюжеты полностью исчезают, когда очки становятся слишком плотными. Я знаю, что могу настроить alpha
, что в некоторых случаях хорошо, но не тогда, когда мои группы имеют разную плотность (например, когда самая легкая группа полностью исчезнет, если я уменьшу alpha
настолько, чтобы самая темная группа не " t затмить окно коробки). То, что я пытаюсь сделать, - это систематически смещать цвета для графиков окна - немного темнее, возможно - так, чтобы они отображались даже тогда, когда фоновые точки превышают альфу. Например:
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)
До сих пор я не нашел способ подделать в другом scale_color
для слоя geom_boxplot
(который казался бы самым простым путем, если есть способ сделать это). Я также не смог найти простой синтаксис для систематической настройки цветов так же, как вы можете легко компенсировать непрерывную эстетику, например 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)
но тогда мне приходится иметь дело с этой уродливой легендой. Любые лучшие идеи?