让我们从viridis
调色板开始吧。在我看来,颜色对我来说有点太亮了,而且就我的目的而言,它们看起来太人工了。因此,我想应用某种透明度或类似的方法来降低饱和度:
library(nord)
library(scales)
library(viridis)
library(nord)
show_col(viridis(5))
show_col(viridis(5, alpha=.5))
然而,当在ggplot中运行时,它会自动将alpha更改为1并以完整强度绘制原始viridis:
ggplot(faithfuld, aes(waiting, eruptions)) +
geom_raster(aes(fill = density)) +
scale_fill_viridis(5, alpha=.5)
在另一个例子中,我发现了相反的问题,缺乏强度/饱和度。例如,nord
包中的“极光”调色板非常棒,但它看起来有点褪色,缺少一些饱和度,至少对我来说是这样。
show_col(nord("aurora",5))
同样地,我尝试在内部设置alpha,在这种情况下设置为1,但与viridis相比,这会产生不同的效果,从而改变调色板。
show_col(nord("aurora", alpha=.5))
或者,我将alpha设置为alpha()
。但是,这只会更改颜色名称,但它们看起来一样。
show_col(alpha(nord("aurora",5)), .5)
如何降低viridis
中的饱和度/强度,增加nord
中的ggplot
调色板?
答案 0 :(得分:3)
将您的Alpha值添加到geom_raster()
图层:
ggplot(faithfuld, aes(waiting, eruptions)) +
geom_raster(alpha = 0.5, aes(fill = density)) +
scale_fill_viridis(5)
答案 1 :(得分:3)
您可以调整绿色,以降低其饱和度,而不会使其透明。我希望你能在viridis
函数中做到这一点,但它看起来并不像是一种方法。相反,下面的示例是一个函数,它将十六进制输入颜色的矢量(我们用viridis
函数创建此向量)转换为hsv
颜色空间,调整saturation
和value
级别,然后转换回十六进制。
下面的方法有点复杂。可能有更直接的方法来转换颜色系统。
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))
调整后的颜色:
show_col(vir_lite(viridis(5)))
您可以通过更改ds
和dv
参数来更改调整后的颜色。现在让我们使用图中调整后的颜色:
p = ggplot(faithfuld, aes(waiting, eruptions)) +
geom_raster(aes(fill = density))
p + scale_fill_gradientn(colors=vir_lite(viridis(5)))
p + scale_fill_gradientn(colors=vir_lite(viridis(5), ds=0.6, dv=0.5))
答案 2 :(得分:1)
你的上一个功能有一点错字。 .5
位于show_col
范围内且不在alpha
范围内。因此,在show_col
中,它会被解释为舍入的1
,这是布尔值TRUE
,这会导致显示HEX值。
所以正确的行是
show_col(alpha(nord("aurora",5), .5))
这会产生微弱的颜色。