2012-12-06 152 views
1

这里是想我做的一个非常简化的版本:matplotlib imshow - 利用矩阵为y轴值

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. ]]) 

我想使用从该y轴值作出imshow()图格。 (“数据”中的每个数据值是与其在yaxis网格中的等同位置关联的强度值)

回答

0

我认为y-axis必须扩展,在这种情况下为41个像素。然后创建尺寸(3,41)的新阵列data2。用data中给出的值将xaxisyaxis转换为新的y轴。 data2可以通过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() 

created picture