Matplotlib 基本流程、savefig方法以及两种裁剪图像的方法
Matplotlib是一款Python的绘图库,用于生成高质量的图形,可用于图形化界面或各种输出格式(PDF、SVG等)。Matplotlib可作为一个只需几行代码的简单绘图工具,也能用于创建复杂的图。Matplotlib是Python中最流行的绘图库之一,由于其易于学习和可视化大量数据等优点而备受欢迎。
阅读更多:Matplotlib 教程
Matplotlib绘图流程
Matplotlib绘图的基本流程如下:
- 准备数据,将数据组织成Numpy数组或Pandas数据结构;
- 创建画布(Figure)和多个子图(Subplot);
- 对子图进行设定(绘图类型、坐标轴设置、标签信息等);
- 在画布上输出图像(savefig)。
代码示例:
import matplotlib.pyplot as plt
import numpy as np
# 准备数据
x = np.arange(0, 10, 0.1)
y = np.sin(x)
y2 = np.cos(x)
# 创建画布和子图
fig, ax = plt.subplots()
# 绘制曲线
ax.plot(x, y, label='sin')
ax.plot(x, y2, label='cos')
# 添加坐标轴、标签和标题
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_title('sin and cos')
ax.legend()
# 输出图像
plt.savefig('sin_cos.png')
savefig方法
Matplotlib提供了savefig方法用于输出图像到文件,该方法的用法如下:
plt.savefig(fname, dpi=None, facecolor='w', edgecolor='w',
orientation='portrait', papertype=None, format=None,
transparent=False, bbox_inches=None, pad_inches=0.1,
metadata=None)
其中,fname表示文件名(包含路径),可以是PNG、PDF、SVG等文件格式;dpi表示输出的分辨率,缺省值为100;facecolor表示画布背景色,缺省值为’w’(白色);edgecolor表示边框颜色,缺省值为’w’;orientation表示图像方向,缺省值为’portrait’(纵向);papertype表示纸张类型,缺省值为None;format表示输出的文件格式,缺省值根据文件名自动选择;transparent表示是否透明,缺省值为False;bbox_inches表示将要保存的图表部分。设置为’all’将保存整个图表,设置为’tight’将仅保存图表部分;pad_inches表示图表周围边缘与最终绘制图像的距离。
裁剪图像
通常情况下,Matplotlib的输出图像会包含自动留白,因此输出的图像文件中会包含大量无用的空白区域。此外,在某些情况下我们还希望去掉图像周围的留白区域,而仅保留有用的部分。那么该如何裁剪图像呢?下面介绍两种方法进行图像裁剪。
方法一:trim_figure函数
Matplotlib提供了trim_figure函数,可以用于自动裁剪图像周围的边缘空白。该函数的实现原理是:对图像的上下左右四个边缘分别计算像素值,从中找出连续的前景像素,并将前景像素边框作为图像的裁剪区域。该函数的用法如下:
from matplotlib import pyplot as plt
# 定义图像的文件名
file = 'example.png'
# 读取图像
img = plt.imread(file)
# 获取图像尺寸
h, w = img的高度和宽度
# 计算边缘空白像素的索引
hmin = 0
while img[hmin, :].mean() == 1:
hmin += 1
hmax = h - 1
while img[hmax, :].mean() == 1:
hmax -= 1
wmin = 0
while img[:, wmin].mean() == 1:
wmin += 1
wmax = w - 1
while img[:, wmax].mean() == 1:
wmax -= 1
# 裁剪图像
img_trim = img[hmin:hmax+1, wmin:wmax+1]
# 输出裁剪后的图像
plt.imshow(img_trim)
# 输出图像
plt.savefig(file[:-4]+'_trim.png')
上述代码会输出去除边缘空白后的图像,并将其保存到新的文件中。trim_figure函数的优点是方便快捷,不需要安装额外的库,缺点是裁剪效果可能略差。
方法二:pillow库
Pillow是一款基于PIL(Python Imaging Library)的Python图像处理库,提供了丰富的图像处理功能。使用Pillow库可以更加灵活地实现自定义的图像裁剪。下面的示例使用Pillow库对图像进行裁剪:
from matplotlib import pyplot as plt
from PIL import Image
# 定义图像文件名
file = 'example.png'
# 读取图像
img = Image.open(file)
# 裁剪图像
img_trim = img.crop(img.getbbox())
# 输出裁剪后的图像
plt.imshow(img_trim)
# 输出图像
img_trim.save(file[:-4]+'_trim.png')
上述代码中,首先用Image.open函数读取图像,然后调用img.getbbox()函数计算图像的边缘(裁剪区域),最后调用img.crop函数裁剪图像并输出裁剪后的结果。Pillow库裁剪图像的优点是功能更加强大,效果更加精确,缺点是需要安装额外的库并了解其使用方法。
总结
本文介绍了Matplotlib的基本流程、savefig方法以及两种裁剪图像的方法。Matplotlib是一款功能强大、易于使用的绘图库,可用于生成高质量的图形和可视化大量数据。通过本文的学习,读者可熟悉Matplotlib的基本用法,并了解图像裁剪的方法,为日后的数据分析和可视化工作提供便利。