我有三个带有数据的2D数组,我想将它们组合成一个图像 使用三种不同的色彩图。我目前的做法不起作用:
结果不是具有四个彩色区域的图像,而是我不理解的图像。我把我的代码剪切成了希望显示问题的东西。
有人能告诉我什么是错的吗? 谢谢。
更新:
一个严重的错字搞砸了结果(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()