Eu tenho jogado com Numpy e matplotlib nos últimos dias. Estou tendo problemas ao tentar fazer do matplotlib plot uma função sem bloquear a execução. Eu sei que já existem muitos tópicos aqui no SO, fazendo perguntas semelhantes, e eu pesquisei bastante no Google, mas não consegui fazer isso funcionar.
Eu tentei usar show (block = False) como algumas pessoas sugerem, mas tudo o que recebo é uma janela congelada. Se eu simplesmente chamar show (), o resultado será plotado corretamente, mas a execução será bloqueada até que a janela seja fechada. De outros tópicos que li, suspeito que o show (block = False) funcione ou não, dependendo do back-end. Isso está correto? Meu back-end é Qt4Agg. Você poderia dar uma olhada no meu código e me dizer se vê algo errado? Aqui está o meu código. Obrigado por qualquer ajuda.
from math import *
from matplotlib import pyplot as plt
print plt.get_backend()
def main():
x = range(-50, 51, 1)
for pow in range(1,5): # plot x^1, x^2, ..., x^4
y = [Xi**pow for Xi in x]
print y
plt.plot(x, y)
plt.draw()
#plt.show() #this plots correctly, but blocks execution.
plt.show(block=False) #this creates an empty frozen window.
_ = raw_input("Press [enter] to continue.")
if __name__ == '__main__':
main()
PS. Esqueci de dizer que gostaria de atualizar a janela existente toda vez que plotar algo, em vez de criar uma nova.
matplotlib
.
plt.ion()
antesplt.show()
? Em seguida, deve ser sem bloqueio, pois cada plot é gerado em um thread filho.