Bawiłem się Numpy i matplotlib w ciągu ostatnich kilku dni. Mam problemy z utworzeniem funkcji wykresu matplotlib bez blokowania wykonywania. Wiem, że w SO jest już wiele wątków z podobnymi pytaniami, a ja sporo szukałem w Google, ale nie udało mi się tego zrobić.
Próbowałem użyć show (block = False), jak sugerują niektórzy, ale wszystko, co otrzymuję, to zamrożone okno. Jeśli po prostu wywołam show (), wynik zostanie poprawnie wykreślony, ale wykonanie zostanie zablokowane do momentu zamknięcia okna. Z innych wątków, które czytałem, podejrzewam, że to, czy show (blok = False) działa, czy nie, zależy od zaplecza. Czy to jest poprawne? Mój zaplecze to Qt4Agg. Czy mógłbyś rzucić okiem na mój kod i powiedzieć mi, czy coś jest nie tak? Oto mój kod. Dzięki za wszelką pomoc.
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. Zapomniałem powiedzieć, że chciałbym aktualizować istniejące okno za każdym razem, gdy coś wykreślam, zamiast tworzyć nowe.
plt.ion()
przedplt.show()
? Powinien wtedy być nieblokujący, ponieważ każdy wątek jest odradzany w wątku podrzędnym.