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

时间:2011-03-24 19:00:39

标签: python qt4 matplotlib legend

我想知道是否有人在使用可拖动的图例和多个轴时遇到问题的解决方案。

我正在使用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 个答案:

答案 0 :(得分:0)

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

重现问题的最小代码(试验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)