ホームページ >バックエンド開発 >Python チュートリアル >時間スケールを変更した後、Tkinter アプリケーションで Matplotlib プロットを効率的に更新するにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。