pyplot 是 Matplotlib 的子库,该子库提供了与 MATLAB 类似的绘图 API,使用 pyplot 子库可快速地绘制 2D 图表。下面将介绍利用 pyplot 子库绘制图表的方法。
创建简单图形
1. 导入快速绘图的函数库—— pyplot 子库
其代码如下:
import matplotlib.pyplot as plt
2. 创建绘图对象—— figure 对象
由于 Matplotlib 的图像均位于绘图对象中,在绘图前,先要创建绘图对象。如果不创建就直接调用绘图 plot 函数,Matplotlib 会自动创建一个绘图对象。
创建 figure 对象的函数语法格式如下:
plt.figure(num=None,figsize=None,dpi=None,facecolor=None,edgecolor=None,
frameon=True,FigureClass=,clear=False,**kwargs)
函数中的参数说明如下:
num:接收 int 或 string,可选,默认值为 None。如果该参数未提供,将创建新图形,并且图形编号将递增,图形对象将此数字保存在数字属性中。如果提供了 num,并且已存在具有此 num 的数字,请将其设置为活动状态,并返回对它的引用。如果此图不存在,则创建它并返回它。如果 num 是一个字符串,则窗口标题将设置为此数字的 num;
figsize:接收整数元组(tuple),可选,默认值为 None。该参数指定绘图对象的宽度和高度,单位为英寸。如果没有提供,默认为 rcfigure.figsize;
dpi:接收 int,可选,默认值为 None。该参数指定绘图对象的分辨率,即每英寸多少个像素。如果没有提供,默认值为 80 或默认为 rcfigure.dpi;
facecolor:可选,默认值为 None。该参数指定背景颜色。如果未提供,默认为 rcfigure.facecolor;
edgecolor:可选,默认值为 None。该参数指定边框颜色。如果未提供,则默认为 rcfigure.edgecolor;
frameon:接收 boolean,可选,默认值为 True。如果为 False,则禁止绘制图框;
FigureClass:从 matplotlib.figure.Figure 派生的类,可选,使用自定义图形实例;
clear:接收 boolean,可选,默认值为 False。如果为 True,并且该图已经存在,那么它将被清除。
3. 绘制图表
通过调用 plot 函数可实现在当前绘图对象中绘制图表,plot 函数的语法格式如下:
plt.plot(x,y,label,color,linewidth,linestyle)或 plt.plot(x,y,fmt,label)
函数中的参数说明如下:
x,y:表示所绘制的图形中各点位置在 x 轴和 y 轴上的数据,用数组表示;
label:给所绘制的曲线设置一个名字,此名字在图例(Legend)中显示。只要在字符串前后添加“$”符号,Matplotlib 就会使用其内嵌的 LaTeX 引擎来绘制数学公式;
color:指定曲线的颜色;
linewidth:指定曲线的宽度;
linestyle:指定曲线的样式;
fmt:指定曲线的颜色和线型,如“b—”,其中b表示蓝色,“—”表示线型为虚线,该参数也称为格式化参数。在 IPython 中输入“plt.plot?”,可以查看格式化字符串的详细配置。
注意:调用 plot 函数前,先定义所绘制图形的坐标,即图形在 x 轴和 y 轴上的数据。
4. 添加各类标签和图例
在调用 plot 函数完成绘图后,还需要为图表添加各类标签和图例,pyplot 中添加各类标签和图例的函数如表 1 所示。
表1:pyplot 中添加各类标签和图例的函数
函数
说明
plt.xlabel()
在当前图形中指定 x 轴的名称,可加指定位置、颜色、字体大小等参数
plt.ylabel()
在当前图形中指定 y 轴的名称,可以指定位置、颜色、字休大小等参数
plt.title()
在当前图形中指定图表的标题,可以指定标题名称、位置、颜色、字体大小等参数
plt.xlim()
指定当前图形 x 轴的范围,只能输入一个数值区间,不能使用字符串
plt.ylim()
指定当前图形 y 轴的范围,只能输入一个数值区间,不能使用字符串
plt.xticks()
指定 x 轴刻度的数目与取值
plt.yticks()
指定 y 轴刻度的数目与取值
plt.legend()
指定当前图形的图例,可以指定图例的大小、位置和标签
5. 保存和显示图表
在完成图表绘制、添加各类标签和图例后,下一步所要完成的任务是将图表保存为图片,并在本机上显示图表。保存和显示图表的函数如表 2 所示。
表 2:保存和显示图表的函数
函数
说明
plt.savefig()
保存绘制的图表为图片,可以指定图表的分辨率、边缘和颜色等参数
plt.show()
在本机显示图表
注意:要先将绘制的图表保存为图片,再显示图表。
6. 示例程序代码
【例 1】用 Matplotlib 绘制一个正弦函数曲线,要求为所绘制的正弦函数曲线设置名字为“sin(x)”,曲线的颜色为红色,曲线的宽度为 3。另外,再绘制一个余弦函数曲线,要求为所绘制的余弦函数曲线设置名字为“cos(x)”,曲线的颜色为蓝色,曲线为虚线。
其程序代码 test1.py 如下。
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,10,1000)#在[0,10]之间等距取1000个数作为x的取值
y = np.sin(x) #定义y轴坐标
z = np.cos(x) #定义z轴坐标
plt.figure(figsize=(10,6)) #创建绘图对象
plt.plot(x,y,label="$sin(x)$",color="red",linewidth=3)
plt.plot(x,z,"b--",label="$cos(x)$")
#设置各类图例和标签
plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.title("PyPlot First Example")
plt.ylim(-1.2,1.2)
plt.legend()
plt.show()
运行程序后,显示的函数曲线如图 1 所示。
图 1:正弦函数和余弦函数
创建子图
在 Matplotlib 中,可以将一个绘图对象分为几个绘图区域,在每个绘图区域中可以绘制不同的图像,这种绘图形式称为创建子图。创建子图可以使用 subplot() 函数,该函数的语法格式如下:
subplot(numRows,numCols,plotNum)
函数中的参数说明如下:
numRows:表示将整个绘图区域等分为 numRows 行;
numCols:表示将整个绘图区域等分为 numCols 列;
plotNum:表示当前选中要操作的区域。
subplot() 函数的作用就是将整个绘图区域等分为 numRows(行)×numCols(列)个子区域,然后按照从左到右、从上到下的顺序对每个子区域进行编号,左上的子区域的编号为 1。
如果 numRows、numCols 和 plotNum 这 3 个数都小于 10,可以把它们缩写为一个整数,例如 subplot(223) 和 subplot(2,2,3) 是相同的。subplot() 在 plotNum 指定的区域中创建图形。如果新创建的图形和先前创建的图形重叠,则先前创建的图形将被删除。
【例 2】创建 3 个子图,分别绘制正弦函数、余弦函数和线性函数。
其程序代码 test2.py 如下。
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 1000)
y = np.sin(x)
z = np.cos(x)
k = x
plt.subplot(221) # 第一行的左图
plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
plt.subplot(222) # 第一行的右图
plt.plot(x,z,"b--",label="$cos(x)$")
plt.subplot(212) # 第二整行
plt.plot(x,k,"g--",label="$x$")
plt.legend()
plt.savefig('image.png',dpi=100) #dpi是指保存图像的分辨率,默认值为80
plt.show()
运行程序后,显示的图形如图 2 所示。
图 2:创建3个子图