Matplotlib中将绘图保存到Numpy数组的2种方法
在 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 数组,通过将其与基于数组的计算集成,增强了数据可视化,为各种应用提供了灵活性。