饱和颜色时如何调整ggplot图例的比例

问题描述

在创建光栅图时,我想在最小和最大级别使颜色条饱和以强调某个范围。在这种情况下,我想强调中间范围(19-30),即使实际范围是 6-56。

x<-c(1,1,2,3,4,4)
y<-c(1,4)
z<-c(20,21,22,23,40,6,25,24,56,20,20)

DF<-data.frame(x,y,z)


ggplot(DF,aes(x=x,y=y)) +
  geom_raster(aes(fill = z)) +
  scale_fill_gradientn(limits = c(19,30),colors = c('blue',"red"),oob = scales::squish)

这是我想要的图,但我希望图例中的数字代表“z”值内范围的真实比例。理想情况下,结果将是相同的图,但图例文本中的数字将从 6 到 56(“z”的最小值和最大值)缩放。 图例中的颜色渐变应在 30 以上和 19 以下饱和。向查看者表明 30 以上的所有值都是相同的颜色,19 以下的所有值都是相同的颜色。因此,虽然图例会有 30-56 的刻度,但图例颜色条不会在 30 以上发生变化。

解决方法

你可以试试这个:

ggplot(DF,aes(x=x,y=y)) +
    geom_raster(aes(fill = z)) +
    scale_fill_gradientn(values = scales::rescale(x=c(min(DF$z),19,30,max(DF$z)),to = c(0,1),from = c(min(DF$z),max(DF$z))),colors = c('blue','blue',"red","red"))

enter image description here