gpt4 book ai didi

r - 如何限制 viridis 色标的范围?

转载 作者:行者123 更新时间:2023-12-04 17:30:43 29 4
gpt4 key购买 nike

我有两组数据,我想使用带有 viridis 色标的热图来呈现这些数据。对于第一个数据集,我的值范围从 0 到 1.2,我可以很容易地看到我想要看到的差异。然而,我的第二个数据集有一些异常值,导致范围从 0 到 2。现在更难看出 0 和 1 之间有趣范围的差异,并且更难以直接比较两个图像。是否有可能使用 viridis 色标显示 0 到 1.2 的数据,同时以黄色(绿色色标的“最高”颜色)显示较高的值?
下面是一个例子:

library(viridis)

#Create Data
DataSet1 <- expand.grid(x = 0:5, y = 0:5)
DataSet1$z <- runif(36, 0, 1.2)

DataSet2 <- expand.grid(x = 0:5, y = 0:5)
DataSet2$z <- runif(36, 0, 2)

#Plot Data
ggplot(DataSet1, aes(x, y, fill = z)) +
geom_tile() +
scale_fill_viridis() +
geom_text(aes(label = round(z, 2)), size = 2)

DataSet1:很容易看出 0.5 和 0.7 之间的差异

enter image description here
ggplot(DataSet2, aes(x, y, fill = z)) + 
geom_tile() +
scale_fill_viridis() +
geom_text(aes(label = round(z, 2)), size = 2)

DataSet2:很难看到 0.5 和 0.7 之间的差异

enter image description here

最佳答案

您可以定义任意的重新缩放函数。不确定这看起来那么好,可能需要对图例进行一些处理,但原则上这种机制允许您以任何您想要的方式将数据值映射到比例尺上。

ggplot(DataSet2, aes(x, y, fill = z)) + 
geom_tile() +
scale_fill_viridis(rescaler = function(x, to = c(0, 1), from = NULL) {
ifelse(x<1.2,
scales::rescale(x,
to = to,
from = c(min(x, na.rm = TRUE), 1.2)),
1)}) +
geom_text(aes(label = round(z, 2)), size = 2)

enter image description here

关于r - 如何限制 viridis 色标的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48424682/

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