在ggplot中设置调色板的透明度/饱和度

时间:2018-03-08 06:00:36

标签: r ggplot2 colors alpha palette

让我们从viridis调色板开始吧。在我看来,颜色对我来说有点太亮了,而且就我的目的而言,它们看起来太人工了。因此,我想应用某种透明度或类似的方法来降低饱和度:

library(nord)
library(scales)
library(viridis)
library(nord)

show_col(viridis(5))
show_col(viridis(5, alpha=.5))

内部应用alpha透明度似乎有效。 enter image description here

然而,当在ggplot中运行时,它会自动将alpha更改为1并以完整强度绘制原始viridis:

ggplot(faithfuld, aes(waiting, eruptions)) +
  geom_raster(aes(fill = density)) +
  scale_fill_viridis(5, alpha=.5)

enter image description here

在另一个例子中,我发现了相反的问题,缺乏强度/饱和度。例如,nord包中的“极光”调色板非常棒,但它看起来有点褪色,缺少一些饱和度,至少对我来说是这样。

show_col(nord("aurora",5))

enter image description here

同样地,我尝试在内部设置alpha,在这种情况下设置为1,但与viridis相比,这会产生不同的效果,从而改变调色板。

show_col(nord("aurora", alpha=.5))

enter image description here
或者,我将alpha设置为alpha()。但是,这只会更改颜色名称,但它们看起来一样。

show_col(alpha(nord("aurora",5)), .5)

enter image description here

如何降低viridis中的饱和度/强度,增加nord中的ggplot调色板?

3 个答案:

答案 0 :(得分:3)

将您的Alpha值添加到geom_raster()图层:

ggplot(faithfuld, aes(waiting, eruptions)) +
    geom_raster(alpha = 0.5, aes(fill = density)) +
    scale_fill_viridis(5)

enter image description here

答案 1 :(得分:3)

您可以调整绿色,以降低其饱和度,而不会使其透明。我希望你能在viridis函数中做到这一点,但它看起来并不像是一种方法。相反,下面的示例是一个函数,它将十六进制输入颜色的矢量(我们用viridis函数创建此向量)转换为hsv颜色空间,调整saturationvalue级别,然后转换回十六进制。

下面的方法有点复杂。可能有更直接的方法来转换颜色系统。

vir_lite = function(cols, ds=0.4, dv=0.7) {
  cols = rgb2hsv(col2rgb(cols))
  cols["v", ] = cols["v", ] + dv*(1 - cols["v", ])
  cols["s", ] = ds*cols["s", ]
  apply(cols, 2, function(x) hsv(x[1], x[2], x[3]))
}

以下是原始viridis颜色:

show_col(viridis(5))

enter image description here

调整后的颜色:

show_col(vir_lite(viridis(5)))

enter image description here

您可以通过更改dsdv参数来更改调整后的颜色。现在让我们使用图中调整后的颜色:

p = ggplot(faithfuld, aes(waiting, eruptions)) +
      geom_raster(aes(fill = density))

p + scale_fill_gradientn(colors=vir_lite(viridis(5)))

enter image description here

p + scale_fill_gradientn(colors=vir_lite(viridis(5), ds=0.6, dv=0.5))

enter image description here

答案 2 :(得分:1)

你的上一个功能有一点错字。 .5位于show_col范围内且不在alpha范围内。因此,在show_col中,它会被解释为舍入的1,这是布尔值TRUE,这会导致显示HEX值。

所以正确的行是

show_col(alpha(nord("aurora",5), .5))

这会产生微弱的颜色。