2016-10-03 2 views
3

Я обнаружил, что последнее обновление для python/matplotlib нарушило важную функцию, а именно, возможность регулярного обновления или «обновления» графика matplotlib во время выполнения кода. Ниже приведен минимальный (не) рабочий пример.Обновление графика matplotlib во время выполнения кода

import numpy as np 
from matplotlib.pyplot import * 
from time import sleep 

x = np.array([0]) 
y = np.array([0]) 

figure() 
for i in range(51): 
    gca().cla() 
    plot(x,y) 
    xlim([0,50]) 
    ylim([0,2500]) 
    draw() 
    show(block = False) 
    x = np.append(x,[x[-1]+1]) 
    y = np.append(y,[x[-1]**2]) 
    sleep(0.01) 

Если я запускаю эту программу, используя Python 3.4.3 и 1.4.3 Matplotlib, я вижу сюжет постоянно обновлять, и кривая растет как работает программа. Однако, используя Python 3.5.1 с matplotlib 1.5.3, открывается окно matplotlib, но не отображает график. Вместо этого он постоянно показывает, что окно «не отвечает» и представляет только окончательный график, когда код заканчивает выполнение.

Что я могу сделать по этому поводу? Есть ли способ достичь функциональности, которую я хочу использовать в последней версии?

Примечание: Я использую это из среды IDLE по умолчанию, если это имеет значение.

+0

Вы пробовали эту линию между вашими импортными: '% matplotlib inline'? – estebanpdl

+0

@estebanpdl Мне кажется, что команда предназначена для использования в ipython, чтобы заставить график появиться внутри командного окна. Я не думаю, что это то, что я ищу. – zephyr

ответ

0

Это интересно. Я привык рисовать интерактивные земельные наделы немного иначе:

import numpy as np 
import matplotlib.pyplot as plt 
from time import sleep 

x = np.array([0]) 
y = np.array([0]) 

plt.ion() 
fig = plt.figure() 
ax=fig.add_subplot(111) 
ax.set_xlim([0,50]) 
ax.set_ylim([0,2500]) 
line, = ax.plot(x,y) 
plt.show() 
for i in range(51): 
    x = np.append(x,[x[-1]+1]) 
    y = np.append(y,[x[-1]**2]) 
    line.set_data(x,y) 
    plt.draw() 
    sleep(0.01) 

Может ли вы (или кто) проверить, если это показывает одни и те же проблемы в Matplotlib 1.5?

+0

Да, это будет работать и для меня, и в 1.4. «Показать» у меня в конце не является строго необходимым, и это действительно нужна команда «ничья», но я держу ее там, потому что она ничего не болит. Единственное отличие - «ион», который я нашел, на самом деле ничего не помогает. – zephyr

+0

Вопрос, если он работает в Matplotlib 1.5?! – ImportanceOfBeingErnest

Смежные вопросы