当我制作箱线图时,我喜欢在背景中显示原始数据,就像这样:
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
减小到足以使最暗的组不遮盖箱线图,则最轻的组将完全消失)。我试图做的是系统地改变箱线图的颜色 - 变得稍微深一些,以便它们即使在背景点达到最大alpha时也能显示出来。例如:
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)
目前我还没有找到一种方法来为geom_boxplot
层中的不同scale_color
进行伪装(如果有这样一种方法,似乎这是最简单的路线)。也没有找到一个简单的语法来系统地调整颜色,就像你可以轻松地偏移连续的美学属性一样,如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)
但是我现在必须处理那个丑陋的图例。有更好的想法吗?
hcl
颜色比例尺的讨论,您可以独立地映射三个参数。我认为这可能是一个不错的选择。 - baptiste