
1.3.3 Matplotlib库应用入门
Matplotlib是Python的绘图库,具有强大的绘图功能。pyplot是Matplotlib库中的一个模块,它提供了类似于MATLAB的绘图接口,是数据可视化的好帮手,能够绘制2D、3D等图像。接下来简单介绍Matplotlib库的使用。
下面先介绍使用Matplotlib库绘图的准备工作:

上述程序先导入Matplotlib库中的pyplot模块,并命名为plt。为了在Jupyter Notebook中显示图像,需要使用“%matplotlib inline”命令;为了绘制3D图像,需要引入三维的坐标系系统Axes3D。由于Matplotlib库默认不支持中文文本在图像中的显示,为了解决这个问题,可以使用matplotlib.rcParams['axes.unicode_minus']=False语句,同时可以导入Seaborn数据可视化库,使用其中的set()方法设置可视化图像时的基础设置。例如,参数font指定图中文本使用的字体,参数style设置坐标系的样式,参数font_scale设置字体的显示比例。
1.二维可视化图像
针对使用Matplotlib库的二维数据可视化,下面先展示一个简单的曲线可视化的示例,程序如下所示:


在上面的程序中,首先生成X轴和Y轴的坐标数据,然后使用plt.figure()定义一个图像窗口,并使用参数figsize=(10,6)指定图像的宽和高,使用plt.plot()绘制图像对应的坐标X和Y,其中第三个参数"r-*"代表绘制红色曲线星形图,使用plt.xlabel()定义X轴的标签名称,使用plt.ylabel()定义Y轴的标签名称,使用plt.title()指定图像的名称,使用plt.grid()在图像中显示网格线,最后使用plt.show()查看图像。得到的曲线图如图1-13所示。

图1-13 曲线图
使用Matplotlib库还可以在一个图像上绘制多个子图,以便从多方面、多角度对数据进行观察。下面可视化一个包含3个子图的图像,程序如下所示:


这个例子分别绘制了曲线图、直方图和阶梯图。plt.subplot(2,2,1)表示将当前图像分成4(2×2)个区域,并在第一个区域绘图。在第一个子图中指定X轴的标签名称时,使用plt.xlabel(r"$\alpha$")来显示,其中"$\alpha$"表示latex公式。plt.subplot(2,2,2)表示开始在第二个区域绘制图像,plt.hist(histdata,10)表示将数据histdata分成10份来绘制直方图。而在可视化第三个子图时,使用plt.subplot(2,1,2)表示将图形区域重新划分为2(2×1)个窗口,并且指定在第三个窗口中作图,这样原始的2×2的4个子图的第三个和第四个子图组合为一个新的子图窗口。plt.step(X,Y,c="r",label="sin(x)",linewidth=3)表示绘制阶梯图,并且指定线的颜色为红色,线宽为3;plt.legend(loc="lower right",fontsize=16)可以为图像在指定的位置添加图例,字号大小为16;plt.xticks(xtick,xticklabel,rotation=45)表示通过plt.xticks()来指定X轴的刻度所显示的内容,并且可以通过rotation=45将其逆时针旋转45°;plt.subplots_adjust(hspace=0.35)表示调整子图之间的水平间距,使子图之间没有遮挡,最终的数据可视化图像如图1-14所示。
2.三维可视化图像
使用Matplotlib库还可以绘制三维图像。绘制三维图像曲面图和空间散点图的示例如下所示:



图1-14 数据可视化图像
在上面的可视化程序中,先使用np.meshgrid()函数准备可视化需要的网格数据;然后针对图像窗口使用fig.add_subplot(111,projection="3d")初始化一个3D坐标系ax1;接着使用ax1.plot_surface()函数绘制曲面图,使用ax1.contour()函数为图像添加等高线;最后设置各个轴的标签和可视化范围。运行程序获得的图像如图1-15所示。

图1-15 3D曲面图可视化
同样,在一幅图像中可以绘制多个3D图像,可视化3D曲线图和3D散点图的程序如下所示:


上面的程序在可视化3D图像时使用的是3个一维向量数据,分别指定X轴、Y轴和Z轴的坐标位置,然后可视化3D曲线图和3D散点图。运行程序获得的图像如图1-16所示。

图1-16 3D曲线图和3D散点图