ホームページ >バックエンド開発 >Python チュートリアル >Matplotlib でプロットするとパフォーマンスが低下するのはなぜですか?また、何ができるでしょうか?
Matplotlib プロットのパフォーマンスに関する考慮事項
さまざまな Python プロット ライブラリを評価する際、Matplotlib の使用時にパフォーマンスの問題が発生する可能性があります。この記事では、Matplotlib のプロットが遅い理由を検討し、その速度を改善するための解決策を提供します。
遅さの原因
Matplotlib のパフォーマンスの低下は、主に次の 2 つの要因に起因します。
パフォーマンスの向上
パフォーマンスを向上させるには、次の戦略を検討してください。
1.ブリッティングを使用する:
ブリッティングでは、Figure 全体を再描画するのではなく、キャンバスの特定の部分を更新するだけです。これにより、計算オーバーヘッドが大幅に削減されます。 Matplotlib は、使用される GUI フレームワークに応じて異なるバックエンド固有のブリッティング メソッドを提供します。
2.再描画の制限:
プロット時にanimated=Trueオプションを使用します。この手法を Matplotlib アニメーション モジュールと組み合わせると、キャンバス全体の再描画をトリガーせずに特定のオブジェクトを更新できます。
3.サブプロットのカスタマイズ:
サブプロットと目盛りラベルの数を最小限に抑えます。不要な要素を削除してレンダリング時間を短縮します。
4.コード効率の向上:
コードをリファクタリングして構造を改善し、実行される操作の数を減らします。可能な場合は、ベクトル化された操作を利用します。
例:
これは、copy_from_bbox とrestore_region によるブリッティングを使用した、質問で提供されたコードの最適化されたバージョンです:
<code class="python">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))</code>
代替ライブラリ
Matplotlib のパフォーマンスが依然として満足できない場合は、Bokeh、Plotly、または などの代替プロット ライブラリを検討してください。アルタイル。これらのライブラリは、リアルタイムの対話性とパフォーマンスの最適化を優先します。
以上がMatplotlib でプロットするとパフォーマンスが低下するのはなぜですか?また、何ができるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。