

Pythonを用いて、Arduinoとの通信を行いたいのですが、以下を実行しても、グラフがリアルタイムで表示されないです。具体的には実行終了後にしか表示されません。  
イメージとしてはアニメーションのように表示されてほしいのですが、どこが原因なのでしょうか？  
Windowsを用いています。なにかあればご指摘いただきたいです。

[code]

    %matplotlib notebook
    import numpy as np
    import matplotlib.pyplot as plt
    import serial
    from serial.tools import list_ports
    import time
    
    ser = serial.Serial("COM6",9600)  # COMポート(Arduino接続) 
    xlim = [0,100]
    X,Y = [],[]
    figure = plt.figure()
    ax = figure.add_subplot(1,1,1)
    start = time.time()
    
    while True:
        plt.cla()   #前のグラフを消去
        volt = ser.readline().rstrip()   # シリアル通信で受け取った情報（文字列）を改行コードがくるまで代入します。byte型で得る
        volt = volt.decode()
        volt = float(volt)
        Y.append(volt)
        X.append(len(Y))
        
        if len(X) > 100:
            xlim[0]+=1
            xlim[1]+=1
        ax.plot(X,Y)
        plt.title("voltage(cds)")
        plt.ylim(0,5)
        plt.xlim(xlim[0],xlim[1])
        
        if time.time() - start > 20:
                ser.close()
                break
    
[/code]


CC BY-SA 4.0
2020-11-12T14:53:51.843
71902
2023-11-15T15:06:50.997
2020-11-13T00:24:05.380
3060
37633
question
python matplotlib jupyter-notebook arduino
Jupyter Notebook で Arduino を用いてグラフのリアルタイム表記を行う


この後にされた質問の方に先に答えましたが、こちらも同様に`plt.pause(interval)`を追加することでリアルタイムなグラフ表記が出来るようになるでしょう。

ただやはりJupyter Notebook環境の影響は不明なので、まず素のPythonで試してみてください。  
以下に追記箇所だけ抜粋します。

[code]

        plt.ylim(0,5)
        plt.xlim(xlim[0],xlim[1])
        plt.pause(0.1)             #### この1行を追記
        
        if time.time() - start > 20:
    
[/code]


CC BY-SA 4.0
2020-11-13T04:27:14.840
71914
2020-11-13T04:27:14.840
26370
71902
answer