Matlab, Python:将颜色图固定为指定值
这是一个简单但常见的任务,通常在我们想根据一个二维数值矩阵来调整颜色图时会遇到。为了说明这个问题,我们可以用Matlab来举例,但解决方案不一定要用Matlab(这里的代码只是为了演示)。
x = [0,1,2; 3,4,5; 6,7,8];
imagesc(x)
axis square
axis off
所以输出结果是这样的:

当某些值超过最大值时,情况就变成这样:
x = [0,1,2; 3,4,5; 6,7,18];
这看起来是合理的,但在我们想比较或追踪两个图中的元素时就会出现问题。因为颜色图的关联发生了变化,几乎不可能找到单独的单元格进行比较或追踪等操作。

我实现的解决方案是对矩阵进行掩码处理,如下所示:
x = [0,1,2; 3,4,5; 6,7,18];
m = 8;
x(x>=m) = m;
这个方法效果很好。
不过,由于提供的代码需要进行搜索和过滤(这会消耗额外的时间!),我在想有没有更通用/更高效的方法可以在Matlab、Python等中实现?
这个问题出现的一个情况是,当我们有很多连续的模拟,并希望制作一个有意义的进度动画时;在这种情况下,每种颜色应该保持固定的关联。
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()
这里的vmin
和vmax
是用来设置颜色图的范围限制的。
2
索引速度很快,所以我觉得你不用担心这个。
不过,在Matlab中,你可以给imagesc
函数传入clims
这个参数:
imagesc(x,[0 8]);
这个参数的作用是把所有大于8的值映射到颜色条的最上面,把所有小于0的值映射到颜色条的最下面,然后把中间的颜色范围拉伸。