我正在matplotlib中的轴对象上绘制图例,但是声称将其放置在智能位置的默认位置似乎不起作用。理想情况下,我希望图例可由用户拖动。如何才能做到这一点?
参考方案
注意:现在已内置到matplotlib中
leg = plt.legend()
if leg:
leg.draggable()
将按预期工作
好吧,我发现解决方案的点点滴滴分散在邮件列表中。我提出了一个很好的模块化代码块,您可以插入并使用...在这里:
class DraggableLegend:
def __init__(self, legend):
self.legend = legend
self.gotLegend = False
legend.figure.canvas.mpl_connect('motion_notify_event', self.on_motion)
legend.figure.canvas.mpl_connect('pick_event', self.on_pick)
legend.figure.canvas.mpl_connect('button_release_event', self.on_release)
legend.set_picker(self.my_legend_picker)
def on_motion(self, evt):
if self.gotLegend:
dx = evt.x - self.mouse_x
dy = evt.y - self.mouse_y
loc_in_canvas = self.legend_x + dx, self.legend_y + dy
loc_in_norm_axes = self.legen