第5章 Matplotlib的使用 本章学习目标  掌握Matplotlib绘制图表的流程。  掌握Matplotlib的基本绘图技巧。  掌握Matplotlib绘制散点图的方法。  掌握Matplotlib绘制直方图的方法。  掌握Matplotlib绘制饼状图的方法。  掌握Matplotlib绘制折线图的方法。  掌握Matplotlib绘制箱型图的方法。 Matplotlib是一个Python的2D库,可以跨平台绘制各种图形,Matplotlib可以用于Python脚本、Python Shell、Jutyper Notebook等工具。该库是NumPy的可视化操作界面,其设计与MATLAB非常相似。Matplotlib的主要开发者John D. Hunter于2012年去世,到2015年11月,Matplotlib 1.5支持Python 2.7~Python 3.5。 视频讲解 5.1Matplotlib绘图流程 在数据可视化过程中,Matplotlib极大地提高了开发者的生产效率,Matplotlib可以通过几行代码生成开发者想要的图形,如直方图、功率图、条形图、误差图等。Matplotlib可以通过操作图对应的相关属性,绘制出开发者定制的图表。另外,开发者可以编辑图表的标题、轴刻度、图例等相关属性。 Matplotlib库中包含pyplot模块,该模块用于绘制图形的状态机,为图形的绘制创建基本环境。创建画布后需要对图层进行基本绘制,开发者主要对子图层进行绘制,一般对于子图层习惯使用面向对象的基本方法进行绘制,可以将绘制图形分为三类简单的对象分别操作,三类图形分别对应Axes对象、Artist对象和Axis对象。 Axes对象主要用来存储子图,在一块画布中可以有多组Axes对象,该对象限制了每幅图片的基本数据范围。Artist对象是众多对象的集合,包括开发者在Axes对象中绘制的文本、图形、注释。Axis对象主要是开发者限制数据范围,包括2D的横纵坐标的范围或者3D数据的所有轴的范围,每一个Axes对象都有两个或者三个Axis对象。 具体绘图流程如图5.1所示。 图5.1绘图流程图 图5.1为绘图流程图,表5.1为对应阶段常用的基本函数及相应说明。 表5.1常用函数 阶 段函数说明 Step1figure用于创建画布(配置画布大小、分辨率) Step2add_subplot添加子图(可以配置子图的基本属性) Step3 title设置图表标题,可以指定颜色、大小、位置等 xlabel设置x轴名称,可以指定位置、颜色、字体大小等 ylabel设置y轴名称,可以指定位置、颜色、字体大小等 xlim设置x轴范围,只能确定一个数值区间ylim 设置y轴范围,只能确定一个数值区间xticks设置x轴刻度的数据与取值 yticks设置y轴刻度的数据与取值 legend设置图表的图例(可以设置图例的大小、位置、标签) Step4 savafig保存绘制的图片,可以设置图形的分辨率等基本参数 show显示图片 在后续章节中将详细讲述相关函数的使用。 第 5 章 Matplotlib的使用 Python快乐编程——数据分析与实战 5.2Matplotlib基本使用 在5.1节中学习了图形绘制的基本流程,本节将一步步实现图形的基本绘制。 视频讲解 5.2.1创建画布 在Matplotlib库中创建画布一般使用figure()函数,下面是figure()函数的定义。 matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=, clear=False, **kwargs) figure()函数的参数很多,但是在实际使用过程中一般只使用figsize,开发者可以根据开发需求设置参数。figure()函数参数具体如表5.2所示。 表5.2figure()函数参数 参数说明 num 参数类型可以为num或者string,当参数为num时,表示图片的id,如果传入的id值对应的图片存在,将会返回图片的索引; 如果不存在,创建并返回相应索引。当传入值为 string类型时,该参数代表title,窗口的标题将会被设置成title 续表 参数说明 figsize该参数用来指定图片的大小,开发者不设定任何参数时,将使用默认参数None。Matplotlib实际上将使用rc参数,rc为参数为大小为6.4×4.8(单位inches)的图片 dpi默认值为None,参数类型应为int,该参数用来指定图形的分辨率,开发者未指定相应参数时,默认使用rc参数,默认参数为100 facecolor默认参数为None,该参数用来指定图片的背景颜色,开发者未指定相应参数时,Matplotlib默认使用rc参数配置,指定参数为“w”,白色使用 edgecolor默认值为None,该参数用来指定边界颜色,默认使用rc参数配置,指定参数为“w”,背景颜色设置为白色 frameon 默认值为True,参数为bool类型,该参数为绘画图形框标志位,决定是否可以在画布上进行图形框绘画 FigureClass该参数为Figure的子集,开发者可以根据自己的需求自定义Figure实例 clear 默认值为False,参数为bool类型,当该参数为True时,将Figure自动清除,反之亦然 figure()函数有相应的返回值,返回值为创建的一个figure实例,具体代码如下。 In[1]: import matplotlib.pyplot as plt# 导入需要使用的库 In[2]: fig = plt.figure(figsize =(8,7))# 创建画布对象
通过上述代码可以看出,figure()函数返回的参数为Axes对象的引用,需要注意的是,引用是系统分配的,每次的结果不一定相同。 视频讲解 5.2.2添加子图 5.2.1节中主要讲述了使用figure()函数进行画布的创建,本节将继5.2.1节内容完善相应的代码,在5.2.1节代码的基础上进行相应的子图添加。在进行相应的绘图操作时,一般使用add_subplot()函数进行相应的子图添加,相应的四种函数具体形式如下。 add_subplot(*args, **kwargs)# 第一种函数 add_subplot(nrows, ncols, index, **kwargs)# 第二种函数 add_subplot(pos, **kwargs)# 第三种函数 add_subplot(ax)# 第四种函数 上述四种函数中,第二种最为常用,通过函数不能直接看出相应的参数,可以通过具体参数列表进行查看,add_subplot()函数参数具体如表5.3所示。 表5.3add_subplot()函数参数 参数说明 pospos是一个三位数整数,其中,第一个数字是行数,第二个数字是列数,第三个数字是子图的索引。即图add_subplot(235)与图add_subplot(2,3,5)相同。注意,Matplotlib规定所有整数必须小于10 续表 参数说明 projection 该参数表示子图的投影类型,默认值为None,代表是一个“直线”投影。取值范围为{None,'aitoff','hammer','lambert', 'mollweide','polar','straight linear',str} polar 参数为bool类型,如果为True,则等价于projection='polar' sharex, sharey表示对应的子图将具有相同的x轴或者y轴 label str类型,返回对应子图的标题 * * kwargs 该方法还接受返回的axis基类的关键字参数,具体如表5.4所示(本书只列举了一部分进行相应的说明) 除表5.3中的参数外,该函数还可以接受其他参数,add_subplot()函数额外参数具体如表5.4所示。 表5.4add_subplot()函数额外参数 参数说明 adjustable该参数为可选参数,当参数为box时,将具有自适框架的基本能力; 当参数为datalim时,将调节轴数据的限制范围 title str类型,代表对应子图的标题 xlabel str类型,代表x轴标签 xlim 元组类型,代表x轴相应的范围(left: float, right: float) xticks list类型数据,代表x轴的相应刻度函数 ylabel str类型,代表y轴标签 ylim 代表y轴相应的范围 yticks list数据,代表y轴的相应刻度函数 add_subplot()函数的返回值是一个子图对象,开发者可以在子图对象中创建许多Artist对象,具体代码如下。 In[1]: import matplotlib.pyplot as plt import numpy as np from numpy.random import randn In[2]: fig = plt.figure(figsize = (8,7))# 创建画布对象 ax1 = fig.add_subplot(1,1,1)# 画布子图对象1 并用ax1变量指向它 ax1.hist(randn(100))# 使用轴向图的代码方法创建图 Out[2]: (array([ 1., 5., 5., 14., 22., 20., 15., 10., 6., 2.]), array([-2.45661705, -1.98386145, -1.51110584, -1.03835024, -0.56559463, -0.09283903, 0.37991657, 0.85267218, 1.32542778, 1.79818339, 2.27093899]), ) 上述代码中hist()函数用来绘制直方图。上述代码中使用add_subplot()函数创建了一个1行1列的子图,并在索引值为1的子图中进行相应的绘制,本例中使用hist()函数绘制了一个柱状图(关于图形的基本绘制,本章的后续小节将详细讲述)。 视频讲解 5.2.3规定刻度与标签 在绘制完基本图形后,开发者需要使用xlabel()与ylabel()函数对坐标轴进行数据的绘制操作,为图表添加轴标签,本节将对5.2.2节中的案例进行轴标签完善。 具体函数接口如下。 matplotlib.pyplot.xlabel(xlabel, fontdict=None, labelpad=None, **kwargs) matplotlib.pyplot.ylabel(ylabel, fontdict=None, labelpad=None, **kwargs) 相关参数请查看参数表,xlabel()与ylabel()函数参数如表5.5所示。 表5.5xlabel()与ylabel()函数参数 参数说明 xlabel/ylabel string类型,表示轴标签 labelpad 标量,可选,默认为None,标签与x轴之间的点间距 **kwargs 文本属性,控制标签的外观 在5.2.2节的基础上进行代码完善,设置相应的刻度和标签,具体代码如下。 In[1]: import matplotlib.pyplot as plt import numpy as np from numpy.random import randn In[2]: fig = plt.figure(figsize =(8,7)) # 创建画布对象 ax1 = fig.add_subplot(1,1,1)# 画布子图对象1 并用ax1变量指向它 ax1.hist(randn(100)) # 使用轴向图的代码方法创建图 plt.xlabel("x轴") plt.ylabel("y轴") Out[2]: Text(0, 0.5, 'y轴') 通过上述代码可以看出,xlabel()与ylabel()函数为图表添加标签后的效果。 视频讲解 5.2.4添加图例 5.2.3节中为图形添加了轴标签,本节将为图表添加图例,Matplotlib为开发者提供了legend()函数,使开发者可以自定义图表的图例,对应函数的形式如下。 matplotlib.pyplot.legend(labels) 注意: legend()函数参数应为字符串列表。 pyplot模块的legend()函数有三种表示方式,具体如下。 1. 不带参数的legend 此类方法将自动把数据图例标签绘制到相应图形上,要配合Axes对象的plot()函数使用,具体代码如下。 line, =ax.plot([1,2,3],label = "string") ax.legend() 2. 带参数的legend 此方法最为常用,同时需要传递参数label,具体代码如下。 ax.plot([1, 2, 3]) ax.legend(['A simple line']) 3. 带处理方法的legend legend()函数允许开发者自定义处理方式,具体代码如下。 legend(handles, labels) legend()函数的基本参数如表5.6所示。 表5.6legend()函数基本参数 参数说明 handles 绘画对象的列表参数,Matplotlib允许开发中进行完全控制,针对不同的线进行相应的控制,但是需要注意的是handles和labels的长度一致 labels 对应线的说明内容,需要与handles参数一同使用,此使用方法是Matplotlib给开发者的最大使用权限,该方法最为灵活 fontsize int 或者float 或者 {'xxsmall', 'xsmall', 'small', 'medium', 'large', 'xlarge', 'xxlarge'}中的某个值,该参数用于控制图例的字体大小。如果值是数字,则大小将是以点为单位的绝对字体大小,字符串值相对于当前默认字体大小。此参数仅在未指定prop时使用 facecolor 默认值为None,控制图例的背景颜色。当使用的值为None时,Matplotlib将使用rcParams["legend.facecolor"的值。如果将该值设置为inherit,Matplotlib将使用rcParams["ax .facecolor"]的值 edgecolor 默认值为None,该参数用于控制图例的背景的边缘颜色。当值为None时将使用rcParams["legend.edgecolor"] 。如果值为inherit,它将使用rcParams["ax .edgecolor"] title 参数为str或None,用来设置图表的标题,默认值为None legend()函数的返回值是一个matplotlib.legend.Legend实例,除上述基本参数外,Matplotlib还为开发者提供了许多其他参数,本书不逐一讲述,开发者可以查阅官方文档。 本节将继续5.2.3节内容为图形添加图例,具体代码如下。 In[1]: import matplotlib.pyplot as plt import numpy as np from numpy.random import randn In[2]: fig = plt.figure(figsize =(8,7))# 创建画布对象 ax1 = fig.add_subplot(1,1,1)# 画布子图对象1 并用ax1变量指向它 ax1.hist(randn(100))# 使用轴向图的代码方法创建图 plt.xlabel("x轴") plt.ylabel("y轴") plt.legend(["testing"]) Out[2]: 通过上述代码可以看出,legend()函数返回值为一个地址(注意: 该地址不是固定的)。 视频讲解 5.2.5显示 在5.2.4节中完成了对图表添加图例,但这并不是最后一步,在添加完图例后应使用show()函数完成相应的显示操作,对应的函数如下。 matplotlib.pyplot.show(*args, **kw) 虽然该函数具有较多参数,但在使用时并不常用,本书不对该函数参数讲解。 该函数的使用代码如下。 In[1]: import matplotlib.pyplot as plt import numpy as np from numpy.random import randn In[2]: fig = plt.figure(figsize = (8,7))# 创建画布对象 ax1 = fig.add_subplot(1,1,1)# 画布子图对象1 并用ax1变量指向它 ax1.hist(randn(100)) # 使用轴向图的代码方法创建图 plt.xlabel("x轴") plt.ylabel("y轴") plt.legend("testing") plt.show() Out[2]: 通过上述代码可以看出,show()函数执行完毕后返回一张图片。 5.3Matplotlib常用技巧 在Matplotlib实际的使用过程中,会有一些常用技巧,掌握好这些技巧将大大提升开发者的开发效率,如修改配置文件、在图表中添加文件说明、使用rc参数动态配置等。本节将主要讲述在实际开发中Matplotlib的常用技巧。 视频讲解 5.3.1配置文件 在一些情况下会遇到修改字体、调整背景颜色、变换线型等需求,在之前演示的过程中并没有进行相应的演示,而是直接采用Matplotlib的默认配置,Matplotlib将这些默认的配置保存在Matplotlib的文件中,开发者可以通过修改文件中对应选项的参数进行自定义配置。文件如图5.2所示。 图5.2Matplotlib配置文件 开发者可以通过如下代码查看Matplotlib的系统配置文件路径。 path.abspath(matplotlib.matplotlib_fname())# 配置文件的绝对路径 开发者可以在相应文件夹下创建配置文件。寻找相关目录的操作具体如下。 path.abspath(matplotlib.get_configdir())# 用户的配置文件所在文件夹 找到相应的文件后,开发者可以手动修改文件,但是修改之后,Matplotlib要进行重新载入,Matplotlib提供了update()函数重载配置文件,具体代码如下。 matplotlib.rcParams.update(matplotlib.rc_params()) 实际上当导入Matplotlib时,Matplotlib会调用rc_params()函数加载相应配置,并对配置文件进行搜索,使用第一个找到的配置文件,搜索配置文件顺序如下。 (1) 当前路径: 当前程序所在路径。 (2) 用户配置路径: 使用get_cinfigdir()函数获取。 (3) 系统默认配置路径: 使用matplotlib_fname()函数获取。 Matplotlib在配置文件加载完成后会存到名为rcParmas的字典中,Matplotlib允许开发者更改相应的参数(后面章节将会详细讲述)。如果开发者想要使用默认的参数,可以使用rcdefault()函数重置配置文件,具体代码如下。 matplotlib.rcdefault() 视频讲解 5.3.2rc参数的基本配置 在5.3.1节中讲述了配置文件的基本使用,开发者可以通过修改系统的配置文件指定配置。Matplotlib加载该文件后,会读取rcParams字典参数。Matplotlib允许开发者对动态的rcParams字典数据进行修改,本节将主要讲述相关内容。 下面通过代码进行说明。 In[1]: import matplotlib.pyplot as plt import numpy as np data = np.arange(0,1.1,0.01) In[2]: plt.title("testing")# 图标标题 plt.xlabel("x")# x轴方向的轴名称 plt.ylabel("y")# y轴方向的轴名称 plt.xlim((0,1))# x轴范围 plt.ylim((0,1))# y轴范围 plt.xticks([0,0.2,0.4,0.6,0.8,1])# x轴方向刻度 plt.yticks([0,0.2,0.4,0.6,0.8,1])# y轴方向刻度 plt.plot(data,data**2)# 绘制 x轴与y轴的关系 plt.plot(data,data**4) # 绘制x 轴与y轴的关系 plt.legend(['y=x^2','y=x^4']) # 图例的使用 - plt.savefig("./testing.png") plt.show()# 显示 上述代码画出了两条基本函数线,一条为y=x^2,另一条线为y=x^4,同时设置了标题、图例等基本内容。 如果开发者想要动态地改变图形中的线型,则需要对rcParams参数进行修改,在绘制线型前进行参数的相关设置,需要添加如下代码。 plt.rcParams["lines.linestyle"] = "-." 上述语句为对线型的更改,让绘制的图形线为“.-”形式,更改后重新运行语句块的结果如图5.3所示。 图5.3更改线型后的运行结果 如果开发者想要将图形中绘制的线型变宽,则需要在绘制图形之前添加如下语句,该语句将线宽设置为3mm。 plt.rcParams["lines.linewidth"] = 3 更改线宽后的运行结果如图5.4所示。 图5.4更改线宽后的运行结果 在rcParams字典中还有很多其他的参数特性,本书中只涉及一部分,线条常用的rc参数具体如表5.7所示。 表5.7线条常用的rc参数 参数说明常用值 lines.linestyle 线条样式 默认值为“-”,可取值为“-”“--”“-.”“:”4种 lines.linewidth线条宽度 默认值为1.5,值范围为0~10 lines.marker 线条点的形状 默认值为None,可取值为“o”“D”“h”“.”“s”等20种 lines.markersize 线条点的大小 取值为0~10,默认值为1 line.linestyle参数的取值及意义具体如表5.8所示。 表5.8lines.linestyle参数的取值及意义 值说明值说明 “-”实线“-.”点线 “--”长虚线“:”短虚线 line.marker参数的取值及意义具体如表5.9所示。 表5.9lines.marker参数的取值及意义 值说明值说明 “o”圆圈“.”点 “D”菱形“s”正方形 “h”六边形1“*”星号 “H”六边形2“d”小菱形 “-”水平线“v”一角朝下的三角形 “8”八边形“ < ”一角朝左的三角形 “p”五边形“ > ”一角朝右的三角形 “,”像素^一角朝上的三角形 “+”加号“|” 竖线“None”无 “x”X 视频讲解 5.3.3中文显示配置 Matplotlib的图形默认不支持显示中文,开发者可以通过如下方法配置Matplotlib。 (1) 在程序的开始部分进行设置。 (2) 在程序的开头配置rcParams。 (3) 修改配置文件。 本节将以Windows系统为例简单介绍中文显示的基本配置。 开发者需要自行下载ttf格式的SimHei字体,并将字体文件复制到相应的文件夹中,一般保存到如下目录。 # 完整路径 【用户目录】/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf 添加完该文件后,需要对配置文件进行简单修改,开发者需要找到mpldata文件夹中的matplotlibrc文件并进行修改,修改内容如下。 (1) 将font.family与font.sansserif前的注释去除,使其生效。 (2) 在font.sansserif后添加“SimHei”,更换Matplotlib默认字符集。 (3) 将axes.unicode_minus项的值改为False并去除注释,以正确显示“”号。 (4) 在用户配置文件的路径(“用户路径/.matplotlib”)下将text.cache和fontList.json文件删除,以清除缓存。 (5) 重启JupyterNotebook重新生成字体缓存并加载配置。 至此配置完成,其他系统配置方式同Windows 大致相同,配置时只是用户目录不同。 5.4Matplotlib基本图形 5.3节讲述了Matplotlib的常用技巧,本节讲述Matplotlib基本图形。 视频讲解 5.4.1Matplotlib绘制散点图 在实际开发过程中,散点图的应用较为广泛,散点图的函数形式如下。 # 散点图函数 matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, *, data=None, **kwargs) scatter()参数具体如表5.10所示。 表5.10scatter()参数 参数说明 x, y类数组参数,支持shape(n,)形式参数 s(scalar的缩写) 参数可以为标量、类数组、shape(n,)形式参数,该参数用于控制点的大小,如果开发者不设置,则Matplotlib将默认使用rcParams['lines.smarkersize ']**2参数 c(color的缩写)参数可以为颜色或者颜色列表,用来设置散点图中点的颜色。默认值为None marker 默认值为None,点的样式。该参数可以是类的实例,也可以是特定标记的文本简写。在未指定的情况下可以使用rcParams的值["scatter.marker"]="o" cmap即Colormap,可选,默认值为None。 表示一个Colormap实例或已注册的Colormap名称。只有当c是一个浮点数数组时才使用cmap。如果没有,则默认为rc image.cmap norm即Normalize, 可选,默认值为None。 使用规范化实例将亮度数据缩放到0,1。只有当c是浮点数数组时才使用norm。如果没有,使用默认颜色normalize vmin, vmax 标量,可选,默认: 无。 vmin和vmax结合norm可对亮度数据进行归一化。如果没有,则使用颜色数组的最小值和最大值。如果传递一个norm实例,vmin和vmax将被忽略 alpha 标量,可选,默认: 无。 alpha混合值,介于0(透明)与1(不透明)之间 续表 参数说明 linewidth 标量或array_like,可选,默认值为None。 标记边缘的线宽。注意: 默认的edgecolors是face。你可能也想要改变这一点。如果没有,则默认为rcParams lines.linewidth edgecolors 颜色或颜色序列,可选,默认值为'face'。 标记的边缘颜色。可能的值如下。 “face”: 边缘的颜色总是和脸的颜色一样。 “none”: 不画patch边界。 Matplotib颜色。 对于非填充标记,edgecolors kwarg将被忽略,并强制在内部“面对” 该函数的返回值为一个散点图形,接下来将演示散点图的基本绘制,具体代码如下。 In[1]: import matplotlib.pyplot as plt import numpy as np import pandas as pd In[2]: data = pd.read_csv("./某高三班级学生的身高体重.csv",encoding = "gbk") ax1 = plt.figure(figsize = (8,7)) plt.scatter(data.values[:,0],data.values[:,1]) plt.xlabel("身高") plt.ylabel("体重") plt.legend(["节点"]) plt.title("某高中班级学生的身高与体重关系图") plt.show() 上述代码通过对班级学生的身高与体重的汇总可以看出,165cm以下同学的体重最高不超过60kg,最低不少于40kg。165cm以上身高的同学,身高主要集中在165~175cm的范围。通过对散点数据的描述,开发者可以将数据直观地展示出来。 视频讲解 5.4.2Matplotlib绘制直方图 5.4.1节中讲述了散点图的基本绘制,本节将讲述直方图的基本绘制。直方图与散点图不同,散点图更容易看出数据的分布情况,数据在坐标区域的分布情况和密集程度; 而直方图更容易看出数据大小的对比情况,直方图的具体函数如下。 matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs) bar()函数参数具体如表5.11所示。 表5.11bar()函数参数 参数说明 x标量序列,一般为直方图的数据选项 height 标量或标量序列,表示直方图的高度 width 标量或者类数组,表示直方图的宽度,默认值为0.8 bottom 标量或者类数组,表示直方图的y轴基线,默认值为0 align 默认值为center,可选参数为center或者edge,表示横杆与x坐标的对齐位置 **kwargs(其他参数) color; edgecolor; linewidth; tick_label(相关参数不重复讲解) 该函数的基本返回值为条形容器,具体代码如下。 In[1]: import matplotlib.pyplot as plt import numpy as np import pandas as pd data = pd.read_csv("./Zong.csv", encoding = "gbk") data = data.T data.sort_index() In[2]: # 绘制不同人口的基本比例 plt.figure(figsize = (8,7)) plt.bar(range(5), data.values[1,:],width = 0.5) plt.xlabel("不同类型的表示") plt.ylabel("人数") plt.xticks(range(5),data.values[0,:]) plt.title("2018年不同人口的基本情况") plt.show() 上述代码通过对数据的基本汇总,展示出函数的基本使用情况。通过上述数据的展示可以看出,2018年总人口数据已经达到了14亿,其中男性人口比女性人口多,但是接近于1∶1; 城镇人口比乡村人口多,二者差距较大。 视频讲解 5.4.3Matplotlib绘制饼状图 本节主要讲述饼状图的基本绘制,与散点图和直方图不同,饼状图可以将数据直观地占比显示,绘制饼状图的函数如下。 # 饼状图函数 matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, *, data=None) pie()函数参数具体如表5.12所示。 表5.12pie()函数参数 参数说明 x数组类型,表示楔形的大小,默认值为None explode 类数组类型,默认值为None,指定扇形的数据偏移半径的比例 labels 列表数据类型,默认值为None,为每个扇形提供标签的字符串序列 colors 类数组类型,默认值为无,一组Matplotlib颜色参数序列/列 autopct 默认值为None,参数为string或function类型,如果参数为一个字符串或函数,用其数值标记扇形,标签将被放置在扇形上。如果参数是格式字符串,则标签为fmt%pct。如果是一个函数,它将被调用 续表 参数说明 pctdistance float类型,默认值为0.6。用来说明每个扇形切片的中心与autopct生成的文本的开始之间的比值。如果autopct为None,则忽略 shadow bool类型,默认值为False,决定是否在扇形下面画一个阴影 labeldistance float类型,默认值为1.1,表示绘制饼形标签的径向距离 startangle float类型,默认值为None。如果为None,则表示从x轴逆时针旋转饼图的起始角度 radius float类型,默认值为None,表示扇形的半径。如果此参数为空,半径将被设为1 counterclock bool类型,默认值为True,指定占比方向,顺时针或逆时针 wedgeprops dict类型,默认值为None,将参数传递给对应的扇形对象。例如,可以传入wedgeprops={'linewidth': 3}来设置楔块边框线的宽度为3 textprops dict类型,默认值为None,将参数传递给文本对象 center float类型序列,默认值为(0,0),表示图表的中心位置。取值(0,0)或为两个标量的序列 frame bool类型,默认值为False。如果为True,用图表绘制坐标轴框架 rotatelabels bool类型,默认值为False。如果为True,将每个标签旋转到对应切片的角度 该函数的返回值为三个,分别是扇形实例、文本实例和自动图文集实例。下面是该函数的具体应用,具体代码如下。 In[1]: import matplotlib.pyplot as plt import numpy as np import pandas as pd data = pd.read_csv("./Zong.csv", encoding = "gbk") data = data.T data = data.sort_index() In[2]: # 绘制饼状图 plt.figure(figsize = (8,7)) plt.pie(data.values[0,1: 3],explode = [0.01,0.01],labels = ["男","女"],autopct = "%1.1f%%") plt.title("1999年男女人口比例") plt.show() 上述代码通过对男女数据的饼状图展示,方便开发者读取数据的占比情况。上述代码中显示1999年男性人数所占比例为51.4%,女性人数所占比例为48.6%。 视频讲解 5.4.4Matplotlib绘制折线图 在实际开发中,有时需要绘制折线图查看数据的基本走势,以预测未来的趋势。本节将讲述折线图的基本绘制,具体函数如下。 # 折线图函数 matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs) plot()函数参数具体如表5.13所示。 表5.13plot()函数参数 参数说明 x, y参数为类数组或标量类型; 该参数为数据点的水平与垂直坐标。若未给出参数,则默认为[0,1,2,…,n-1]。通常,这些参数是长度为n的数组。但是,也支持标量(相当于一个具有常量的数组) fmt str类型数据,表示格式字符串,例如,“ro”代表红圈。格式字符串只是快速设置基本行属性的缩写 data 索引对象,带有标记数据的对象。如果给定,则提供要在x和y中绘图的标签名称 该函数的返回值对象为一条二维数据的折线图,该函数的基本操作方式如下。 In[1]: import matplotlib.pyplot as plt import pandas as pd import numpy as np data = pd.read_csv("./Zong.csv",encoding= "gbk") data = data.T.sort_index() In[2]: plt.figure(figsize = (8,7)) plt.plot(data.index[: -1],data.values[: -1,0],linestyle = "-.") plt.xlabel("时间") plt.ylabel("值") plt.xticks(rotation = 45) plt.legend(["人口"]) plt.title("我国人口统计结果") plt.show() 上述代码中展示了我国人口从1999年至2018年的人口数据折线图,通过该图可以看出,人口数据总体呈直线增长趋势。折线图更加直观地将数据的大体走向展示出来,开发者通过分析已有数据的基本趋势,可以推测出未来人口的变化趋势。 视频讲解 5.4.5Matplotlib绘制箱型图 本节将讲述箱型图的基本绘制。在数据分析过程中,有时需要比较不同数据集的最大值、最小值、中位数等。下面是绘制箱型图的函数。 # 箱型图函数 matplotlib.pyplot.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None, manage_xticks=True, autorange=False, zorder=None, *, data=None) boxplot()函数常用参数如表5.14所示。 表5.14boxplot()函数常用参数 参数说明 x 数组或向量序列,输入数据,统计数据集 notch 参数类型为bool,默认值为None。如果为True,将产生一个缺口箱型图。如果为False,将生成矩形箱型图 sym 参数类型为str,飞行点数的默认符号 vert 参数类型为bool,如果为True(默认),则使框垂直。如果为False,则所有内容都是水平绘制的 positions 参数类型为类数组,设置方框的位置 widths 参数为标量或类数组,使用标量或序列设置每个框的宽度。默认值是0.5 labels 标签,string类型数据。长度必须与x的尺寸相容 manage_xticks bool类型,如果功能需要则调整xlim和xtick位置 boxplot()函数的不常用参数如表5.15所示。 表5.15boxplot()函数的不常用参数 参数说明 showcaps bool,可选(True),是否显示箱线图顶端和末端的两条线 showbox bool,可选(True),显示中央框 showfliers bool,可选(True),显示超出上限的异常值 showmeans bool,可选(False),显示算术平均值 capprops dict,可选(无),指定大写字母的样式 boxprops dict,可选(无),指定框的样式 whiskerprops dict,可选(无),指定胡须的样式 flierprops dict,可选(无),指定传单的样式 medianprops dict,可选(无),指定中位数的样式 meanprops dict,可选(无),指定平均值的样式 绘制箱型图的具体代码如下。 In[1]: import matplotlib.pyplot as plt import pandas as pd data = pd.read_csv("./Zong.csv",encoding = "gbk") data = data.T In[2]: plt.figure(figsize = (8,7)) plt.boxplot([data.values[1:,0],data.values[1:,1],data.values[1:,2]],notch =True ,labels = data.values[0,:3],meanline =True) plt.title("人口总和") plt.show() 通过上述代码可以看出,箱型数据的基本展示,同时能够比较年末总人口、男性人口、女性人口的最大值、最小值和中位数。 小结 本章主要讲述了在开发过程中使用Matplotlib进行绘图的基本流程及其基本使用,同时讲述了基本图形的绘制,如散点图、直方图、饼状图、折线图、箱型图。 绘制图形的基本流程包括绘制画布、添加子图并绘制、添加图例等基本绘制对象、保存图片并显示。创建画布主要使用figure()函数,目的是为绘制工作提供基本创造环境,在调用的同时一般需要通过figuresize参数设置画布的大小; 画布创建完成后需要通过add_subplot()函数添加子图,或者直接使用默认画布的大小,如果开发者添加子图将默认使用画布的大小,子图添加完毕后需要开发者进行图形的基本绘制,如规定刻度、轴数据范围,在此之后需要添加图例、标题等基本属性。最后一步是对图表的基本显示或者图片的报错。 在5.3节中主要讲述了Matplotlib的常用技巧,如配置文件的基本使用。配置文件包括三类,分别是程序运行目录中的配置文件、用户配置文件夹中的配置文件、系统默认配置文件。Matplotlib将使用首先找到的配置文件。Matplotlib实际上是将配置文件中的数据读取到rcParams的字典中,开发者可以动态地修改该文件进行相关属性的设置; 在实际使用Matplotlib的过程中,经常遇到中文显示的配置需求,Matplotlib默认不支持中文编辑,本书以Windows系统为例进行简单的中文显示配置。 在本章的后半章主要讲述了常用图形的基本绘制,每个图形都有特定的使用场景,如散点图一般用来绘制无直接因果关系的统计性数据,便于观察相关坐标的规律; 直方图则是用来比较不同项的数值大小,可以直观地反映出不同项之间的数据差距; 折线图则表示某一类数据的基本走势,一般用于数据的预判分析; 饼状图适合展示不同数据的占比,可以宏观上分析各类数据的不同占比; 箱型图是对不同项数据的总体分析。 通过对本章的学习,读者应能够掌握数据分析图表的基本绘制流程,同时能够对不同数据图表进行简单绘制。 习题 一、 选择题 1. 创建画布需要使用()函数。 A. figure()B. add_subplot() C. Figure()D. Add_subplot() 2. 使用()函数可以将配置文件重置。 A. rcdefault()B. matplotlib_fname() C. get_configdir()D. rc_params() 3. 进行数据的占比比较时使用()表示。 A. 散点图B. 直方图 C. 饼状图D. 折线图 4. 在绘制图形时需要使用()对x轴数据范围进行限制。 A. xlim()B. xticke() C. legend()D. show() 二、 简答题 1. 简单描述Matplotlib的绘图流程。 2. 试写出箱型图的应用场景。 三、 编程题 试将最近一周的温度,使用折线图进行绘制。