在 Python 中將繪圖儲存到 NumPy 陣列是一種將資料視覺化與陣列操作聯絡起來的技術,允許將圖形繪圖直接儲存為陣列表示形式,從而促進在 Python 環境中進行進一步的計算分析或修改。讓我們學習如何使用 Matplotlib 將繪圖儲存到 NumPy 陣列。
如何將繪圖儲存到 NumPy 陣列
要將繪圖儲存到 NumPy 陣列,必須首先使用 Matplotlib 等繪相簿建立繪圖,然後利用“canvas.tostring_rgb()”方法將繪圖捕獲為 RGB 字串,並將該資料重新整形為 NumPy 陣列:適當的尺寸。
基本步驟包括:
- 繪製並捕獲繪圖的 RGB 表示
- 將其重塑為陣列,確保視覺化無縫整合到資料分析工作流程中。
方法1:使用fig.canvas.tostring_rgb和numpy.fromstring
- 在這種方法中,繪圖被建立並繪製在畫布上。繪製畫布以渲染繪圖,然後使用“ buf= Fig.canvas.tostring_rgb() ”將渲染的畫布轉換為原始 RGB 緩衝區。
- 原始緩衝區被轉換為表示影像的 NumPy 陣列。最後,它列印影像陣列的形狀和一部分畫素值及其 RGB 值。
import matplotlib.pyplot as plt |
影像的尺寸為(480,640,3),這些數字表示:
- 480: 這是影像的高度(以畫素為單位)。
- 640: 這是影像的寬度(以畫素為單位)。
- 3: 這表示影像中顏色通道的數量。由於該值為 3,因此它可能是 RGB 影像,其中每個畫素具有代表紅色、綠色和藍色強度的三個值。
方法 2:將繪圖儲存到 io.BytesIO 物件中
- 這種方法是用 Matplotlib 建立一個繪圖,然後將其儲存到記憶體中的 BytesIO 物件(作為 PNG),即記憶體中的臨時緩衝區,而不是直接儲存到檔案中。
- 然後使用 Pillow(PIL Fork)庫將 BytesIO 物件讀入 PIL 影像,並將其轉換為 NumPy 陣列。這種方法可以高效地將繪圖轉換為陣列,而無需從磁碟儲存和讀取。
import matplotlib.pyplot as plt |
輸出 (480, 640, 4) 給出了一個 NumPy 陣列,表示高度為 480 畫素、寬度為 640 畫素和四個顏色通道(RGBA)的影像。雖然繪圖資料本身可能沒有明確使用 alpha 通道,但它的存在可能是 Matplotlib 處理 PNG 透明度或所用影像處理庫行為的結果。
- 具有 PNG 透明度的 Matplotlib:使用 plt.savefig 將 Matplotlib 圖形儲存為 PNG 格式並啟用透明度時,即使圖形本身沒有明確使用透明度,生成的影像也可能有 Alpha 通道。這種行為取決於 Matplotlib 對 PNG 影像的內部處理。
- 外部庫 (PIL):在使用 PIL 等外部庫開啟影像時,即使 Matplotlib 中的原始 PNG 沒有新增阿爾法通道,也可能會新增。某些影像處理庫(如 PIL)可能會預設設定或新增阿爾法通道,以保持一致性。
結論
總之,在 Python 中將繪圖轉換為 NumPy 陣列,透過將其與基於陣列的計算整合,增強了資料視覺化,為各種應用提供了靈活性。