如何在matplotlib中创建可拖动的图例?

如何在matplotlib中创建可拖动的图例?,第1张

如何在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.legend.parent.transAxes.inverted().transform_point(loc_in_canvas) self.legend._loc = tuple(loc_in_norm_axes) self.legend.figure.canvas.draw()    def my_legend_picker(self, legend, evt):         return self.legend.legendPatch.contains(evt)    def on_pick(self, evt):         if evt.artist == self.legend: bbox = self.legend.get_window_extent() self.mouse_x = evt.mouseevent.x self.mouse_y = evt.mouseevent.y self.legend_x = bbox.xmin self.legend_y = bbox.ymin  self.gotLegend = 1    def on_release(self, event):        if self.gotLegend: self.gotLegend = False

…以及您的代码中…

def draw(self):     ax = self.figure.add_subplot(111)    scatter = ax.scatter(np.random.randn(100), np.random.randn(100))legend = DraggableLegend(ax.legend())

我给Matplotlib-users组发送了电子邮件,John Hunter很好,可以将我的解决方案添加到SVN HEAD中。

2010年1月28日星期四,下午3:02,亚当·弗雷泽(Adam Fraser)写道:

我以为我会分享一个可拖动的图例问题的解决方案,因为它使我永远吸收了邮件列表中所有分散的知识…

很酷-很好的例子。我将代码添加到legend.py。现在你可以做

腿= ax.legend()
leg.draggable()

启用可拖动模式。您可以反复调用此功能来切换可拖动状态。

我希望这对使用matplotlib的人有所帮助。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5645811.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存