하나의 플롯에 여러 데이터 세트를 플롯해야합니다. 하나 이상의 플롯을 비교하기 위해 하나 이상의 플롯을 강조 표시하는 것이 유용합니다. 이를 위해 라인을 직접 선택하거나 범례에서 해당 항목을 클릭 할 때 플롯의 선 스타일을 ":"
(배경 그림)과 "-"
(플롯으로 강조 표시) 사이에서 전환합니다.범례가 축 외부에있는 경우 마우스 클릭시 더블 이벤트가 등록됩니다.
bbox_to_anchor
을 사용하여 축을 벗어난 범례를 움직이기 전까지는 완벽하게 작동합니다. 그런 다음 범례 선을 한 번 클릭하면 두 번의 클릭 이벤트가 연속적으로 트리거되어 토글 효과를 취소합니다.
pick_event의 올바른 동작을 유지하면서 범례를 축 외부에 배치하려면 어떻게해야합니까?
줄거리를 클릭하면 플롯 선을 클릭하면 '강조 표시'와 '강조 표시되지 않음'사이를 토글하는 반면, 범례 선을 클릭하면 작전 표시 줄이 잠시 전환되어 이전 상태로 돌아갑니다.
import pylab
import numpy
# Create data for plotting
t = numpy.linspace(0, 1.0, 100)
a = numpy.sin(2*numpy.pi*t)
# Set up figure
fig = pylab.figure()
ax = pylab.subplot(111)
# Plot figures
lines = []
for i in range(5):
line = ax.plot(t, (i+1)*a, linestyle=':', picker=5, label='line%d'%(i+1))
lines.append(line[0]) # Save plot lines
# Create legend
leg = ax.legend(bbox_to_anchor=(1.01, 1), loc=2) # Does not work as expected
# leg = ax.legend() # Works!!
# Get legend lines
leglines = leg.get_lines()
# Set event for legend lines
for line in leglines:
line.set_picker(5)
# Create a 2 way mapping between legend lines <-> plot lines
line2leg = dict(zip(lines+leglines, leglines+lines))
# Define event function
def onpick(event):
thisline = event.artist
if thisline.get_linestyle()==':':
print ": -> -" # For debugging
thisline.set_linestyle('-')
line2leg[thisline].set_linestyle('-')
else:
print "- -> :" # For debugging
thisline.set_linestyle(':')
line2leg[thisline].set_linestyle(':')
fig.canvas.draw()
# connect event function
fig.canvas.mpl_connect('pick_event', onpick)
pylab.show()
호기심입니다.같은 픽업 이벤트가 두 번 처리되는 것처럼 보이지 않습니다. 두 이벤트를 생성하는 것이 아니라, 이것이 버그라고 생각하게합니다. – tacaswell
@tcaswell 동일한 픽업 이벤트인지 아니면 같은 종류의 2 개인지를 어떻게 알 수 있습니까? 이벤트가 생성됩니까? – Dhara
'onpick'에'print event' 라인을 추가하면 인쇄 할 때 같은 메모리 주소를가집니다. – tacaswell