在matplotlib中使用colormaps混合arraydata

2024-06-16 23:06:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有三个二维数组的数据,我想合并成一个图像 使用三种不同的颜色图。我目前的方法行不通:

  1. 使数组正规化
  2. 应用colormap将每个元素/像素转换为4个数组(RGBA)
  3. 平均生成的三个数组作为混合机制
  4. 呈现结果

结果不是一张有四种颜色区域的图像,而是一些我不理解的东西。我把我的代码缩减成一些有希望显示问题的代码。在

有人能告诉我怎么了吗? 非常感谢。在

更新

一个严重的错误把结果搞砸了(ax.imshow公司(回复[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()

Tags: toimportasnpcmresplt数组