在matplotlib

时间:2016-08-10 09:24:57

标签: python matplotlib

我有三个带有数据的2D数组,我想将它们组合成一个图像 使用三种不同的色彩图。我目前的做法不起作用:

  1. 规范化数组
  2. 应用将每个元素/像素转换为4(RGBA)
  3. 数组的色彩映射
  4. 将三个结果数组平均为混合机制
  5. 显示结果
  6. 结果不是具有四个彩色区域的图像,而是我不理解的图像。我把我的代码剪切成了希望显示问题的东西。

    有人能告诉我什么是错的吗? 谢谢。

    更新

    一个严重的错字搞砸了结果(ax.imshow(res [0],...而不是ax.imshow(res,...)。结果现在是我的预期。

    混合问题由Emilien解决,给出了正确的方法"获得最小值。

    右上角是"黄色",可能需要创建我自己的彩色地图,一面有真正的白色。

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib import cm
    
    def normalise(v):
        m=np.amax(v)
        if m==0:
           return v
        return v/m
    
    # three arrays
    myarray0 = [[2,2],[0,0]]
    y0 = normalise(myarray0)
    myarray1 = [[3,0],[6,0]]
    y1 = normalise(myarray1)
    myarray2 = [[0,0],[8,0]]
    y2 = normalise(myarray2)
    
    # mapping
    cmap0 = cm.RdPu
    m0 = cm.ScalarMappable(cmap=cmap0)
    im0 = m0.to_rgba(y0)
    cmap1 = cm.PuBu
    m1 = cm.ScalarMappable(cmap=cmap1)
    im1 = m1.to_rgba(y1)
    cmap2 = cm.YlGn
    m2 = cm.ScalarMappable(cmap=cmap2)
    im2 = m2.to_rgba(y2)
    
    # blending
    # res=(np.array(im0) + np.array(im1) + np.array(im2)) / 3
    # getting the minimum, as suggested by Emilien:
    res = reduce(np.minimum, [np.array(im0), np.array(im1), np.array(im2)])
    
    # showing
    fig = plt.figure(1)
    ax = fig.add_subplot(1, 1, 1)
    ax.imshow(res, interpolation='bilinear',
              origin='lower', extent=[0,3,0,3])
    plt.show()
    

0 个答案:

没有答案