修复 `image(.)` 中颜色和值之间的关系
Fix the relation between color and value in `image(.)`
两个矩阵m1
和m2
产生相同的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)
,并且您将获得颜色 1
到 50
。
m2
有20到30的十进制数,如果你给一个十进制数作为索引,使用前面最大的整数,所以terrain.colors(50)[m2]
将是第20位之间的颜色向量和 terrain.colors(50)
的第 30 种颜色
两个矩阵m1
和m2
产生相同的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)
,并且您将获得颜色 1
到 50
。
m2
有20到30的十进制数,如果你给一个十进制数作为索引,使用前面最大的整数,所以terrain.colors(50)[m2]
将是第20位之间的颜色向量和 terrain.colors(50)