2016-04-05 32 views
0

我想绘制一个随时间更新并且不会阻止程序执行的MatPlotLib.PyPlot图。我不希望用户每次更新时都必须按键才能显示新图。在不阻碍执行的情况下显示并更新MatPlotLib图

我相信plt.show(block=False)是我所需要的。但是,我的代码没有按照要求执行。

这里是我的代码:

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() 

这应该绘制新图每秒,与红线每次都变得越来越长。但是,所有显示的是第一次拨打plt.show()后的图表。我究竟做错了什么?

回答

1

当我按照原样尝试代码时,它陷入了无限循环。所以,我已经稍微修改了你的代码以使其工作。
主要是,您需要在循环的第一次迭代后使用plt.draw()更新图形。非交互模式下的plt.show()只显示图形,即使使用block=False也不会更新。你仍然需要plt.draw()来更新数字。

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() 
相关问题