Matlab, Python:将颜色图固定为指定值

1 投票
3 回答
2038 浏览
提问于 2025-04-17 11:57

这是一个简单但常见的任务,通常在我们想根据一个二维数值矩阵来调整颜色图时会遇到。为了说明这个问题,我们可以用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;

这个方法效果很好。
不过,由于提供的代码需要进行搜索和过滤(这会消耗额外的时间!),我在想有没有更通用/更高效的方法可以在MatlabPython等中实现?

这个问题出现的一个情况是,当我们有很多连续的模拟,并希望制作一个有意义的进度动画时;在这种情况下,每种颜色应该保持固定的关联。

3 个回答

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)
3

Python中,使用MatPlotLib这个库,解决方法如下:


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

索引速度很快,所以我觉得你不用担心这个。

不过,在Matlab中,你可以给imagesc函数传入clims这个参数:

imagesc(x,[0 8]);

这个参数的作用是把所有大于8的值映射到颜色条的最上面,把所有小于0的值映射到颜色条的最下面,然后把中间的颜色范围拉伸。

imagesc 文档

撰写回答