Подтвердить что ты не робот

Matplotlib python show() немедленно возвращается

У меня есть простой python script, который отображает некоторые графики на том же рисунке. Все графики создаются с помощью draw(), и в конце я вызываю функцию show() для блокировки.

script используется для работы с Python 2.6.6, Matplotlib 0.99.3 и Ubuntu 11.04. Пытался запустить его под Python 2.7.2, Matplotlib 1.0.1 и Ubuntu 11.10, но функция show() немедленно возвращается, не дожидаясь, чтобы убить фигуру.

Это ошибка? Или новая функция, и нам придется менять наши скрипты? Любые идеи?

РЕДАКТИРОВАТЬ:. Он держит график открытым в интерактивном режиме, т.е. python -i..., но он работал без этого и пытался использовать plt.ion() в script и запустить его в обычном режиме, но не повезло.

4b9b3361

Ответ 1

У меня была такая же проблема, и она была вызвана вызовом show() объекта Figure вместо объекта pyplot.

Неверный код. Заставляет график мгновенно мигать на экране:

    import matplotlib.pyplot as plt

    x = [1,2,3]
    y = [5,6,7]

    fig = plt.figure()
    plt.plot(x, y)

    fig.show()

Последняя строка должна быть следующей, чтобы отобразить график до его отклонения:

    plt.show()

Ответ 2

Я думаю, что использование show(block=True) должно устранить вашу проблему.

Ответ 3

Имела обратная проблема, и кажется, что matplotlib будет работать в интерактивном или неинтерактивном режиме, основываясь на ряде вещей, которые я не мог отслеживать (один способ в IDLE, другой в системной консоли, один путь в обычной консоли spyder, другой в выделенном...)

Это сработало для меня:

import matplotlib
matplotlib.interactive(False)

(На самом деле мне нужен интерактивный режим, но в вашем случае обратный должен помочь.) ion() и ioff() должны делать то же самое, но выше на уровне matplotlib, а не только на pyplot или pylab. Это работает для меня, хотя я (позже) импортирую pyplot отдельно и никогда не называю matplotlib как таковой снова. Я думаю, что plt.ion() влияет только на pyplot, а не на другие компоненты matplotlib, которые могут или не могут быть задействованы при использовании pyplot.

Этот метод работает для меня в Windows 7, используя оба Python 2.65 с matplotlib 0.99 и Python 2.75 с matplotlib 1.3.1, на всех доступных консолях python и IDE на обеих системах (64-разрядные, оба из них). Однако он не работал в Linux (SuSe 11.3, 64 бит), поэтому определенная зависимость от платформы здесь играет здесь.

Ответ 4

Чтобы воспроизвести поведение matplotlib.show() с бэкэндом tkagg при вызове show() на объекте Figure:

import Tkinter as Tk
import matplotlib.pyplot as plt
fig = plt.figure()
... your plot commands...
fig.show()
Tk.mainloop()