ggplot 热图,具有最小和最大颜色饱和度

问题描述 投票:0回答:2

我想使用 ggplot 绘制热图,但色标在最小和最大级别上都饱和。例如,给定这个数据集:

MyX<-c(rep(1,10),rep(2,10),rep(3,10),rep(4,10),rep(5,10))
MyY<-rep(seq(1,10),5)
MyFill<-runif(50, min = 10, max = 25)  

MyDF<-data.frame(MyX,MyY,MyFill)

我想绘制突出显示 15 到 20 之间的值的热图。因此,低于 15 的值都具有相同的颜色(色标的最小值),高于 20 的值都具有相同的颜色(色标的最大值)。

我能做到:

ggplot(data = MyDF, aes(x=MyX, y=MyY)) +
  geom_raster(aes(fill = MyFill), interpolate=TRUE)+
  scale_y_reverse(lim=c(10,1))+
  scale_fill_gradient2(limits=range(15,20))+
  theme_bw()

但这会使 15 以下和 20 以上的颜色变灰。我想要类似的东西,但与使颜色变灰相反,只是使它们在最小值和最大值处饱和。

r ggplot2 heatmap
2个回答
1
投票

您可以使用

scale_fill_gradientn
代替。只需将限制的颜色设置为与您想要突出显示的范围的颜色相同即可。

ggplot(data = MyDF, aes(x=MyX, y=MyY)) +
  geom_raster(aes(fill = MyFill), interpolate=TRUE)+
  scale_y_reverse(lim=c(10,1))+
  scale_fill_gradientn(breaks=c(-Inf, 15,20, Inf), colors=c("red","red","blue","blue"))+
  theme_bw()

0
投票

scale_*_gradient
系列函数有一个选项可以处理越界值 (
oob
)。

默认 (

oob = censor
) 将超出范围的值替换为
NA
。 您可以将其更改为
oob = squish
,将值压缩到范围内。

因此,这应该可以解决您的问题:

ggplot(data = MyDF, aes(x=MyX, y=MyY)) +
  geom_raster(aes(fill = MyFill), interpolate=TRUE)+
  scale_y_reverse(lim=c(10,1))+
  scale_fill_gradient2(limits=range(15,20), oob = squish)+
  theme_bw()
© www.soinside.com 2019 - 2024. All rights reserved.