ArduinoからのMatplotlibライブプロットデータをtkinterキャンバスに埋め込む

W.リヴ

Pythonを使用してから数週間しか経っていません。Matplotlibを使用してArduinoからのデータをプロットするのに問題はありません。ただし、プロットはポップウィンドウとして表示されるため、tkinterで作成しているGUIのルートウィンドウのキャンバスにのみプロットを表示したいと思います。複数の組み合わせを試しましたが、うまくいきません。プロット値をコードに追加するだけの場合、次のように言います。

a.plot([1, 2, 3, 4, 5], [2, 3, 4, 5, 6, 7])

それは正常に動作するので、私の主な問題は、Arduinoからデータを取得するときのwhileループにあります。プロットを更新するためにdrawnowオプションも試しましたが、まったく同じ結果が得られます。私が何をしても、プロットが別のウィンドウとして表示されなくなるのを防ぐことができないようです。

[背面にメインGUIウィンドウがあるプロットウィンドウ] [1]

これが私が使用しているサンプルコードです:

import serial
from tkinter import *
import numpy as np
from matplotlib import pyplot as plt
import matplotlib.animation as animation
from matplotlib import style
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg


root = Tk()
root.geometry('1200x700+200+100')
root.title('This is my root window')
root.state('zoomed')
root.config(background='#fafafa')


yar = []
plt.ion()
style.use('ggplot')
fig = plt.figure(figsize=(14, 4.5), dpi=100)
ax1 = fig.add_subplot(1, 1, 1)
ser = serial.Serial('com3', 9600)

def animate(i):
    while True:
        ser.reset_input_buffer()
        data = ser.readline().decode("utf-8")
        data_array = data.split(',')
        yvalue = float(data_array[1])
        yar.append(yvalue)
        print(yvalue)
        plt.ylim(0, 100)
        ax1.plot(yar, 'r', marker='o')
        plt.pause(0.0001)


plotcanvas = FigureCanvasTkAgg(fig, root, animate)
plotcanvas.get_tk_widget().grid(column=1, row=1)
ani = animation.FuncAnimation(fig, animate, interval=1000, blit=True)
plotcanvas.show()

root.mainloop()
ImportanceOfBeingErnest

tkのメインループがアニメーションを処理するため、plt.ion()またはplt.pause()を使用しないでください。

アニメーション関数は毎秒呼び出されintervalます。while Trueこの関数内でループを使用することはできません

にアニメーション機能を提供する理由は何もありませんFigureCanvasTkAgg

blit=True自分が何をしているのかわからない限り、使用しないでください。1秒の間隔では、これはとにかく必要ありません。

すべての反復ステップで行を再プロットするのではなく、行を更新します。

#import serial
from Tkinter import *
from matplotlib import pyplot as plt
import matplotlib.animation as animation
from matplotlib import style
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg


root = Tk()
root.geometry('1200x700+200+100')
root.title('This is my root window')
root.state('zoomed')
root.config(background='#fafafa')

xar = []
yar = []

style.use('ggplot')
fig = plt.figure(figsize=(14, 4.5), dpi=100)
ax1 = fig.add_subplot(1, 1, 1)
ax1.set_ylim(0, 100)
line, = ax1.plot(xar, yar, 'r', marker='o')
#ser = serial.Serial('com3', 9600)

def animate(i):
    #ser.reset_input_buffer()
    #data = ser.readline().decode("utf-8")
    #data_array = data.split(',')
    #yvalue = float(data_array[1])
    yar.append(99-i)
    xar.append(i)
    line.set_data(xar, yar)
    ax1.set_xlim(0, i+1)


plotcanvas = FigureCanvasTkAgg(fig, root)
plotcanvas.get_tk_widget().grid(column=1, row=1)
ani = animation.FuncAnimation(fig, animate, interval=1000, blit=False)

root.mainloop()

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

キャンバスを介してantmediaライブストリームにロゴを埋め込む

分類Dev

Matplotlibキャンバスのインスタンスをpyqtに埋め込みます-プロットが表示されません

分類Dev

タブバーコントローラーをスプリットビューコントローラーにすばやく埋め込む方法は?

分類Dev

フラスコにボケプロットとデータテーブルを埋め込む

分類Dev

matplotlibをtkinterキャンバスに埋め込むと、2つのウィンドウが開きます

分類Dev

GCCプラグインからオブジェクトファイルにメタデータを埋め込む方法

分類Dev

グーグルマップにasp.netからオンラインデータベースを埋め込む

分類Dev

インタラクティブな光沢のあるプロットをPDF /プレゼンテーションに埋め込む方法は?(多分knitR経由)

分類Dev

埋め込むためのトップレベルのプログラムを必要とせずに、C ++ライブラリからJavaコードを埋め込みますか?

分類Dev

AndroidアプリケーションにYouTubeライブチャットを埋め込む

分類Dev

tkinterキャンバスをHTMLWebページに埋め込む方法はありますか?

