gpt4 book ai didi

r - ggplot2:多个色阶或在不同层上系统地变换颜色?

转载 作者:行者123 更新时间:2023-12-03 08:39:51 24 4
gpt4 key购买 nike

当我制作箱线图时,我还喜欢在后台显示原始数据,如下所示:

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

但是,我不喜欢当点变得太密集时我的箱形图完全消失的方式。我知道我可以调整 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)

enter image description here

到目前为止,我还没有找到一种方法来伪造不同的 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)

enter image description here

但后来我不得不处理那个丑陋的传说。有更好的想法吗?

最佳答案

2012 年 11 月添加的最新答案:

由于其中一些出色的答案需要较旧的 ggplot2 版本并且人们仍在引用此页面,因此我将使用我一直在 ggplot2 0.9.0+ 中使用的极其简单的解决方案对其进行更新。

我们只添加了第二个 geom_boxplot 层,它与第一个相同,只是我们使用 scales::alpha() 分配了一个常量颜色。所以第一个箱线图显示出来。

library(scales) # for alpha function
ggplot(dat, aes(x=group, y=value, color=group, group=group)) +
geom_point(position=position_jitter(width=0.3), alpha=0.2) +
geom_boxplot(size=1.4,fill=0, outlier.size=0)+
geom_boxplot(size=1.4,fill=0, outlier.size=0, color=alpha("black",0.3))

编辑: TobiO 指出 fill=0已停止工作。相反, fill=NAalpha=0可以替代。这似乎是由于 col2rgb() 的变化。从 R 3.0.0 开始。

jittered points under darker boxplot

关于r - ggplot2:多个色阶或在不同层上系统地变换颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9232331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com