「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Matplotlib でプロットするとパフォーマンスが低下するのはなぜですか?また、何ができるでしょうか?

Matplotlib でプロットするとパフォーマンスが低下するのはなぜですか?また、何ができるでしょうか?

2024 年 11 月 6 日に公開
ブラウズ:187

When Plotting with Matplotlib, Why Does Performance Suffer and What Can Be Done?

Matplotlib プロットのパフォーマンスに関する考慮事項

さまざまな Python プロット ライブラリを評価しているときに、Matplotlib の使用時にパフォーマンスの問題が発生する可能性があります。この記事では、Matplotlib のプロットが遅い理由を検討し、その速度を改善するための解決策を提供します。

遅さの原因

Matplotlib のパフォーマンスの低下は、主に 2 つの要因によって引き起こされます:

  • 頻繁な再描画: fig.canvas.draw() が呼び出されるたびに、軸の境界や目盛りラベルなどの要素を含む Figure 全体が更新されます。このプロセスは計算負荷が高くなります。
  • 多数のサブプロット: 多数の目盛ラベルを備えた複数のサブプロットを含むプロットでは、レンダリングが大幅に遅くなる可能性があります。

パフォーマンスの向上

パフォーマンスを向上させるには、次の戦略を検討してください。

1.ブリッティングを使用する:

ブリッティングでは、Figure 全体を再描画するのではなく、キャンバスの特定の部分を更新するだけです。これにより、計算オーバーヘッドが大幅に削減されます。 Matplotlib は、使用される GUI フレームワークに応じて異なるバックエンド固有のブリッティング メソッドを提供します。

2.再描画の制限:

プロット時にanimate=Trueオプションを使用します。 Matplotlib アニメーション モジュールと組み合わせると、この手法を使用すると、キャンバス全体の再描画をトリガーせずに特定のオブジェクトを更新できます。

3.サブプロットのカスタマイズ:

サブプロットと目盛ラベルの数を最小限に抑えます。不要な要素を削除してレンダリング時間を短縮します。

4.コード効率の向上:

コードをリファクタリングして構造を改善し、実行される操作の数を減らします。可能な場合はベクトル化された操作を利用してください。

例:

これは、copy_from_bbox とrestore_region によるブリッティングを使用した、質問で提供されたコードの最適化されたバージョンです:

import matplotlib.pyplot as plt
import numpy as np
import time

x = np.arange(0, 2*np.pi, 0.01)
y = np.sin(x)

fig, axes = plt.subplots(nrows=6)
fig.show()  # Draw the canvas initially

styles = ['r-', 'g-', 'y-', 'm-', 'k-', 'p-']
lines = [ax.plot(x, y, style)[0] for ax, style in zip(axes, styles)]

# Store background images of the axes
backgrounds = [fig.canvas.copy_from_bbox(ax.bbox) for ax in axes]

tstart = time.time()               
for i in range(1, 200):
    for j, line in enumerate(lines, start=1):
        # Restore the background
        fig.canvas.restore_region(backgrounds[j-1])
        
        # Update the data
        line.set_ydata(sin(j*x i/10.0))  

        # Draw the artist and blit
        ax.draw_artist(line)
        fig.canvas.blit(ax.bbox)

print('FPS:', 200/(time.time()-tstart))

代替ライブラリ

Matplotlib のパフォーマンスが依然として満足できない場合は、次のような代替プロット ライブラリを検討してください。 ボケプロットリー、またはアルタイル。これらのライブラリは、リアルタイムの対話性とパフォーマンスの最適化を優先します。

リリースステートメント この記事は次の場所に転載されています: 1729341981 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3