有没有办法在 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
)。然后你就可以使用你原来的代码了。
但是,如果出于某种原因您不想这样做,这里有一个解决方案(好吧,无论如何,这是一个黑客)来获取高于绘制的截止值的 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)
关于r - 自定义 R 中 image.plot 中的颜色范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34299422/