如何加速 Matplotlib 繪圖以提高效能?
Oct 19, 2024 pm 08:48 PM為什麼 Matplotlib 這麼慢?
在評估 Python 繪圖庫時,考慮效能很重要。 Matplotlib 是一個廣泛使用的函式庫,它看起來可能很緩慢,引發了加快速度或探索替代選項的問題。讓我們深入研究這個問題並探索可能的解決方案。
提供的範例展示了具有多個子圖和資料更新的圖表。使用 Matplotlib,此過程涉及重繪所有內容,包括軸邊界和刻度標籤,導致效能下降。
了解瓶頸
導致緩慢的兩個關鍵因素:
- 過度重繪: Matplotlib 的Figplotlib .canvas.draw() 函數會重繪整個圖形,即使只有一小部分需要更新。
- 豐富的刻度標籤:大量的刻度標籤和子圖會對繪圖過程造成很大的負擔。
使用 Blitting 進行最佳化
解決這些瓶頸,考慮使用位塊傳送。 Blitting 涉及僅更新圖形的特定部分,從而減少渲染時間。然而,為了高效實現,需要特定於後端的程式碼,這可能需要在 GUI 工具包中嵌入 Matplotlib 繪圖。
GUI 中性位圖傳輸
GUI 中性位圖傳輸此技術可在不依賴後端的情況下提供合理的效能:
- 捕捉背景:在動畫之前,捕捉每個子圖的背景以便稍後恢復。
- 更新和繪製:對於每一幀,更新線條的資料和藝術家,恢復背景併位圖更新部分。
- 避免重繪:使用Fig.canvas.blit( ax.bbox) 而不是 Fig.canvas.draw() 來只更新必要的區域。
範例實作:
<code class="python">import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 2*np.pi, 0.1) y = np.sin(x) fig, axes = plt.subplots(nrows=6) styles = ['r-', 'g-', 'y-', 'm-', 'k-', 'c-'] def plot(ax, style): return ax.plot(x, y, style, animated=True)[0] lines = [plot(ax, style) for ax, style in zip(axes, styles)] # Capture Background backgrounds = [fig.canvas.copy_from_bbox(ax.bbox) for ax in axes] for i in xrange(1, 2000): for j, (line, ax, background) in enumerate(zip(lines, axes, backgrounds), start=1): fig.canvas.restore_region(background) line.set_ydata(np.sin(j*x + i/10.0)) ax.draw_artist(line) fig.canvas.blit(ax.bbox)</code>
登入後複製
動畫模組
最近的Matplotlib 版本包含一個動畫模組,它簡化了blitting:
<code class="python">import matplotlib.pyplot as plt import matplotlib.animation as animation def animate(i): for j, line in enumerate(lines, start=1): line.set_ydata(np.sin(j*x + i/10.0)) ani = animation.FuncAnimation(fig, animate, xrange(1, 200), interval=0, blit=True)</code>
登入後複製
以上是如何加速 Matplotlib 繪圖以提高效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)