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

标签 r plot colors

有没有办法在 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))

此代码生成此图像:

enter image description here

我希望左下角 (.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))

enter image description here

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

但是,如果出于某种原因您不想这样做,这里有一个解决方案(好吧,无论如何,这是一个黑客)来获取高于绘制的截止值的 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)

enter image description here

关于r - 自定义 R 中 image.plot 中的颜色范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34299422/

相关文章:

r - 在 xts 对象中将字符转换为数字

r - 如何将阿拉伯数字翻译成孟加拉语

r - R中的Bron-Kerbosch算法

android - 动态设置主题颜色

qt - 平均 QRgb 值

r - Kullback-Leibler 散度

python - 将 3D 子图添加到 2D 集合中

Python 内存分析器绘图

python - 使用 matplotlib 和两个列表绘制图形

Python 使用 Format 方法格式化 ASCII 转义序列