2012-04-09 1 views
4

contourf으로 무엇인가를 플롯하면 플롯 창의 아래쪽에 마우스 커서 아래에 현재 x 및 y 값이 표시됩니다. z 값을 볼 수있는 방법이 있습니까? 여기에 예를 contourfmatplotlib contourf : 커서 아래에서 Z 값 얻기

:

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

덕분에,이 유용하지만,이 X와 Y 이미 존재하는 한 나는, 커서 아래 Z 값의 실시간 디스플레이에 대해 동일한 요청했다 –

+0

당신은 wxWidgets 인터페이스의 일부가 될 수 없습니다. 자신의 UI를 프로그래밍하면 x/y 좌표를 가져 와서 축의 x/y 좌표로 변환 할 수 있습니다. plt.contour에서 윤곽선을 얻었으므로 윤곽을 알고 해당 좌표 주위에있는 윤곽을 얻을 수 있습니다. – j13r

+0

@AndreaZonca이 답변이 여전히 받아 들여지고 싶습니까? [wilywampa] (http://stackoverflow.com/users/752720/wilywampa)의 가장 최근의 [솔루션] (http://stackoverflow.com/a/42054903/2749397) 정확히 무엇을 요구했습니다. – gboffi

4
입니다

positio를 표시하는 텍스트 커서의 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

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