2012-04-09 30 views
4

当我绘制contourf的东西时,我会在绘图窗口的底部看到鼠标光标下的当前x和y值。 有没有办法看到z值?matplotlib contourf:在光标下获取Z值

下面的例子contourf

import matplotlib.pyplot as plt 
import numpy as hp 
plt.contourf(np.arange(16).reshape(-1,4)) 

回答

2

documentation example展示了如何插入z值标签到您的情节

脚本:http://matplotlib.sourceforge.net/mpl_examples/pylab_examples/contour_demo.py

基本上,它是

plt.figure() 
CS = plt.contour(X, Y, Z) 
plt.clabel(CS, inline=1, fontsize=10) 
plt.title('Simplest default with labels') 
+0

感谢,这是有益的,但我是问的Z值的光标下的实时显示,同样因为它已经存在于X和Y. – 2012-04-11 18:05:21

+0

你不能,那是wxWidgets接口的一部分。如果您编写自己的用户界面,可以获取x/y坐标,将它们转换为坐标轴上的x/y坐标。既然你从plt.contour得到了轮廓,你就知道它们的轮廓,并且可以得到那个坐标处或附近的轮廓。 – j13r 2012-04-11 18:22:21

+0

@AndreaZonca你确定这是你还想接受的答案吗? [wilywampa](http://stackoverflow.com/users/752720/wilywampa)最近的[解决方案](http://stackoverflow.com/a/42054903/2749397)完全符合你的要求。 。 – gboffi 2017-02-05 17:42:24

4

显示位置的文字游标的n由ax.format_coord生成。您可以覆盖该方法以显示z值。例如,

import matplotlib.pyplot as plt 
import numpy as np 
import scipy.interpolate as si 
data = np.arange(16).reshape(-1, 4) 
X, Y = np.mgrid[:data.shape[0], :data.shape[1]] 
cs = plt.contourf(X, Y, data) 


def fmt(x, y): 
    z = np.take(si.interp2d(X, Y, data)(x, y), 0) 
    return 'x={x:.5f} y={y:.5f} z={z:.5f}'.format(x=x, y=y, z=z) 


plt.gca().format_coord = fmt 
plt.show() 
+0

它可以工作,但由于插值对于大型数据集来说也很慢(在我的情况下,它不适用于100x100网格)。 – levesque 2018-03-02 17:07:31

0

只是wilywampa的答案的变种。如果您已经有了预先计算的插值轮廓值网格,因为您的数据很稀疏或者如果您有一个巨大的数据矩阵,这可能适合您。

import matplotlib.pyplot as plt 
import numpy as np 

resolution = 100 
Z = np.arange(resolution**2).reshape(-1, resolution) 
X, Y = np.mgrid[:Z.shape[0], :Z.shape[1]] 
cs = plt.contourf(X, Y, Z) 

Xflat, Yflat, Zflat = X.flatten(), Y.flatten(), Z.flatten() 
def fmt(x, y): 
    # get closest point with known data 
    dist = np.linalg.norm(np.vstack([Xflat - x, Yflat - y]), axis=0) 
    idx = np.argmin(dist) 
    z = Zflat[idx] 
    return 'x={x:.5f} y={y:.5f} z={z:.5f}'.format(x=x, y=y, z=z) 

plt.colorbar() 
plt.gca().format_coord = fmt 
plt.show() 

例:

Example with mouse cursor