【问题标题】:geom_boxplot: map alpha levels to whiskers & outliersgeom_boxplot:将 alpha 水平映射到胡须和异常值
【发布时间】:2016-04-09 16:20:45
【问题描述】:

有没有办法让geom_boxplot 线、晶须和离群点继承分配给下图中的箱线图fill 的相同alpha

library(ggplot2)

ggplot(iris, aes(x = Species, y = Sepal.Length, alpha = Species == "setosa")) +
  geom_boxplot() +
  scale_alpha_discrete(range = c(0.5, 1))

【问题讨论】:

标签: r ggplot2


【解决方案1】:

我不确定在ggplot2 中是否有一种自然的方法可以做到这一点,但这里有一个 hacky 方法:颜色审美决定了线条、胡须和异常点的颜色。因此,我们将为情节添加色彩美学。但是,我们将手动设置颜色,以便它们在颜色定义中包含 alpha 值序列。因此,我们有效地将 alpha 值添加到颜色美学中。我已将美学映射到 Species,以便我可以使用三个不同的 alpha 级别进行说明,并添加了 theme_bw() 以更好地对比 alpha 值。

首先,在最终图表中设置我们想要的 alpha 值:

numVals = length(unique(iris$Species))
avals = seq(0.9, 0.3, length.out=numVals)

技巧如下:将所有颜色设置为黑色,但将 alpha 级序列添加到颜色定义中。为此,我们需要将 alpha 级别转换为 0 - 255 范围内的十六进制。

avalsHex = paste0("#000000", toupper(as.hexmode(round(avals*255))))

在上面的代码中,avals*255 是 0 - 255 范围内的 alpha 级别。 as.hexmode 将这些值转换为十六进制。 toupper 不是绝对必要的,但我习惯于看到大写的十六进制颜色定义。然后我们将两位十六进制 alpha 值粘贴到颜色的末尾,在本例中为黑色 (#000000),它给出了一个包含 alpha 值的三种颜色的向量。

不,我们使用颜色和 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 函数返回每种颜色的十六进制代码,实际上是为您处理转换。

【讨论】:

  • 不像我担心的那样老套!如果我有一个不同填充颜色的向量(即不是全部从#000000 开始),这种方法是否仍然有效? (抱歉,第一句话过早发表)
  • 嗯,它确实保持了ggplot 语法的精神,但您必须跳出正常的ggplot 工作流程才能使其工作。
  • 回答您的其余评论:是的。通过添加额外的两个十六进制数字,您可以将任何 alpha 级别添加到任何十六进制颜色。有关简单示例,请参阅更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多