Перетаскиваемая легенда с проблемой нескольких осей - PullRequest
1 голос
/ 24 марта 2011

Мне интересно, есть ли у кого-нибудь решение проблемы, с которой я сталкиваюсь при использовании перетаскиваемой легенды в сочетании с несколькими осями.

Я использую gridspec и figure (matplotlib 1.0.1, qt4 backend) для создания 2 осей - без pyplot.Когда легенда перетаскивается с одной оси на другую и освобождается, ее перетаскивание перестает работать.

Если часть легенды находится за пределами оси, легенда может быть выбрана нажатием на эту часть, но не при щелчке мышью в какой-либо области легенды внутри оси.

Я пытался оригинальный код Адама Фрейзера , но легенда проскальзывала под вторыми осями в моем приложении.

Мое приложение действительно довольно большое - слишком большое, чтобы показать его здесь, поэтому, чтобы проиллюстрировать проблему, я модифицировал код из Matplotlib Legend Guide (использует pyplot) следующим образом:1013 *

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 голосов
/ 28 ноября 2011

Я воспроизвел проблему. Часть легенды, которая входит в фигуру пришельца, становится не щелкаемой, как если бы фигура ловила события положения мыши и не пересылала их другим обработчикам.

Минимальный код, который воспроизводит проблему (для эксперимента с 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)
...