geom_boxplot:将alpha级别映射到whiskers&离群

时间:2016-01-05 18:14:07

标签: r ggplot2

有没有办法让geom_boxplot行,胡须和异常值点继承在下图中分配给boxplot alpha的{​​{1}}?

fill

1 个答案:

答案 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)

enter image description here

更新:为了解决您的评论,以下是除alpha值以外的不同颜色的示例:

avalsHex = paste0(c("#FF0000","#00FF00","#0000FF"), toupper(as.hexmode(round(avals*255))))

然后只需运行相同的绘图代码即可获得:

enter image description here

更新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函数返回每种颜色的十六进制代码,实际上是为您完成转换。