python pygameを用いてマイコンボードからのデータをリアルタイム処理を行う


このサイト<https://algorithm.joho.info/arduino/python-serial-temperature-
graph/>を用いてarduinoとの通信を行って、グラフをリアルタイム表示させたいです。  
textの方は問題なく表示されているのですが、グラフの方が表示することができないです。  
なにか問題点などあるのでしょうか？

[code]

    # -*- coding: utf-8 -*-
    import numpy as np
    import matplotlib.pyplot as plt
    import pygame
    from pygame.locals import *
    import serial
    import sys
    
    def main():
        ser = serial.Serial("COM6")  # COMポート(Arduino接続)
        temps = [0]*100              # 温度格納
        t = np.arange(0,100,1)
        plt.ion()
        pygame.init()                # Pygameを初期化
        screen = pygame.display.set_mode((200, 200))   # 画面作成(100×100)
        pygame.display.set_caption("voltage")         # タイトルバー
        font = pygame.font.Font(None, 50)              # 文字の設定
    
        while True:
            screen.fill((0,0,0))            # 画面のクリア
            temp = ser.readline().rstrip()   # \nまで読み込む(\nは削除)
            temp = temp.decode()
            text = font.render(temp + "[V]", False, (255,255,255))    # 表示する文字の設定
            screen.blit(text, (10, 10))     # レンダ，表示位置
            pygame.display.flip()           # 画面を更新して、変更を反映
            # 温度データのリスト更新
            temps.pop(99)
            temps.insert(0,float(temp))
            # グラフ表示設定
            line, = plt.plot(t, temps, 'r-',label="Temperature[C]") # Y軸更新
            line.set_ydata(temps)
            plt.title("Real-time temperature")
            plt.xlabel("Time [s]")
            plt.ylabel("Temperature [Celsius]")
            plt.legend()
            plt.grid()
            plt.xlim([1,100])
            plt.ylim([0,5])
            plt.draw()
            plt.clf()
            for event in pygame.event.get():
                # 終了ボタンが押されたら終了処理
                if event.type == QUIT:
                    pygame.quit()
                    ser.close()
                    plt.close()
                    sys.exit()
    
    
    if __name__ == '__main__':
        main()
    
[/code]




[matplotlib.figure.canvas.flush_events](https://matplotlib.org/3.3.2/api/backend_bases_api.html#matplotlib.backend_bases.FigureCanvasBase.flush_events)
を使う方法はどうでしょうか。これで一応はリアルタイムに表示される様になります。

※ legend の表示位置ですが `plt.legend(loc='upper right')` などとして表示位置を固定すると良いかと思います

[code]

    def main():
              :
    
        while True:
              :
            ## don't need to call plt.draw() if clearing the figure with plt.clf()
            #plt.draw()
            ## flush the GUI events for the figure
            plt.figure(1).canvas.flush_events()
            plt.clf()
              :
    
    
[/code]

