2016-04-05 27 views
0

Zamanla güncellenen ve program yürütülmesini engellemeyen bir MatPlotLib.PyPlot grafiği çizmek istiyorum. Güncellenen her seferinde kullanıcının yeni grafiği görüntülemek için bir tuşa basması gerekmiyor.Yürütmeyi engellemeden bir MatPlotLib grafiğini görüntüleme ve güncelleştirme

İstediğim şey için plt.show(block=False)'un gerekli olduğuna inanıyorum. Ancak, kodum istediği gibi çalışmıyor.

import matplotlib.pyplot as plt 
import time 

def ShowGraph(): 
    n = 2 
    while True: 
    x = [i for i in range(n)] 
    y = [i for i in range(n)] 
    plt.plot(x, y, 'r-') 
    plt.ylim([0, 10]) 
    plt.xlim([0, 10]) 
    plt.show(block=False) 
    time.sleep(1) 
    n += 1 

ShowGraph() 

Bu, her zaman süreleri uzuyor kırmızı çizgi ile, yeni bir grafiktir her saniye çizmek gerekir:

İşte benim kodudur. Ancak, tüm bu gösteriler, ilk aramanın ardından plt.show()'a yapılan grafiktir. Neyi yanlış yapıyorum?

cevap

1

Kodunuzu olduğu gibi denediğimde, sonsuz bir döngüde kaldım. Bu yüzden, çalışmanızı sağlamak için kodunuzu biraz değiştirdim.
Temel olarak, döngünüzün ilk yinelemesinden sonra plt.draw() kullanarak grafiğinizi güncellemeniz gerekir. plt.show(), etkileşimli olmayan modda yalnızca grafiği olduğu gibi gösterir, block=False ile bile güncellemez. Rakamı güncellemek için hala plt.draw()'a ihtiyacınız var.

import matplotlib.pyplot as plt 
import time 

def ShowGraph(): 
    n = 2 
    j = 1 
    while j <= 10: 
     x = [i for i in range(n)] 
     y = [i for i in range(n)] 
     plt.plot(x, y, 'r-') 
     plt.ylim([0, 10]) 
     plt.xlim([0, 10]) 
     if j > 1: 
      plt.draw() 
     else: 
      plt.show(block=False) 
     time.sleep(1) 
     n += 1 
     j += 1 

ShowGraph()