2017-02-13 35 views
1

Есть ли способ создать сюжет пошагово, показывая прогресс каждый раз, когда вызывается метод plt.show? Даже если игра с plt.show (block = False) или plt.show (block = True) не может заставить ее работать.matplotlib show in pydev

import matplotlib.pyplot as plt 

xvals = [i for i in range(0, 10)] 
yvals1 = [i**2 for i in range(0, 10)] 
yvals2 = [i**3 for i in range(0, 10)] 
yvals3 = [i**4 for i in range(0, 10)] 

f, ax = plt.subplots(1) 
ax.plot(xvals, yvals1) 

plt.show(block=False) 
raw_input("Program paused. Press Enter to continue...") 

ax.plot(xvals, yvals2) 
plt.show() # Need to close the window to go ahead. 
raw_input("Program paused. Press Enter to continue...") 

ax.plot(xvals, yvals3) 
plt.show(block=False) 
raw_input("Program paused. Press Enter to continue...") 

Я бегу matplotlib == 2.0.0 в virtualenv с Pydev. Любая идея?

+1

Возможно, информация в [этом ответе] (http://stackoverflow.com/a/12685979/3005167) может вам помочь. (т. е. попробуйте вызвать 'plt.ion()' в начале вашего скрипта). – kazemakase

+0

Помимо добавления plt.ion(), если я добавляю plt.pause (0.0001) после каждой команды plt.show(), это делает трюк. Но я не знаю, есть ли другой лучший способ. – fara

+1

Существует еще один способ: [анимация] (http://matplotlib.org/1.4.1/examples/animation/index.html). Какой способ лучше зависит от вашего варианта использования. Анимация более сложная, но может быть более надежной. Для «производственного» кода я, вероятно, сделаю это. Если вы хотите только визуализировать шаги своего кода, поскольку он работает во время разработки/отладки «быстрых и грязных» ударов «надежный и продуманный», на мой взгляд :) – kazemakase

ответ

0

Вы должны иметь возможность сделать это, если вы отпустите связанный цикл событий, чтобы пользовательский интерфейс мог обновляться пользователем (т. Е. На qt вам нужно было бы получить цикл событий и вызвать QEventLoop :: processEvents для него появляются).