【问题标题】:Matlab, Python: Fixing colormap to specified valuesMatlab,Python:将颜色图固定为指定值
【发布时间】:2012-01-30 10:42:18
【问题描述】:

在尝试根据 2D 值矩阵修复颜色图时,这是一项简单但常见的任务。 为了演示考虑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 等?

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

【问题讨论】:

    标签: python matlab masking color-mapping


    【解决方案1】:

    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 中,您可以将 clims 参数传递给 imagesc

      imagesc(x,[0 8]);
      

      这会将所有高于 8 的值映射到色阶中的顶部颜色,并将所有低于 0 的值映射到色阶中的底部颜色,然后拉伸中间颜色的比例。

      imagesc documentation.

      【讨论】:

        【解决方案3】:
        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)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-13
          • 2014-01-03
          • 1970-01-01
          • 2023-04-04
          • 1970-01-01
          • 2013-08-12
          • 1970-01-01
          • 2020-11-08
          相关资源
          最近更新 更多