繁体   English   中英

在R中的image.plot中自定义颜色范围

[英]Customizing color range in image.plot in R

有没有办法在image.plot()函数中的zlim截止点上方绘制值? 这是一个例子:

library('gplots')
library('fields')
library('RColorBrewer')

rf <- colorRampPalette(rev(brewer.pal(11,'Spectral')))   # make colors
r <- rf(64)

z <- matrix(data = 0, nrow = 3, ncol = 3)
z[1,1] <- .15
z[2, ] <- .10
z[3, ] <- .05

image.plot(z,
           col = r,
           zlim = c(0, .10))

此代码产生以下图像:

在此处输入图片说明

如果左下角(.15)被涂成红色(如.10),我会喜欢。 但是我找不到用image.plot()函数来做到这一点的方法。

我应该提到需要传说的地方。 而且,实际数据要大得多。 有任何想法吗?

作为一个快速技巧,只需在色带中将最终颜色重复几次,即可使该色带在该区域“平坦”。 结果,最高的z值将全部具有相同的颜色:

library('gplots')
library('fields')
library('RColorBrewer')

# Original 11 colors
cols = rev(brewer.pal(11,'Spectral'))

# Repeat the 11th color an extra 5 times
cols = c(cols,rep(cols[11],5))

rf <- colorRampPalette(cols)   # make colors
r <- rf(64)

z <- matrix(data = 0, nrow = 3, ncol = 3)
z[1,1] <- .15
z[2, ] <- .10
z[3, ] <- .05

image.plot(z, col = r, zlim = c(0, .15))

在此处输入图片说明

更新:根据您的评论,以所需方式获得图例的最简单方法可能是在绘制之前将所有大于0.1的值更改为0.1(或z截止值是任何值)( z[z>0.1]=0.1 )。 然后,您可以只使用原始代码。

但是,如果出于某些原因您不想这样做,这是一个解决方案(无论如何,还是一种hack),可以使z值高于绘制的截止值,而仅显示低于截止值的图例。 首先,运行上面的代码。 然后,下面的代码用填充的白色矩形“覆盖”图例,并添加具有所需值范围的新图例。

请注意,在下面的解决方案中,0-0.15色带中的颜色到值的映射通常不会与0-0.1色带中的颜色到值的映射完全匹配,但是您可以通过调整次数来使其接近您在第一个色带中重复最后的颜色。 为了获得完全匹配,我认为您可以使用colorRamp函数将特定的颜色映射到特定的z值。

# Cover legend
rect(1.3,-1,1.6,2, col="white", border="white", xpd=TRUE)

# Go back to original 11 colors for color ramp
cols = rev(brewer.pal(11,'Spectral'))
rf <- colorRampPalette(cols)   # make colors
r <- rf(64)

# Plot only the legend with z cutoff at 0.10
image.plot(z, col = r, zlim = c(0, .10), legend.only=TRUE)

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM