在 ggplot 中设置调色板 transparency/saturation
Set transparency/saturation of palette in ggplot
让我们从 viridis
调色板开始。在我看来,颜色对我来说有点太亮了,而且为了我的目的,它们看起来太做作了。因此,我想应用某种透明度或类似的方法来降低饱和度:
library(nord)
library(scales)
library(viridis)
library(nord)
show_col(viridis(5))
show_col(viridis(5, alpha=.5))
在内部应用 alpha 透明度似乎有效。
。
然而,当在 ggplot 中 运行 时,它会自动将 alpha 更改为 1 并以全强度绘制原始 viridis:
ggplot(faithfuld, aes(waiting, eruptions)) +
geom_raster(aes(fill = density)) +
scale_fill_viridis(5, alpha=.5)
在另一个例子中,我发现了相反的问题,缺少intensity/saturation。例如,nord
包中的 "aurora" 调色板很棒,但它看起来有点褪色,缺乏饱和度,至少对我来说是这样。
show_col(nord("aurora",5))
同样,我尝试在内部设置 alpha,在本例中为 1,但是与 viridis 相比,这产生了不同的效果,改变了调色板。
show_col(nord("aurora", alpha=.5))
或者,我将 alpha 设置为 alpha()
。然而,这只是改变了颜色名称,但它们看起来是一样的。
show_col(alpha(nord("aurora",5)), .5)
如何减少 viridis
中的 saturation/intensity 并增加 ggplot
中的 nord
调色板?
将您的 alpha 值添加到 geom_raster()
层:
ggplot(faithfuld, aes(waiting, eruptions)) +
geom_raster(alpha = 0.5, aes(fill = density)) +
scale_fill_viridis(5)
您在上一个函数中有一点错字。 .5
在 show_col
内而不在 alpha
内。所以在 show_col
中它被解释为一个舍入的 1
这是布尔值 TRUE
导致显示十六进制值。
所以正确的行是
show_col(alpha(nord("aurora",5), .5))
这会产生淡淡的颜色。
您可以调整绿色的颜色以降低其饱和度而不使其透明。我希望您可以在 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))
让我们从 viridis
调色板开始。在我看来,颜色对我来说有点太亮了,而且为了我的目的,它们看起来太做作了。因此,我想应用某种透明度或类似的方法来降低饱和度:
library(nord)
library(scales)
library(viridis)
library(nord)
show_col(viridis(5))
show_col(viridis(5, alpha=.5))
在内部应用 alpha 透明度似乎有效。
然而,当在 ggplot 中 运行 时,它会自动将 alpha 更改为 1 并以全强度绘制原始 viridis:
ggplot(faithfuld, aes(waiting, eruptions)) +
geom_raster(aes(fill = density)) +
scale_fill_viridis(5, alpha=.5)
在另一个例子中,我发现了相反的问题,缺少intensity/saturation。例如,nord
包中的 "aurora" 调色板很棒,但它看起来有点褪色,缺乏饱和度,至少对我来说是这样。
show_col(nord("aurora",5))
同样,我尝试在内部设置 alpha,在本例中为 1,但是与 viridis 相比,这产生了不同的效果,改变了调色板。
show_col(nord("aurora", alpha=.5))
或者,我将 alpha 设置为 alpha()
。然而,这只是改变了颜色名称,但它们看起来是一样的。
show_col(alpha(nord("aurora",5)), .5)
如何减少 viridis
中的 saturation/intensity 并增加 ggplot
中的 nord
调色板?
将您的 alpha 值添加到 geom_raster()
层:
ggplot(faithfuld, aes(waiting, eruptions)) +
geom_raster(alpha = 0.5, aes(fill = density)) +
scale_fill_viridis(5)
您在上一个函数中有一点错字。 .5
在 show_col
内而不在 alpha
内。所以在 show_col
中它被解释为一个舍入的 1
这是布尔值 TRUE
导致显示十六进制值。
所以正确的行是
show_col(alpha(nord("aurora",5), .5))
这会产生淡淡的颜色。
您可以调整绿色的颜色以降低其饱和度而不使其透明。我希望您可以在 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))