Функция Matplotlib ion() не может быть интерактивной
У меня проблема с интерактивной функцией Matplotlib. Я запустил следующую программу и получил замороженное пустое окно графика.
import matplotlib.pyplot as plt
import numpy as np
plt.ion()
x = np.arange(0, 4*np.pi, 0.1)
y = [np.sin(i) for i in x]
plt.plot(x, y, 'g-', linewidth=1.5, markersize=4)
plt.show()
Если я удалил оператор "plt.ion()", то он работал нормально. Я использую IDLE, а пакет Matplotlib версии 1.2.x установлен в Python 3.2.2.
Я ожидаю, что это будет интерактивным, но вместо этого я получил недружественное неинтерактивное окно. Может ли кто-то пролить некоторый свет на то, что мне не хватает? Заранее благодарю вас.
Ответы
Ответ 1
Я столкнулся с этой ссылкой, найденной здесь, которая отвечает на мою проблему.
Похоже, что после включения интерактивного режима через plt.ion()
, необходимо временно приостановить работу пенопласта, чтобы он обновил/перерисовал себя через plt.pause(0.0001)
. Вот что я сделал, и это работает!
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> plt.ion()
>>> x = np.arange(0, 4*np.pi, 0.1)
>>> y = [np.sin(i) for i in x]
>>> plt.plot(x, y, 'g-', linewidth=1.5, markersize=4)
>>> plt.pause(0.0001)
>>> plt.plot(x, [i**2 for i in y], 'g-', linewidth=1.5, markersize=4)
>>> plt.pause(0.0001)
>>> plt.plot(x, [i**2*i+0.25 for i in y], 'r-', linewidth=1.5, markersize=4)
>>> plt.pause(0.0001)
Если вы попробовали это в своей консоли IDLE, обратите внимание, что до этого момента все отображалось, за исключением того, что окно графика зависает и не может выйти. Чтобы разморозить его, введите следующее последнее утверждение
>>> plt.show(block=True)
Теперь окно можно закрыть.
Ответ 2
У меня такая же проблема. В ipython есть волшебство %matplotlib
, которое решило проблему для меня. По крайней мере, теперь я могу ввести plt.figure()
(предполагая, что import matplotlib.pyplot as plt
был вызван) и получить полностью интерактивную отзывчивую цифру.
Однако мне все равно было бы интересно узнать, что именно эта магия импортирует, чтобы понять проблему.