多个轴的可拖动图例问题
我想知道有没有人能帮我解决一个问题,就是在使用可拖动的图例和多个坐标轴时遇到的麻烦。
我在用 gridspec 和 figure(matplotlib 1.0.1,qt4 后端)来创建两个坐标轴,没有用 pyplot。当我把图例从一个坐标轴拖到另一个坐标轴并放开时,图例就不能再拖动了。
如果图例的一部分在坐标轴的边界外,我可以通过点击那部分来抓住图例,但如果鼠标点击的是坐标轴内的图例区域,就无法抓住了。
我试过 Adam Fraser 的原始代码,但在我的应用中,图例会滑到第二个坐标轴下面。
我的应用程序其实非常大,太复杂了不能在这里展示,所以为了说明问题,我修改了一些来自 Matplotlib 图例指南(使用 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
我复现了这个问题。图例中与外星图形重叠的部分变得无法点击,就好像这个图形在捕捉鼠标的位置事件,而没有把这些事件转发给其他处理程序。
下面是复现这个问题的最简单代码(可以在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)