多个轴的可拖动图例问题

1 投票
1 回答
701 浏览
提问于 2025-04-16 14:21

我想知道有没有人能帮我解决一个问题,就是在使用可拖动的图例和多个坐标轴时遇到的麻烦。

我在用 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)

撰写回答