2017-03-02 3 views
1

내 산점도에서 점을 누르면 값을 표시 할 수있게하려고합니다. Possible to make labels appear when hovering over a point in matplotlib?python matplotlib - 이벤트 및 mpl_connect

솔루션 :이 솔루션은 여기에서 발견 된

from matplotlib.pyplot import figure, show 
import numpy as npy 
from numpy.random import rand 


# picking on a scatter plot (matplotlib.collections.RegularPolyCollection) 

x, y, c, s = rand(4, 100) 
def onpick3(event): 
    ind = event.ind 
    print 'onpick3 scatter:', ind, npy.take(x, ind), npy.take(y, ind) 

fig = figure() 
ax1 = fig.add_subplot(111) 
col = ax1.scatter(x, y, 100*s, c, picker=True) 
#fig.savefig('pscoll.eps') 
fig.canvas.mpl_connect('pick_event', onpick3) 

쇼()

을 그리고 그것은 내 문제를 해결했다. 그러나 나는 어떻게, 나는 어떤 행운도없이 주변에서 인터넷 검색을 해왔다 이해하지 않는다. matplotlib로 줄거리를 만드는 방법을 알고 있으므로 내 지식이 부족하지 않습니다.

내가 이해할 수없는 한 가지는 onpick3(event) 기능입니다. 이 이벤트 매개 변수는 무엇입니까? 주어진 인자없이 함수 자체가 더 내려와 호출되기 때문에 : fig.canvas.mpl_connect('pick_event', onpick).

답변

0

mpl_connect은 신호를 슬롯에 연결합니다. 이 경우 슬롯은 onpick3입니다. the syntax은 즉 슬롯이 호출되지
참고

fig.canvas.mpl_connect('pick_event', onpick3)
하지 신호가 트리거되면 그것은에만 호출됩니다
fig.canvas.mpl_connect('pick_event', onpick3())

는 (마우스가 캔버스를 클릭). 이 시점에서 함수 호출에서 기본 event이 인수로 제공됩니다.

인수없이 슬롯을 정의하려고하면 나타납니다. 이로 인해 onpick3 expects 0 arguments but got 1 정도의 오류가 발생합니다.

matplotlib event handling 페이지에서 자세한 내용을 확인할 수 있습니다. event 그 자체는 matplotlib.backend_bases.PickEvent의 인스턴스입니다. .ind 속성은 잘 문서화되어 있지 않지만, 이는 모든 아티스트가 실제로이 속성을 이벤트에 등록하지 않았기 때문입니다.

+0

차갑게 설명해 주셔서 감사합니다. 물건을 조금 더 분명하게했다! 하지만 event.ind는 어떨까요? 받은 인수 나 그 속성의 속성을 찾았습니까? 그리고 그것이 무엇을 나타내는가? – AltoBalto

+0

예'ind'는'event' 클래스의 속성입니다. 업데이트 답변보기 – ImportanceOfBeingErnest