R热力图,值小于0为红色,大于0为蓝色渐变。

3

我有一个-100到100的热力图,希望所有小于0的值都显示为红色,而大于0的值则呈现蓝色渐变。

我已经看过一些将红色和蓝色转换为渐变的例子,但没有将红色保持不变的例子。

我尝试过以下方法:

bk = c(seq(-100,-0.1,length=1), seq(-0.1,0.1,length=1), seq(0.1,100,length=100))
rc1 <- colorRampPalette(colors = c("red"))
rc2 <- colorRampPalette(colors = c("blue"))(length(bk)-1)
hmcols <- c(rc1, rc2)

但是我遇到了错误

"Error in image.default(1:nc, 1:nr, x, xlim = 0.5 + c(0, nc), ylim = 0.5 +  : 
  must have one more break than colour"

bk = c(seq(-100,-0.1,length=1), seq(-0.1,0.1,length=1), seq(0.1,100,length=100)) rc1 <- colorRampPalette(colors = c("red")) rc2 <- colorRampPalette(colors = c("blue"))(length(bk)-1) hmcols <- c(rc1, rc2)bk = c(seq(-100,-0.1,length=1), seq(-0.1,0.1,length=1), seq(0.1,100,length=100)) rc1 <- colorRampPalette(colors = c("red")) rc2 <- colorRampPalette(colors = c("blue"))(length(bk)-1) hmcols <- c(rc1, rc2) - Kim Ngo
你使用了什么热图绘制函数?能否提供你用于绘制图形的命令? - MrFlick
1个回答

3
这是一个这样的情节的例子。
#breaks
bk <- c(-100,seq(0,100,by=10))
#colors (one less than breaks
mycols <- c("red",colorRampPalette(colors = c("white","blue"))(length(bk)-2))

#sample data
z <- matrix(runif(25*25, -100, 100), ncol=25)

#plot
heatmap(z, col=mycols, breaks=bk, scale="none")

输入图像描述

请注意,为了获得您想要的特定颜色,我们使用一个调用colorRampPalette,传入您想要过渡的三种颜色(假设白色是可接受的中性颜色)。 我们还使用scale =“none”,因为默认情况下它会将值在0和1之间缩放。 因此,如果您想保持原始值范围上的断点,您需要禁用缩放。


谢谢您的回复,MrFlick先生。但是,我希望小于0的任何值都只显示为红色,而不是深浅不一的红色。 - Kim Ngo
我明白了。我已经更新了我的答案。(在答案正确之前,您不应该接受它们)。 - MrFlick
哎呀,我是StackOverflow的新手,不太清楚绿色勾和向上箭头之间的区别。 - Kim Ngo
您的编辑完美地达到了我的目的。非常感谢您!! - Kim Ngo
很高兴它现在能够正常工作并且值得获得绿色勾选。抱歉我第一次误读了问题。 - MrFlick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接