Python matplotlib imshow-将矩阵用作y轴值
下面是我想做的一个非常简化的版本:Python matplotlib imshow-将矩阵用作y轴值,python,numpy,matplotlib,Python,Numpy,Matplotlib,下面是我想做的一个非常简化的版本: In [44]: data = np.array([[0]*3,[1]*3,[2]*3]) In [45]: data Out[45]: array([[0, 0, 0], [1, 1, 1], [2, 2, 2]]) In [46]: xaxis = np.array([0,1,2]) In [47]: yaxis = np.array([[0,0.1,0.4],[1.1,1.6,1.9],[2.3,2.6,4]]) I
In [44]: data = np.array([[0]*3,[1]*3,[2]*3])
In [45]: data
Out[45]:
array([[0, 0, 0],
[1, 1, 1],
[2, 2, 2]])
In [46]: xaxis = np.array([0,1,2])
In [47]: yaxis = np.array([[0,0.1,0.4],[1.1,1.6,1.9],[2.3,2.6,4]])
In [48]: yaxis
Out[48]:
array([[ 0. , 0.1, 0.4],
[ 1.1, 1.6, 1.9],
[ 2.3, 2.6, 4. ]])
我想使用网格中的yaxis值制作一个imshow图。数据中的每个数据值都是与其在yaxis网格中的等效位置相关联的强度值我认为y轴必须扩展,在这种情况下,扩展到41像素。然后创建维度为3,41的新数组data2。这是由转换到新y轴的xaxis和yaxis位置的数据中给定的值填充的。数据2可通过imshow绘制。这不是一个真正简单的解决方案
data = np.array([[0]*3,[1]*3,[2]*3])
xaxis = np.array([0,1,2])
yaxis = np.array([[0,0.1,0.4],[1.1,1.6,1.9],[2.3,2.6,4]])
# expand the y-axis to 4/0.1 = 40 in this case
ydim = int(np.max(yaxis)/np.min(yaxis[where(yaxis!=0.)])) + 1
# create new data array of size (len(xaxis), ydim)
data2 = np.zeros((len(xaxis), ydim))
# fill the new data array according to the values given in data at the positions specified in xaxis and yaxis
for i in xaxis:
for nr, j in enumerate(yaxis[i]):
data2[i,int(j*10)] = data[i, nr]
# use interpolation='nearest' to clarify the behaviour and extent x-axis to 40
imshow(data2, extent = (0, ydim-1, ydim-1, 0), interpolation='nearest')
show()