Matplotlib プロットのパフォーマンスに関する考慮事項
さまざまな Python プロット ライブラリを評価しているときに、Matplotlib の使用時にパフォーマンスの問題が発生する可能性があります。この記事では、Matplotlib のプロットが遅い理由を検討し、その速度を改善するための解決策を提供します。
遅さの原因
Matplotlib のパフォーマンスの低下は、主に 2 つの要因によって引き起こされます:
パフォーマンスの向上
パフォーマンスを向上させるには、次の戦略を検討してください。
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 のパフォーマンスが依然として満足できない場合は、次のような代替プロット ライブラリを検討してください。 ボケ、プロットリー、またはアルタイル。これらのライブラリは、リアルタイムの対話性とパフォーマンスの最適化を優先します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3