我正在创建一个等高线图,其中V值的列表作为x轴,T值的列表作为y轴(V和T值是小数点后两位的浮点数,但所有当然排序)。我创建了一个数据矩阵,并在其中填充了与V-T坐标相关的数据。
如果有帮助,那么轮廓图将如下所示:
我正在尝试覆盖format_coord方法,以便在光标移动时也显示数据以及x-y(V-T)坐标
我无法在此处发布所有代码,但以下是相关部分:
fig= Figure()
a = fig.add_subplot(111)
contour_plot = a.contourf(self.pre_formating[0],self.pre_formating[1],datapoint) #Plot the contour on the axes
def fmt(x, y):
'''Overrides the original matplotlib method to also display z value when moving the cursor
'''
V_lst = self.pre_formating[0] #List of V points
T_lst = self.pre_formating[1] #List of T points
Zflat = datapoint.flatten() #Flatten out the data matrix
print 'first print line'
# get closest point with known v,t values
dist = distance.cdist([x,y],np.stack([V_lst, T_lst],axis=-1))
print 'second print line'
closest_idx = np.argmin(dist)
z = Zflat[closest_idx]
return 'x={x:.5f} y={y:.5f} z={z:.5f}'.format(x=x, y=y, z=z)
a.format_coord = fmt
上面的代码不起作用(当我移动光标时,什至没有显示x,y值。“第一条打印线”被打印,但是“第二条打印线”没有被打印,所以我认为问题出在是“ dist”行)。
但是当我将'dist'行更改为
dist = np.linalg.norm(np.vstack([V_lst - x, T_lst - y]), axis=0)
对于37x37矩阵,一切正常(显示x,y,数据),但对于37x46矩阵(37T,46V)却无效,我也不知道为什么。 我应该怎么做才能使代码正常工作? 谢谢您的帮助!
答案 0 :(得分:0)
大家好,我发现了如何解决这个问题,以防有人需要。有两个问题: 1 /在生成V,T坐标列表时我错了 2 / distance.cdist需要2d数组形式的所有内容。 所以这是最终的解决方案:
def fmt(x, y):
'''Overrides the original matplotlib method to also display z value when moving the cursor
'''
V_lst = self.pre_formating[0] #List of V points
T_lst = self.pre_formating[1] #List of T points
coordinates = [[v,t] for t in T_lst for v in V_lst] # List of coordinates (V,T)
Zflat = datapoint.flatten() #Flatten out the data matrix
# get closest point with known v,t values
dist = distance.cdist([[x,y]],coordinates)
closest_idx = np.argmin(dist)
z = Zflat[closest_idx]
return 'x={x:.5f} y={y:.5f} z={z:.5f}'.format(x=x, y=y, z=z)