分類Dev

IFPHP内にブートストラップコンテナを埋め込む

分類Dev

スイングに埋め込まれたFX(JFXPanel)からカスタムオブジェクトのドラッグ&ドロップ

分類Dev

ライブコントロール付きのビデオをインタラクティブな光沢のある環境に埋め込む

分類Dev

tkinterキャンバスにmatplotlibフィギュアを埋め込みながら(3d)インタラクティブ機能を機能させる方法

分類Dev

LinuxのコマンドラインからOGGにアルバムアートを埋め込む

分類Dev

スタンドアロンのボケグラフをdjangoテンプレートに埋め込む方法

分類Dev

動的な注釈付きタイムラインチャートをGoogleスプレッドシートに直接埋め込む方法

分類Dev

PCから複数のデバイスにメッセージをブロードキャストするためのAndroidアプリ

分類Dev

Oracleストアドプロシージャの値からasp.netのドロップダウンリストにデータを読み込む方法

分類Dev

ブートストラップポップオーバーにSVGを埋め込む

分類Dev

matplotlibプロットを埋め込むときの奇妙なTkinterの動作

分類Dev

現在のウェブページの上部にキャンバス要素を埋め込む方法は?

分類Dev

ダウンロード時にauthenticode署名付きインストーラーにユーザー固有のデータを埋め込む

分類Dev

Tkinter入力ボックスをタートルスクリーンに埋め込む方法はありますか(ペイントを作成するため)

分類Dev

Javaベースのデスクトップアプリケーションにブラウザーを埋め込む

分類Dev

Rシャイニーアプリのデータテーブル表示にクエリを埋め込む

分類Dev

メソッドへのポインタを派生クラスから基本クラスにキャストするための最良のアプローチ

分類Dev

異なるデータベースからのオブジェクトを埋め込むためのJDOQL

Related 関連記事

  1. 1

    キャンバスを介してantmediaライブストリームにロゴを埋め込む

  2. 2

    Matplotlibキャンバスのインスタンスをpyqtに埋め込みます-プロットが表示されません

  3. 3

    タブバーコントローラーをスプリットビューコントローラーにすばやく埋め込む方法は?

  4. 4

    フラスコにボケプロットとデータテーブルを埋め込む

  5. 5

    matplotlibをtkinterキャンバスに埋め込むと、2つのウィンドウが開きます

  6. 6

    GCCプラグインからオブジェクトファイルにメタデータを埋め込む方法

  7. 7

    グーグルマップにasp.netからオンラインデータベースを埋め込む

  8. 8

    インタラクティブな光沢のあるプロットをPDF /プレゼンテーションに埋め込む方法は?(多分knitR経由)

  9. 9

    埋め込むためのトップレベルのプログラムを必要とせずに、C ++ライブラリからJavaコードを埋め込みますか?

  10. 10

    AndroidアプリケーションにYouTubeライブチャットを埋め込む

  11. 11

    tkinterキャンバスをHTMLWebページに埋め込む方法はありますか?

  12. 12

    IFPHP内にブートストラップコンテナを埋め込む

  13. 13

    スイングに埋め込まれたFX(JFXPanel)からカスタムオブジェクトのドラッグ&ドロップ

  14. 14

    ライブコントロール付きのビデオをインタラクティブな光沢のある環境に埋め込む

  15. 15

    tkinterキャンバスにmatplotlibフィギュアを埋め込みながら(3d)インタラクティブ機能を機能させる方法

  16. 16

    LinuxのコマンドラインからOGGにアルバムアートを埋め込む

  17. 17

    スタンドアロンのボケグラフをdjangoテンプレートに埋め込む方法

  18. 18

    動的な注釈付きタイムラインチャートをGoogleスプレッドシートに直接埋め込む方法

  19. 19

    PCから複数のデバイスにメッセージをブロードキャストするためのAndroidアプリ

  20. 20

    Oracleストアドプロシージャの値からasp.netのドロップダウンリストにデータを読み込む方法

  21. 21

    ブートストラップポップオーバーにSVGを埋め込む

  22. 22

    matplotlibプロットを埋め込むときの奇妙なTkinterの動作

  23. 23

    現在のウェブページの上部にキャンバス要素を埋め込む方法は?

  24. 24

    ダウンロード時にauthenticode署名付きインストーラーにユーザー固有のデータを埋め込む

  25. 25

    Tkinter入力ボックスをタートルスクリーンに埋め込む方法はありますか(ペイントを作成するため)

  26. 26

    Javaベースのデスクトップアプリケーションにブラウザーを埋め込む

  27. 27

    Rシャイニーアプリのデータテーブル表示にクエリを埋め込む

  28. 28

    メソッドへのポインタを派生クラスから基本クラスにキャストするための最良のアプローチ

  29. 29

    異なるデータベースからのオブジェクトを埋め込むためのJDOQL

ホットタグ

アーカイブ