我有三个二维数组的数据,我想合并成一个图像 使用三种不同的颜色图。我目前的方法行不通:
结果不是一张有四种颜色区域的图像,而是一些我不理解的东西。我把我的代码缩减成一些有希望显示问题的代码。在
有人能告诉我怎么了吗? 非常感谢。在
更新:
一个严重的错误把结果搞砸了(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()
目前没有回答
相关问题 更多 >
编程相关推荐