ホームページ >バックエンド開発 >Python チュートリアル >時間スケールを変更した後、Tkinter アプリケーションで Matplotlib プロットを効率的に更新するにはどうすればよいですか?

時間スケールを変更した後、Tkinter アプリケーションで Matplotlib プロットを効率的に更新するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-09 07:10:08237ブラウズ

How Can I Efficiently Update Matplotlib Plots in a Tkinter Application After Changing the Time Scale?

Tkinter 用の Matplotlib でのプロットの更新

Tkinter アプリケーション内で Matplotlib のプロットを更新するときに問題が発生しました。ユーザーがタイム スケール単位を調整できるようにすると、新しいプロットを作成せずにプロットの再計算と更新が必要になります。

アプローチ 1: クリアと再プロット

簡単な方法この方法では、graph1.clear() およびgraph2.clear() を呼び出して既存のプロットをクリアし、データを再プロットします。

アプローチ 2: プロット データの更新

大幅に高速な代替アプローチでは、既存のプロット オブジェクトのデータを更新します。これには、コードを少し調整する必要があります。

def plots():
    global vlgaBuffSorted
    cntr()

    result = collections.defaultdict(list)
    for d in vlgaBuffSorted:
        result[d['event']].append(d)

    result_list = result.values()

    f = Figure()
    graph1 = f.add_subplot(211)
    graph2 = f.add_subplot(212, sharex=graph1)

    # Create plot objects
    vds_line, = graph1.plot([], [], 'bo', label='a')
    vgs_line, = graph1.plot([], [], 'rp', label='b')
    isub_line, = graph2.plot([], [], 'b-', label='c')

    for item in result_list:
        # Update plot data
        vds_line.set_data([], [])
        vgs_line.set_data([], [])
        isub_line.set_data([], [])

        tL = []
        vgsL = []
        vdsL = []
        isubL = []
        for dict in item:
            tL.append(dict['time'])
            vgsL.append(dict['vgs'])
            vdsL.append(dict['vds'])
            isubL.append(dict['isub'])

        # Update plot data
        vds_line.set_data(tL, vdsL)
        vgs_line.set_data(tL, vgsL)
        isub_line.set_data(tL, isubL)

    # Draw the plot
    f.canvas.draw()
    f.canvas.flush_events()

このアプローチでは、プロット オブジェクト (vds_line など) を作成し、反復ごとにそのデータを更新します。 draw() メソッドと flash_events() メソッドは、更新されたプロットを Tkinter ウィンドウに表示するために使用されます。

適切なアプローチを選択することで、Tkinter アプリケーション内の Matplotlib のプロットを効果的に更新できます。

以上が時間スケールを変更した後、Tkinter アプリケーションで Matplotlib プロットを効率的に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。