如何限制绿limit色阶的范围?

Mar*_* B. 5 r ggplot2 viridis

我有两组数据,我想使用带有绿rid色比例的热图来呈现。对于第一个数据集,我的值从0到1.2,并且我可以轻松看到想要看到的差异。但是,我的第二个数据集有一些离群值,范围在0到2之间。现在,很难看到0到1之间的有趣范围之间的差异,并且很难直接比较两个图像。有可能使用绿rid色标显示从0到1.2的数据,同时以黄色显示较高的值(绿rid色的“最高”颜色)?这是一个例子:

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)
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

ggplot(DataSet2, aes(x, y, fill = z)) + 
  geom_tile() +
  scale_fill_viridis() +
  geom_text(aes(label = round(z, 2)), size = 2)
Run Code Online (Sandbox Code Playgroud)

数据集2:很难看到0.5和0.7之间的差异

在此处输入图片说明

Mik*_*kko 12

@ClausWilke 的解决方案更好,因为它显示在图例中,但有时只需要一个快速的解决方案,而不必编写太多特定的代码。这个也依赖scales

ggplot(DataSet2, aes(x, y, fill = z)) + 
  geom_tile() +
  scale_fill_viridis(limits = c(0.2, 1), oob = scales::squish) +
  geom_text(aes(label = round(z, 2)), size = 2)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Cla*_*lke 10

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

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)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Prr*_*dep 5

你在寻找这样的东西吗?

ggplot(DataSet2, aes(x, y, fill = z)) + 
  geom_tile() +
  scale_fill_gradient(low="green", high="red", limits=c(0, 1.2), 
                      na.value = "yellow") +
  geom_text(aes(label = round(z, 2)), size = 2)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

使用viridis颜色,asper jazzurro 推荐。

ggplot(DataSet2, aes(x, y, fill = z)) + 
  geom_tile() + 
  scale_fill_gradientn(colors = viridis_pal()(9), limits=c(0, 1.2), 
                       na.value = "#FDE725FF") + 
  geom_text(aes(label = round(z, 2)), size = 2)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明