Matplotlib 圖庫的效能注意事項
在評估不同的 Python 圖庫時,使用 Matplotlib 時可能會遇到效能問題。本文探討了 Matplotlib 繪圖速度緩慢的原因,並提供了提高其速度的解決方案。
速度緩慢的原因
Matplotlib 效能緩慢主要源自於兩個因素:
提高性能
要提高效能,請考慮以下策略:
1。使用 Blitting:
Blitting 僅涉及更新畫布的特定部分,而不是重新繪製整個圖形。這大大減少了計算開銷。 Matplotlib 提供了後端特定的位元塊傳送方法,這些方法會根據所使用的 GUI 框架而有所不同。
2。限制重繪:
繪圖時使用animated=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 的性能仍然不能令人滿意,請考慮替代繪圖庫,例如如Bokeh、Plotly 或Altair。這些庫優先考慮即時互動性和效能優化。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3