2017-07-29 37 views
0

我試圖遵循一些導遊的生成實時圖表,如:real-time plotting in while loop with matplotlibhttp://thread.gmane.org/gmane.comp.python.matplotlib.general/35705實時情節與Python 3.x的安裝

但是,我相信,示例代碼與蟒蛇編譯2.7。當我嘗試編譯我的時候,我沒有看到實時情節正在更新。這是因爲python 3不支持它嗎?或者我錯過了一個圖書館或什麼?只有當我停止while循環時,我才能看到最後繪製的值。我使用Rodeo作爲我的IDE;這是否會阻止我查看實時情節?

import serial 
import numpy as np 
import matplotlib.pyplot as plt 

def plotlive(): 
    plt.plot(ard_dat,'o') 
    plt.xlabel('count', fontsize=12) 
    plt.ylabel('reading', fontsize=12) 
    plt.legend(loc='upper right') 
ard_dat=[] 
plt.ion() 
cnt=0 
arduinoSerialData = serial.Serial('com5',9600) 

while True: 
    while (arduinoSerialData.inWaiting()==0): 
     pass 

     srdata = arduinoSerialData.readline() 
     try: 
      intstrdata = int(srdata) 
     except ValueError: 
      pass 
     ard_dat.append(intstrdata) 
     drawnow(plotlive) 
     plt.pause(.00001) 
     cnt+=1 
     if (cnt>50): 
      ard_dat.pop(0) 

回答

0

代碼中沒有特定的python 2或3命令,因此您可以將其忽略。

我不會推薦使用drawnow。直接撥打plotlive()。但這只是一個建議,因爲drawnow是一個非常無用的軟件包,但它不會阻止代碼運行。

假設串行工作正常,問題代碼在作爲腳本運行時應產生更新圖。

重點是:羅德奧不能製作動畫。查看本期:https://github.com/yhat/rodeo/issues/488 原因是它使用筆記本式的輸出機制。在Jupyter筆記本中,您實際上可以將後端設置爲交互模式(%matplotlib tk%matplotlib notebook),但這在Rodeo中顯然不可行。

Rodeo似乎也沒有選擇在IDE之外運行一些代碼作爲python腳本。因此,這個想法應該是使用不同的IDE,或者至少在Rodeo之外運行動畫。

+0

很好,謝謝你的信息。我是jupyter的新手,所以必須做一些閱讀和試驗。我不熟悉後端交互模式的這個概念。如果你知道任何開始的資源,請讓我知道。 –

+0

我嘗試在頂部添加%matplotlib筆記本,並在jupyter筆記本中運行相同的代碼,但沒有執行任何操作。我能夠輸出從arduino提取的40個值的圖,但是,所以繪圖似乎工作(如果它是一個靜態列表),我的代碼中的東西不是? –

+0

對不起,雖然我確實說過從腳本執行時代碼可能會運行,但我不確定它會在Jupyter中運行。我說的是一般動畫可以在Jupyter中運行。作爲第一步,將您的代碼作爲腳本運行,看看它是否有效。如果你還想能夠在jupyter中運行它,可能需要對它進行調整。 – ImportanceOfBeingErnest