具有多轴问题的可拖动图例

Posted

技术标签:

【中文标题】具有多轴问题的可拖动图例【英文标题】:Draggable legend with multiple axes problem 【发布时间】:2011-07-22 09:39:07 【问题描述】:

我想知道是否有人可以解决我在将可拖动图例与多个轴结合使用时遇到的问题。

我正在使用 gridspec 和 figure(matplotlib 1.0.1,qt4 后端)来创建 2 个轴 - 没有 pyplot。当图例从一个轴拖到另一个轴并释放时,它的可拖动性停止工作。

如果图例的一部分在轴的边界之外,则可以通过单击该部分来拾取图例,但如果在轴内的图例的任何区域上单击鼠标则不能。

我尝试了Adam Fraser’s original code,但图例会滑到我的应用程序的第二个轴下。

我的应用程序确实很大 - 太大而无法在此处显示,为了说明问题,我修改了 Matplotlib Legend Guide 中的一些代码(使用 pyplot),如下所示:

from matplotlib.pyplot import *

subplot(211)
plot([1,2,3], label="test1")
plot([3,2,1], label="test2")
leg=legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3,
           ncol=2, mode="expand", borderaxespad=0.)
leg.draggable(state=True, use_blit=True)

subplot(223)
plot([1,2,3], label="test1")
plot([3,2,1], label="test2")
leg=legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
leg.draggable(state=True, use_blit=True)

show()

它会生成一个带有几个轴和两个图例的图。

运行代码,左右拖动图例看看效果(如果没有问题,一定是我吃的东西,我道歉)。

我怀疑一个解决方案可能相当低级,但谁知道呢,也许这是一个简单的修复?

感谢您的帮助。

【问题讨论】:

+1 描述是正确的。没有答案。 【参考方案1】:

我重现了这个问题。进入外星人图形的图例部分变得不可点击,好像该图形将捕获鼠标位置事件而不将它们重新发送给其他处理程序。

重现问题的最少代码(用 ipython -pylab 进行实验)是:

In [16]: f211 = plt.subplot(211)
In [17]: f212 = plt.subplot(212)
In [18]: p1 = plot([1,2], label="test1")
In [20]: leg = legend(loc=(0.5,0.5))
In [21]: d = leg.draggable(state=True, use_blit=True)

【讨论】:

以上是关于具有多轴问题的可拖动图例的主要内容,如果未能解决你的问题,请参考以下文章

具有多个断点的可拖动线

React - 具有输入的可拖动组件在单击该输入时失去焦点的能力

matplotlib中具有不同比例的多轴[重复]

Plotly 可移动/可拖动图例,python

iOS 相机应用程序中的可拖动 UIButtons

Matplotlib Legend 中的自定义艺术家