有没有办法让geom_boxplot
行,胡须和异常值点继承在下图中分配给boxplot alpha
的{{1}}?
fill
答案 0 :(得分:3)
我不确定在ggplot2
内是否有一种自然的方法可以做到这一点,但这是一种黑客的方式:颜色审美决定了线条,胡须和异常点的颜色。因此,我们将为情节增添色彩美感。但是,我们将手动设置颜色,以便它们在颜色定义中包含alpha值序列。因此,我们有效地将alpha值添加到颜色美学中。我已将美学映射到Species
,以便我可以使用三个不同的alpha级别进行说明,并添加theme_bw()
以更好地对比alpha值。
首先,在最终图表中设置我们想要的alpha值:
numVals = length(unique(iris$Species))
avals = seq(0.9, 0.3, length.out=numVals)
这是hack:将所有颜色设置为黑色,但将alpha级序列添加到颜色定义中。为此,我们需要将alpha级别转换为十六进制,范围为0 - 255。
avalsHex = paste0("#000000", toupper(as.hexmode(round(avals*255))))
在上面的代码中,avals*255
是0到255比例的alpha级别。 as.hexmode
将这些值转换为十六进制。 toupper
并非绝对必要,但我习惯于以大写形式看到十六进制颜色定义。然后我们将两位十六进制alpha值粘贴到颜色的末尾,在本例中为黑色(#000000
),它给出了包含alpha值的三种颜色的矢量。
不是我们用每种美学的颜色和阿尔法美学以及手工值来绘制:
ggplot(iris, aes(x = Species, y = Sepal.Length)) +
geom_boxplot(aes(color=Species, alpha = Species)) +
scale_alpha_manual(values = avals) +
scale_colour_manual(values = avalsHex)
更新:为了解决您的评论,以下是除alpha值以外的不同颜色的示例:
avalsHex = paste0(c("#FF0000","#00FF00","#0000FF"), toupper(as.hexmode(round(avals*255))))
然后只需运行相同的绘图代码即可获得:
更新2 :考虑颜色让我意识到你甚至不需要转换为十六进制来添加alpha值。例如,使用hcl
颜色可以执行此操作:
# Black boxplots with 3 different alpha levels
scale_colour_manual(values = hcl(0,0,0, alpha=avals))
# Colored boxplots with 3 different alpha levels
scale_colour_manual(values=hcl(seq(15,375,length.out=4)[1:3], 100, 65, alpha=avals))
hcl
函数返回每种颜色的十六进制代码,实际上是为您完成转换。