修复 `image(.)` 中颜色和值之间的关系

Fix the relation between color and value in `image(.)`

两个矩阵m1m2产生相同的image

m1 = matrix(1:50, ncol=1)
m2 = matrix(seq(20, 30, length.out = 50), ncol=1)
image(m1, col=terrain.colors(100))
image(m2, col=terrain.colors(100))

这意味着矩阵的值与颜色之间的关系会随着绘图的不同而变化(这完全是有道理的)。我想保持这种关系不变,即使它降低了单个图像中的对比度。一种解决方案是向我的矩阵添加 "frame" 以强制图像对相同的极值使用最极端的颜色。

min = min(cbind(m1, m2))
max = max(cbind(m1, m2))

m3 = rbind(max, m1 ,min)
image(m3, col=terrain.colors(100))

m4 = rbind(max, m2 ,min)
image(m4, col=terrain.colors(100))

它确实有用,但它很丑!我可以做一个稍微更高级的框架,但图像上的框架永远不会真正令人满意。还有其他解决方案吗?

您可以尝试通过矩阵中的值来索引颜色向量。 例如:

image(m1, col=terrain.colors(50)[m1]); 
image(m2, col=terrain.colors(50)[m2])

terrain.colors(50) 是一个包含 50 种颜色的向量。由于 m1 从 1 到 50 terrain.colors(50)[m1] 将等于 terrain.colors(50),并且您将获得颜色 150

m2有20到30的十进制数,如果你给一个十进制数作为索引,使用前面最大的整数,所以terrain.colors(50)[m2]将是第20位之间的颜色向量和 terrain.colors(50)

的第 30 种颜色