Python / Matplotlib 1.0.1 не открывает новую фигуру при нажатии - PullRequest
2 голосов
/ 24 февраля 2012

У меня проблема с Matplotlib 1.0.1

Я создаю фигуру, и я использую событие onclick, чтобы делать вещи, когда нажимаю на фигуру. Одна вещь состоит в том, что это должно создать новую фигуру с новыми данными в этом. Это прекрасно работает в Matplotlib 0.99.3, где я разработал сценарий, но теперь коллега попробовал его на своем компьютере, на котором установлен matplotlib 1.0.1 (и python 2.6 вместо 2.7), и этот рисунок не показан.

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

Вот простой пример кода:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

a = [1,2,3]
b = [4,2,9]

line = ax.plot(a,b)

def onclick(event):
    print "clicked"
    a = [7,8,9]
    b = [1,9,20]
    fig2 = plt.figure()
    ax_single = fig2.add_subplot(111)
    line2 = ax_single.plot(a,b)

cid = fig.canvas.mpl_connect('button_press_event',onclick)
plt.show()

Это (известная) ошибка в matplotlib 1.0.1? Есть ли способ обойти это?

Thx.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Добавление простого fig2.show () помогло мне. Прочтите How-to , чтобы получить больше информации!

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

a = [1,2,3]
b = [4,2,9]

line = ax.plot(a,b)

def onclick(event):
    print "clicked"
    a = [7,8,9]
    b = [1,9,20]
    fig2 = plt.figure()
    ax_single = fig2.add_subplot(111)
    line2 = ax_single.plot(a,b)
    fig2.show()

cid = fig.canvas.mpl_connect('button_press_event',onclick)
plt.show()

Действительно, в 1.0.0 изменилось то, как matplotlib обрабатывает цифры после запуска основного цикла.

0 голосов
/ 24 февраля 2012

Вы можете перевести Pyplot в интерактивный режим в начале:

plt.ion()

, а затем завершить свою программу, например,

raw_input('Press enter when done...')

(вместо show()).

Семантика show() и интерактивного режима были обновлены с помощью Matplotlib 1.0.Вы можете получить больше информации об этом в StackOverflow: Точная семантика "интерактивного режима" Matplotlib (ion (), ioff ())? .Я понимаю, что использование интерактивного режима (ion) обычно более удобно.Другим важным моментом является то, что в интерактивном режиме только функции pyplot.* автоматически рисуют / перерисовывают графики (а не методы <object>.*()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...