2012-08-03 45 views
0

我試圖創建一個程序,它讀取一些隨機生成的數據,xax和yax列表,作爲繪圖它們生活,因爲它以動畫方式讀取它。下面是代碼:如何獲得一個實時更新圖形線

from matplotlib.pylab import * 
import time, random 

ion() 
xax = [] 
yax = [] 

axes 
for j in range (0,20): 
    xax.append(j) 
    r = random.randrange(0, 20) 
    yax.append(r) 
maxx = max(xax) 
maxy = max(yax) 
print maxx, maxy 
axis([0,maxx,0,maxy]) 
line, = plot(xax[0],yax[0]) 
draw() 
for i in xax: 
    print i, yax[i] 
    line.set_ydata(yax[i]) 
    draw() 
+0

好的。那麼問題是什麼?您的代碼是否按預期工作?如果不是,爲什麼不呢? – Chris 2012-08-03 11:57:17

+0

圖中沒有出現線條,我不確定爲什麼 – 2012-08-03 12:07:04

+0

也許這應該在你的問題中出現。無論如何,你對'axes'的調用應該被'axes()'替代。此外,線',= plot(xax [0],yax [0])'繪製出一個點,而不是一條線,這可能是您爲什麼看不到任何東西。嘗試用'line,= plot(xax,yax)'替換它。 – Chris 2012-08-03 12:13:34

回答

0

繼在評論問題和chat的討論,請嘗試以下更新線路,延長它的循環的每個迭代。原始代碼中的問題是一次只能繪製一個點,所以顯然沒有畫線。在下面,我使用numpy.appendmatplotlib.pylab的一部分)在循環的每次迭代中擴展x和y數據。

from matplotlib.pylab import * 
import time, random 

ion() 

xax = range(0, 20) 
yax = [random.randrange(0, 20) for _ range(0, 20)] 

axes() 

xlim(xmax=max(xax)) 
ylim(ymax=max(yax)) 

line, = plot(xax[0], yax[0]) 

for i, x in enumerate(xax): 
    line.set_ydata(append(line.get_ydata(), yax[i])) 
    line.set_xdata(append(line.get_xdata(), x)) 
    draw() 
    time.sleep(1.) 
+0

對xlim,ylim位其他']'的意思去哪裏當我不斷獲得'無效的語法'? – 2012-08-03 13:12:54

+1

排序它,但我得到RuntimeError:xdata和ydata必須是相同的長度 – 2012-08-03 13:16:20

+0

''['是錯別字。我忘記了更新循環中的x座標。它現在應該工作。 – Chris 2012-08-03 13:27:56