Matlab,Python:将colormap修复为指定值

时间:2012-01-30 10:42:19

标签: python matlab masking color-mapping

尝试根据值的二维矩阵修复色彩映射时,这是一项简单但常见的任务。 为了演示 Matlab 中的问题,解决方案不需要在 Matlab 中(即,此处提供的代码仅用于演示目的)。


x = [0,1,2; 3,4,5; 6,7,8];
imagesc(x)
axis square
axis off
所以输出如下:
enter image description here
当某些值变为超过最大值时,它会发生如下:

x = [0,1,2; 3,4,5; 6,7,18];
当我们希望比较/跟踪两个地图中的元素时,这看起来很合理但会产生问题。由于色图关联被改变,因此几乎不可能找到用于比较/跟踪等的单个单元。 enter image description here
我实现的解决方案是将矩阵掩盖为:

x = [0,1,2; 3,4,5; 6,7,18];
m = 8;
x(x>=m) = m;
这很有效。
由于提供的代码需要搜索/过滤(额外耗费时间!)我想知道 matlab 中是否有一般/更有效的方法 > Python 等?

出现此问题的一个案例是,我们按顺序进行了许多模拟,并希望制作有关进展的感觉制作动画;在这种情况下,每种颜色应保持其关联固定。

3 个答案:

答案 0 :(得分:2)

索引很快,所以我认为你不用担心。

但是,在Matlab中,您可以将clims参数传递给imagesc

imagesc(x,[0 8]);

将8以上的所有值映射到色标中的顶部颜色,将0以下的所有值映射到色标中的底部颜色,然后拉伸中间颜色的比例。

imagesc documentation

答案 1 :(得分:2)

在使用包MatPlotLib Python 中,解决方案如下:


import pylab as pl
x = [[0,1,2],[3,4,5],[6,7,18]]
pl.matshow(x, vmin=0, vmax=8)
pl.axis('image')
pl.axis('off')
show()
因此vminvmax是整个色彩映射的边界限制。

答案 2 :(得分:1)

f1 = figure;
x = [0,1,2; 3,4,5; 6,7,8];
imagesc(x)
axis square
axis off

limits = get(gca(f1),'CLim');

f2 = figure;
z = [0,1,2; 3,4,5; 6,7,18];
imagesc(z)
axis square
axis off
caxis(limits)