gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:27:42 27 4
gpt4 key购买 nike

让我们从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 包中的“aurora”调色板很棒,但它看起来有点褪色,缺乏一些饱和度,至少对于我来说是这样。

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 中的饱和度/强度并增加 ggplot 中的 nord 调色板?

最佳答案

您可以调整 viridis 颜色以降低其饱和度,而不使其透明。我希望您可以在 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

关于r - 在ggplot中设置调色板的透明度/饱和度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49166411/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com