第1章 使用函数绘制matplotlib的图表组成元素
1.1 绘制matplotlib图表组成元素的主要函数
首先,我们来了解一下matplotlib是如何组织内容的。在一个图形输出窗口中,底层是一个Figure实例,我们通常称之为画布,包含一些可见和不可见的元素。
在画布上,自然是图形,这些图形就是Axes实例,Axes实例几乎包含了我们要介绍的matplotlib组成元素,例如坐标轴、刻度、标签、线和标记等。Axes实例有x轴和y轴属性,也就是可以使用Axes.xaxis和Axes.yaxis来控制x轴和y轴的相关组成元素,例如刻度线、刻度标签、刻度线定位器和刻度标签格式器。
这么多组成元素该如何操作呢?很幸运,matplotlib为我们准备了快速入门通道,那就是matplotlib.pyplot模块的API,通过调用API中的函数,我们就可以快速了解应该如何绘制这些组成元素了,例如matplotlib.pyplot.xlim()和matplotlib.pyplot.ylim()就是控制x轴和y轴的数值显示范围。下面,我们就用图1.1来初识绘制matplotlib的图表组成元素的主要函数。
图1.1
本章我们以图1.1为讲解切入点,从这些函数的函数功能、调用签名、参数说明和调用展示四个方面来全面阐述API函数的使用方法和技术细节。帮助读者初步了解matplotlib。
1.2 准备数据
我们导入第三方包NumPy和快速绘图模块pyplot,其中科学计算包NumPy是matplotlib库的基础,也就是说,matplotlib库是建立在NumPy基础之上的Python绘图库。图1.1的数据生成代码实现如下:
import matplotlib.pyplot as plt
import numpy as np
现在,我们就可以定义一些完成绘制图1.1所需要的数据了,代码如下:
x = np.linspace(0.5,3.5,100)
y = np.sin(x)
y1 = np.random.randn(100)
其中,函数linspace(0.5,3.5,100)是表示在0.5至3.5之间均匀地取100个数,函数randn(100)表示在标准正态分布中随机地取100个数。
1.3 绘制matplotlib图表组成元素的函数用法
下面我们用函数的形式学习绘图,反过来,再用绘图来认识函数。需要注意的是,下面函数中的位置参数用参数名称本身进行调用签名的讲解,关键字参数用图1.1中的实际图形展示样式进行调用签名的说明。
1.3.1 函数plot()——展现变量的趋势变化
函数功能:展现变量的趋势变化。
调用签名:plt.plot(x,y,ls="-",lw=2,label="plot figure")
参数说明
● x:x轴上的数值。
● y:y轴上的数值。
● ls:折线图的线条风格。
● lw:折线图的线条宽度。
● label:标记图形内容的标签文本。
调用展示
(1)代码实现
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.cos(x)
plt.plot(x,y,ls="-",lw=2,label="plot figure")
plt.legend()
plt.show()
(2)运行结果
运行结果如图1.2所示。
图1.2
1.3.2 函数scatter()——寻找变量之间的关系
函数功能:寻找变量之间的关系。
调用签名:plt.scatter(x,y1,c="b",label="scatter figure")
参数说明
● x:x轴上的数值。
● y:y轴上的数值。
● c:散点图中的标记的颜色。
● label:标记图形内容的标签文本。
调用展示
(1)代码实现
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.random.rand(1000)
plt.scatter(x,y,label="scatter figure")
plt.legend()
plt.show()
(2)运行结果
运行结果如图1.3所示。
图1.3
1.3.3 函数xlim()——设置x轴的数值显示范围
函数功能:设置x轴的数值显示范围。
调用签名:plt.xlim(xmin,xmax)
参数说明
● xmin:x轴上的最小值。
● xmax:x轴上的最大值。
● 平移性:上面的函数功能,调用签名和参数说明同样可以平移到函数ylim()上。
调用展示
(1)代码实现
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.random.rand(1000)
plt.scatter(x,y,label="scatter figure")
plt.legend()
plt.xlim(0.05,10)
plt.ylim(0,1)
plt.show()
(2)运行结果
运行结果如图1.4所示。
图1.4
1.3.4 函数xlabel()——设置x轴的标签文本
函数功能:设置x轴的标签文本。
调用签名:plt.xlabel(string)
参数说明
● string:标签文本内容。
● 平移性:上面的函数功能,调用签名和参数说明同样可以平移到函数ylabel()上。
调用展示
(1)代码实现
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.sin(x)
plt.plot(x,y,ls="-.",lw=2,c="c",label="plot figure")
plt.legend()
plt.xlabel("x-axis")
plt.ylabel("y-axis")
plt.show()
(2)运行结果
运行结果如图1.5所示。
图1.5
1.3.5 函数grid()——绘制刻度线的网格线
函数功能:绘制刻度线的网格线。
调用签名:plt.grid(linestyle=":",color="r")
参数说明
● linestyle:网格线的线条风格。
● color:网格线的线条颜色。
调用展示
(1)代码实现
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.sin(x)
plt.plot(x,y,ls="-.",lw=2,c="c",label="plot figure")
plt.legend()
plt.grid(linestyle=":",color="r")
plt.show()
(2)运行结果
运行结果如图1.6所示。
图1.6
1.3.6 函数axhline()——绘制平行于x轴的水平参考线
函数功能:绘制平行于x轴的水平参考线。
调用签名:plt.axhline(y=0.0,c="r",ls="--",lw=2)
参数说明
● y:水平参考线的出发点。
● c:参考线的线条颜色。
● ls:参考线的线条风格。
● lw:参考线的线条宽度。
● 平移性:上面的函数功能,调用签名和参数说明同样可以平移到函数axvline()上。
调用展示
(1)代码实现
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.sin(x)
plt.plot(x,y,ls="-.",lw=2,c="c",label="plot figure")
plt.legend()
plt.axhline(y=0.0,c="r",ls="--",lw=2)
plt.axvline(x=4.0,c="r",ls="--",lw=2)
plt.show()
(2)运行结果
运行结果如图1.7所示。
图1.7
1.3.7 函数axvspan()——绘制垂直于x轴的参考区域
函数功能:绘制垂直于x轴的参考区域。
调用签名:plt.axvspan(xmin=1.0,xmax=2.0,facecolor="y",alpha=0.3)。
参数说明
● xmin:参考区域的起始位置。
● xmax:参考区域的终止位置。
● facecolor:参考区域的填充颜色。
● alpha:参考区域的填充颜色的透明度。
● 平移性:上面的函数功能、调用签名和参数说明可以平移到函数axhspan()上。
调用展示
(1)代码实现
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.sin(x)
plt.plot(x,y,ls="-.",lw=2,c="c",label="plot figure")
plt.legend()
plt.axvspan(xmin=4.0,xmax=6.0,facecolor="y",alpha=0.3)
plt.axhspan(ymin=0.0,ymax=0.5,facecolor="y",alpha=0.3)
plt.show()
(2)运行结果
运行结果如图1.8所示。
图1.8
1.3.8 函数annotate()——添加图形内容细节的指向型注释文本
函数功能:添加图形内容细节的指向型注释文本。
调用签名:plt.annotate(string,xy=(np.pi/2,1.0),xytext=((np.pi/2)+0.15,1.5),weight="bold",color="b", arrowprops=dict(arrowstyle="->",connectionstyle="arc3",color="b"))。
参数说明
● string:图形内容的注释文本。
● xy:被注释图形内容的位置坐标。
● xytext:注释文本的位置坐标。
● weight:注释文本的字体粗细风格。
● color:注释文本的字体颜色。
● arrowprops:指示被注释内容的箭头的属性字典。
调用展示
(1)代码实现
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.sin(x)
plt.plot(x,y,ls="-.",lw=2,c="c",label="plot figure")
plt.legend()
plt.annotate("maximum",
xy=(np.pi/2,1.0),
xytext=((np.pi/2)+1.0,.8),
weight="bold",
color="b",
arrowprops
=dict(arrowstyle="->",connectionstyle="arc3",color="b"))
plt.show()
(2)运行结果
运行结果如图1.9所示。
图1.9
1.3.9 函数text()——添加图形内容细节的无指向型注释文本
函数功能:添加图形内容细节的无指向型注释文本。
调用签名:plt.text(x,y,string,weight="bold",color="b")。
参数说明
● x:注释文本内容所在位置的横坐标。
● y:注释文本内容所在位置的纵坐标。
● string:注释文本内容。
● weight:注释文本内容的粗细风格。
● color:注释文本内容的字体颜色。
调用展示
(1)代码实现
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.sin(x)
plt.plot(x,y,ls="-.",lw=2,c="c",label="plot figure")
plt.legend()
plt.text(3.10,0.09,"y=sin(x)",weight="bold",color="b")
plt.show()
(2)运行结果
运行结果如图1.10所示。
图1.10
1.3.10 函数title()——添加图形内容的标题
函数功能:添加图形内容的标题。
调用签名:plt.title(string)。
参数说明
● string:图形内容的标题文本。
调用展示
(1)代码实现
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.sin(x)
plt.plot(x,y,ls="-.",lw=2,c="c",label="plot figure")
plt.legend()
plt.title("y=sin(x)")
plt.show()
(2)运行结果
运行结果如图1.11所示。
图1.11
1.3.11 函数legend()——标示不同图形的文本标签图例
函数功能:标示不同图形的文本标签图例。
调用签名:plt.legend(loc="lower left")。
参数说明
● loc:图例在图中的地理位置。
调用展示
(1)代码实现
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.sin(x)
plt.plot(x,y,ls="-.",lw=2,c="c",label="plot figure")
plt.legend(loc="lower left")
plt.show()
(2)运行结果
运行结果如图1.12所示。
图1.12
1.4 函数组合应用
1.3节将绘制图1.1的重要组成元素的函数从函数功能、调用签名、参数说明和调用展示等方面讲解使用方法,进一步,在调用展示中又通过代码实现和运行结果两方面详细解释了绘制这些组成元素的函数的使用方法。因此,通过这些函数的多维度学习,读者基本可以将图1.1中的内容很好地复现出来,接下来,就让我们看看绘制图1.1的源代码,如下所示。
在上面的源代码中,除了用线框圈起来的部分我没有阐述,其余部分都已经介绍过了,线框部分会在接下来的章节中详细给大家讲解。现在,读者就动手输入上面的代码,看看输出结果是什么样的?能否感受到matplotlib绘图的精细与精美?