《模块五 Matplotlib实现数据可视化电子课件Python数据分析与应用 .pptx》由会员分享,可在线阅读,更多相关《模块五 Matplotlib实现数据可视化电子课件Python数据分析与应用 .pptx(121页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、模块五 Matplotlib 实现数据可视化电子课件Python 数据分析与应用 模块5Matplotlib 实现数据可视化模块5Matplotlib 实现数据可视化 Matplotlib 首次发表于2007 年,由于在函数设计上参考了MA TL AB,其名字以“Mat”开头,中间的“plot”表示绘图这一作用,而结尾的“lib”则表示它是一个集合。近年来,Matplotlib 在开源社区的推动下,在科学计算领域得到了广泛的应用,成为了Py thon 中应用非常广的绘图工具包之一。Matplotlib 中应用最广的是matplotlib.pyplot 模块。本模块将讲述基础统计图形的绘制方法。
2、目 录C O N T E N T01 0203Matplotlib 基础案例:人口数据分析Matplotlib 数据可视化Matplotliblib 基础5.1 Matplotlib 库是专门用于开发图表(包括3D 图表)的,近年来被广泛应用于科技领域。Matplotlib 的主要任务之一就是提供一套表示和操作图形对象以及它的内部对象的函数和工具。pyplot 是Matplotlib 的内部模块,该模块提供操作Matplotlib 库的经典Py thon 编程接口,有着自己的命名空间,需要单独导入NumPy 库。matplotlib.pyplot(以下简称pyplot)是一个命令风格函数的集合
3、,使Matplotlib 的机制更像MA TL AB。每个绘图函数都可对图形进行一些更改,如创建图形,在图形中创建绘图区域,在绘图区域绘制一些线条,使用标签装饰绘图等。在pyplot 中,各种状态跨函数调用保存,以便跟踪诸如当前图形和绘图区域之类的东西,并且绘图函数始终指向当前轴域。5.1 Matplotlib 基础5.1.1 pyplot 基础语法5.1 Matplotlib 基础5.1.1 pyplot 基础语法pyplot 基本绘图流程主要分为3 个部分,如图5-1 所示。图5-1pyplot 基本绘图流程5.1 Matplotlib 基础5.1.1 pyplot 基础语法1.创建画布与
4、创建子图 第一部分的主要作用是构建出一张空白的画布,并可以选择是否将整个画布划分为多个部分,方便在同一幅图上绘制多个图形。当只需要绘制一幅简单的图形时,这部分可以省略。pyplot 中创建画布及创建并选中子图的常用函数如表5-1 所示。5.1 Matplotlib 基础5.1.1 pyplot 基础语法2.添加画布内容 第二部分是绘图的主题部分。其中的添加标题、添加坐标轴名称、绘制图形等步骤是并列的,没有先后顺序,可以先绘制图形,也可以先添加各类标签。但是添加图例一定要在绘制图形之后。pyplot 中添加各类标签和图例的常用函数如表5-2 所示。5.1 Matplotlib 基础5.1.1 p
5、yplot 基础语法3.保存与显示图形 第三部分主要用于保存与显示图形,这部分内容的常用函数只有两个,且参数很少,如表5-3 所示。5.1 Matplotlib 基础5.1.1 pyplot 基础语法 最简单的绘图可以省略第一部分,而后直接在默认的画布上进行图形绘制,如下例所示。首先要导入pyplot 模块,并将其命名为plt。In 1:impor tmatplotlib.pyplotasplt 导入这个模块时,plt 对象及其图像处理功能已被实例化且可以使用。因此,把数据传给plt 函数,然后直接使用即可。In 2:plt.plot(1,2,3,4)Out 2:结果显示生成了一个Line2D
6、 对象。该对象为一条直线,数据点用蓝线串在一起,它表示图表中各数据点的线性延伸趋势,如图5-2 所示。5.1 Matplotlib 基础5.1.1 pyplot 基础语法图5-2 简单绘图示例 如果只是将一个数字列表或数组传给plt.plot 函数,Matplotlib 就会假定所传入的是图表的y 值,于是将其与一个序列的x 值对应起来,x 的取值依次为0、1、2、3。5.1 Matplotlib 基础5.1.1 pyplot 基础语法 通常,图形表示的是一对对的(x,y)。因此,如果要正确定义图表,就必须定义两个数组,其中第一个数组为x 轴的各个值,第二个数组为y 轴的值。一个简单的不含子图
7、绘制的标准绘图流程如下例所示,图形如图5-3 所示。In3:import matplotlib.pyplot as pltimport numpy as npx=np.arange(0,np.pi*2,0.01)y1=np.sin(x)y2=np.cos(x)plt.title(sin(x)&cos(x)#添加标题plt.xlabel(x)#添加x轴名称plt.ylabel(y)#添加y轴名称plt.xlim(0,np.pi*2)#规定x轴范围5.1 Matplotlib 基础plt.ylim(-1,1)#规定y 轴范围plt.xticks(0,1,2,3,4,5,6)#规定x 轴刻度plt.
8、y ticks(-1,-1/2,0,1/2,1)#规定y 轴刻度plt.plot(x,y1,x,y2)plt.legend($sin(x)$,$cos(x)$)plt.sav efig(f:/sin.png)5.1.1 pyplot 基础语法5.1 Matplotlib 基础此外,plot 函数还可以接收第三个参数,用于描述数据点在图标中的显示方式,如图5-4 所示。图5-3 标准绘图示例5.1.1 pyplot 基础语法5.1 Matplotlib 基础In4:import matplotlib.pyplot as pltimport numpy as npx=np.arange(0,np.
9、pi*2,0.01)y1=np.sin(x)y2=np.cos(x)plt.title(sin(x)&cos(x)#添加标题plt.xlabel(x)#添加x轴名称plt.ylabel(y)#添加y轴名称plt.xlim(0,np.pi*2)#规定x轴范围plt.ylim(-1,1)#规定y轴范围plt.xticks(0,1,2,3,4,5,6)#规定x轴刻度plt.yticks(-1,-0.5,0,0.5,1)#规定y轴刻度plt.plot(x,y1,x,y2,.)plt.legend($sin(x)$,$cos(x)$)plt.savefig(f:/sin1.png)5.1.1 pyplo
10、t 基础语法5.1 Matplotlib 基础5.1.1 pyplot 基础语法图5-4 不同线形示例Matplotlib 还可以在同一图形中绘制出多种不同的趋势图,如图5-5 所示。5.1 Matplotlib 基础5.1.1 pyplot 基础语法In5:import matplotlib.pyplot as pltimport numpy as npx=np.arange(0,np.pi*2,0.01)y1=np.sin(x)y2=np.sin(x-np.pi/2)y3=np.sin(x+np.pi/2)plt.xlabel(x)plt.ylabel(y)plt.xlim(0,np.pi
11、*2)plt.ylim(-1,1)plt.xticks(0,1,2,3,4,5,6)plt.yticks(-1,-0.5,0,0.5,1)plt.plot(x,y1,b-,x,y2,r-,x,y3,g)plt.savefig(f:/sin2.png)5.1 Matplotlib 基础5.1.1 pyplot 基础语法图5-5 不同趋势示例 到目前为止,我们所用的pyplot 命令都是绘制单个图形的。pyplot 命令也可以同时绘制多个图形,而在每个图形中,又可以绘制几个不同的子图。subplot()函数不仅可以将图形分为不同的绘图区域,还能激活特定子图,以便用命令控制它。subplot()函数
12、用参数设置分区模式和当前子图。subplot()函数的参数由三个整数组成:第一个数字决定图形沿垂直方向被分为几部分,第二个数字决定图形沿水平方向被分为几部分,第三个数字设定可以直接用命令控制的子图。5.1 Matplotlib 基础plt.plot(t,y1,b-.)plt.subplot(212)5.1.1 pyplot 基础语法 下面绘制两种三角函数(正弦和余弦函数)趋势图。最佳方式是把画布分为上下两个向水平方向延伸的子图,如图5-6 所示。因此,作为参数传入的两个数字应分别为211 和212。In6:import matplotlib.pyplot as pltimport numpy
13、as npt=np.arange(0,5,0.1)y1=np.sin(2*np.pi*t)y2=np.cos(2*np.pi*t)plt.subplot(211)plt.xlabel(x)plt.ylabel(y)plt.xticks(0,1,2,3,4,5)plt.yticks(-1,-0.5,0,0.5,1)plt.xlabel(x)plt.ylabel(y)plt.xticks(0,1,2,3,4,5,6)plt.yticks(-1,-0.5,0,0.5,1)plt.plot(t,y2,r-)plt.savefig(f:/5-6.png)5.1 Matplotlib 基础5.1.1 py
14、plot 基础语法图5-6 分为上下两个子图还可以把图形分为左右两个子图。这时,subplot()函数的参数为121和122,如图5-7 所示。图5-7 分为左右两个子图5.1 Matplotlib 基础5.1.1 pyplot 基础语法In7:import matplotlib.pyplot as pltimport numpy as npt=np.arange(0,1,0.05)y1=np.sin(2*np.pi*t)y2=np.cos(2*np.pi*t)plt.subplot(121)plt.xlabel(x)plt.ylabel(y)plt.xticks(0,0.2,0.4,0.6,
15、0.8,1)plt.yticks(-1,-0.5,0,0.5,1)plt.plot(t,y1,b-.)plt.subplot(122)plt.xlabel(x)plt.ylabel(y)plt.xticks(0,0.2,0.4,0.6,0.8,1)plt.yticks(-1,-0.5,0,0.5,1)plt.plot(t,y2,r-)plt.savefig(f:/5-7.png)5.1 Matplotlib 基础5.1.2 设置图形属性1.添加文本根据前例,标题的添加用title()函数即可,xlabel()和ylabel()函数专门用于添加轴标签,把要显示的文本以字符串形式传给这两个函数作为
16、参数。还可以用关键字参数修改属性。例如,可以修改标题的字体,使用更大的字号;指定轴标签的颜色为灰色,从而反衬出图形的标题,如图5-8 所示。图5-8 设置关键字参数5.1 Matplotlib 基础5.1.2 设置图形属性In8:import matplotlib.pyplot as pltimport numpy as npx=np.arange(0,np.pi*2,0.01)y1=np.sin(x)y2=np.cos(x)plt.title(sin(x)&cos(x),fontsize=20,fontname=Times New Roman)plt.xlabel(x,color=gray)
17、plt.ylabel(y,color=gray)plt.xlim(0,np.pi*2)plt.ylim(-1,1)plt.xticks(0,1,2,3,4,5,6)plt.yticks(-1,-0.5,0,0.5,1)plt.plot(x,y1,x,y2)plt.legend($sin(x)$,$cos(x)$)plt.savefig(f:/5-8.png)5.1 Matplotlib 基础5.1.2 设置图形属性Matplotlib 的功能不限于此,pyplot 允许在图形任意位置添加文本。这个功能由t ext()函数来实现。其语法如下。text(x,y,s,fontdict=None,*k
18、wargs)其中,参数x、y 为文本在图形中位置的坐标;s 为要添加的字符串;font dict(可选)为文本要使用的字体;最后,还可以使用关键字参数。t ext()函数的前两个参数为标签在图形中的位置坐标,所以使用数据点的坐标作为标签的坐标,但每个标签的值较相应数据点的值有一点偏差,如图5-9 所示。5.1 Matplotlib 基础5.1.2 设置图形属性In9:import matplotlib.pyplot as pltimport numpy as npx=np.arange(0,np.pi*2,0.01)y=np.sin(x)plt.title(sin(x)plt.xlabel(x
19、)plt.ylabel(y)plt.xticks(0,1,2,3,4,5,6)plt.yticks(-1,-0.5,0,0.5,1)plt.text(0.1,0,(0,0)#设置第一个点的标签plt.text(1.2,0.8,($pi/2,1)$)#设置第二个点的标签plt.text(3.14,0.1,($pi,0)$)#设置第三个点的标签plt.text(4.1,-0.8,($3pi/2,-1)$)#设置第四个点的标签plt.text(5.5,0.1,($2pi,0)$)#设置第五个点的标签plt.plot(x,y)5.1 Matplotlib 基础5.1.2 设置图形属性图5-9 添加标签
20、示例Matplotlib 是专门为科学圈开发的图形库,它整合了LaT eX 表达式,支持在图形中插入数学表达式。将表达式内容置于两个$符号之间,可在文本中添加LaT eX表达式。解释器会将该符号之间的文本识别成LaT eX 表达式,把它们转换为数学表达式、公式、数学符号或希腊字母等,然后在图形中显示出来。还可以使用关键字参数进一步丰富图形中的文本。例如,添加描述图形各数据点趋势的公式,并为公式添加一个彩色边框,如图5-10 所示。5.1 Matplotlib 基础5.1.2 设置图形属性In10:import matplotlib.pyplot as pltimport numpy as np
21、x=np.arange(0,np.pi*2,0.01)y=np.sin(x)plt.title(sin(x),fontsize=20,fontname=Times New Roman)plt.xlabel(x)plt.ylabel(y)plt.xticks(0,1,2,3,4,5,6)plt.yticks(-1,-0.5,0,0.5,1)plt.text(4.5,0.6,$y=sin(x)$,fontsize=20,bbox=facecolor:yellow,alpha:0.2)plt.plot(x,y)5.1 Matplotlib 基础5.1.2 设置图形属性图5-10 在图形中添加数学公式
22、2.添加网格图形中可以添加的另一个元素是网格。添加网格能更好地理解图形中每个数据点的位置,因此很有必要。在图形中添加网格很简单,直接在代码中加入grid()函数,传入参数T rue 即可,如图5-11 所示。5.1 Matplotlib 基础5.1.2 设置图形属性In11:import matplotlib.pyplot as pltimport numpy as npx=np.arange(0,np.pi*2,0.01)y=np.sin(x)plt.title(sin(x),fontsize=20,fontname=Times New Roman)plt.xlabel(x)plt.ylab
23、el(y)plt.xticks(0,1,2,3,4,5,6)plt.yticks(-1,-0.5,0,0.5,1)plt.text(4.5,0.6,$y=sin(x)$,fontsize=20,bbox=facecolor:yellow,alpha:0.2)plt.grid(True)plt.plot(x,y)5.1 Matplotlib 基础5.1.2 设置图形属性图5-11 在图形中添加网格5.1 Matplotlib 基础5.1.2 设置图形属性3.添加图例 每一个图形都应该有的元素是图例。pyplot 专门提供了legend()函数,用于操作该类对象,如图5-12 和图5-13 所示。
24、In12:import matplotlib.pyplot as pltimport numpy as npx=np.arange(0,np.pi*2,0.01)y1=np.sin(x)y2=np.cos(x)plt.title(sin(x)&cos(x)plt.xlabel(x)plt.ylabel(y)plt.xlim(0,np.pi*2)plt.ylim(-1,1)plt.xticks(0,1,2,3,4,5,6)plt.yticks(-1,-0.5,0,0.5,1)plt.plot(x,y1,x,y2)plt.legend($sin(x)$,$cos(x)$,loc=0)5.1 Mat
25、plotlib 基础5.1.2 设置图形属性图5-12 图例在最佳位置 图5-13 图例在上方居中位置5.1 Matplotlib 基础5.1.2 设置图形属性 图例的位置由loc 关键字控制,其取值范围为010。每个数字代表图形中的一处位置,如表5-4 所示。Matplotlib 数 据 可视化5.25.2Matplotlib 数据可视化5.2.1 散点图 散点图(scatt erdiagram)又称为散点分布图,是以一个特征为横坐标,以另一个特征为纵坐标,利用坐标点(散点)的分布形态反映特征间的统计关系的一种图形。值由点在图表中的位置表示,类别由图表中的不同标记表示,通常用于比较跨类别的数
26、据。散点图可以提供以下两类关键信息。(1)特征之间是否存在数值或数量的关联趋势,关联趋势是线性的还是非线性的。(2)如果某一个点或某几个点偏离大多数点,则这些点是离群值。通过散点图可以一目了然,从而进一步分析离群值是否在建模分析中产生很大的影响。散点图通过散点的疏密程度和变化趋势表示两个特征的数量关系。如果有3 个特征,若其中一个特征为类别型,散点图改变不同特征的点的形状或颜色,即可了解两个数值型特征和这个类别型特征之间的关系。5.2Matplotlib 数据可视化5.2.1 散点图pyplot 中绘制散点图的函数为scatt er(),其使用方法如下。pyplot.scatt er(x,y,
27、s=None,c=None,mark er=None,cmap=None,nor m=None,vmin=None,vmax=None,alpha=None,linewidths=None,v er ts=None,edgecolor s=None,hold=None,data=None,*kwar gs)scatt er()函数常用参数及其说明如表5-5 所示。5.2Matplotlib 数据可视化5.2.1 散点图利用scatt er()函数绘制散点图,如下例所示。图形如图5-14 所示。5.2Matplotlib 数据可视化5.2.1 散点图In 13:impor tmatplotlib
28、.pyplotaspltimpor tnumpyasnpimpor tmatplotlibx=np.arange(0.0,50.0,0.5)y=x*1.3+np.random.rand(*x.shape)*30.0plt.scatt er(x,y,c=r,mark er=.)plt.xlabel(x)plt.ylabel(y)plt.show()5.2Matplotlib 数据可视化5.2.1 散点图图5-14 散点图示例 使用不同颜色、不同形状的点,可以绘制不同趋势的散点图,如图5-15 所示。图5-15 多趋势散点图示例5.2Matplotlib 数据可视化5.2.1 散点图In 14:i
29、mpor tmatplotlib.pyplotaspltimpor tnumpyasnpimpor tmatplotlibx=np.arange(0.0,50.0,0.5)y1=x*1.3+np.random.rand(*x.shape)*30.0y2=x*0.5+np.random.rand(*x.shape)*30.0plt.scatt er(x,y1,mark er=.)plt.scatt er(x,y2,mark er=*)plt.xlabel(x)plt.ylabel(y)plt.show()5.2Matplotlib 数据可视化5.2.2 线形图 在图形的所有类型中,线形图最简单。
30、线形图的各个数据点由一条线来连接。一对对(x,y)值组成的数据点在图形中的位置取决于两条轴的刻度范围。若要绘制一个普通的数学函数的图形,只需绘制数学函数生成的一系列数据点。为此,需要创建两个NumPy 数组。首先,创建包含x 值的数组,用作x 轴。用np.arange()函数定义一个元素依次递增的序列,然后用np.sinx()函数可以直接求得这一系列x 值所对应的y 值,如下例所示。图形如图5-16 所示。In 15:impor tmatplotlib.pyplotaspltimpor tnumpyasnpx=np.arange(-2*np.pi,2*np.pi,0.01)y=np.sin(2
31、*x)/xplt.plot(x,y)图5-16 线形图表示数学函数5.2Matplotlib 数据可视化5.2.2 线形图 我们也可以将一组函数的图形画在一张图上。Matplotlib 自动为每条线分配一种不同的颜色。几个函数的图像使用相同的刻度范围,即每个序列的数据点使用相同的x 轴和y 轴。Figur e 对象会先记录先前的命令,每次调用plot()函数都会考虑之前是怎么调用的,并根据函数的调用方法实现相应的效果,直到该对象不再显示为止,如下例所示。图形如图5-17 所示。In 16:impor tmatplotlib.pyplotaspltimpor tnumpyasnpx=np.ara
32、nge(-2*np.pi,2*np.pi,0.01)y1=np.sin(x)/xy2=np.sin(3*x)/xy3=np.sin(4*x)/xplt.plot(x,y1)plt.plot(x,y2)plt.plot(x,y3)5.2Matplotlib 数据可视化5.2.2 线形图图5-17 线形图表示三个数学函数 可以根据需要自己选择线形、颜色等。用plot()函数的第三个参数指定颜色、线形,把这些设置所用的字符编码放到同一个字符串即可。颜色编码如表5-6 所示,图形如图5-18 所示。5.2Matplotlib 数据可视化5.2.2 线形图图5-18 用字符编码指定颜色和线形5.2Mat
33、plotlib 数据可视化5.2.2 线形图x 轴的数值范围为(-2,2),但是刻度标签默认使用数值形式。我们用 的倍数代替数值,需要使用含有LaT eX 表达式的字符串,如下例所示。图形如5-19 所示。In 17:impor tmatplotlib.pyplotaspltimpor tnumpyasnpx=np.arange(-2*np.pi,2*np.pi,0.01)y1=np.sin(x)/xy2=np.sin(3*x)/xy3=np.sin(4*x)/xplt.plot(x,y1,k-,linewidth=3)plt.plot(x,y2,m-.)plt.plot(x,y3,color
34、=#87a3cc,linestyle=-)5.2Matplotlib 数据可视化5.2.2 线形图图5-19 改进刻度标签5.2Matplotlib 数据可视化5.2.2 线形图In 18:impor tmatplotlib.pyplotaspltimpor tnumpyasnpx=np.arange(-2*np.pi,2*np.pi,0.01)y1=np.sin(x)/xy2=np.sin(3*x)/xy3=np.sin(4*x)/xplt.plot(x,y1)plt.plot(x,y2)plt.plot(x,y3)plt.xticks(-2*np.pi,-np.pi,0,np.pi,2*n
35、p.pi,$-2 pi$,$-pi$,$0$,$pi$,$2 pi$)plt.y ticks(-1,0,+1,+2,+3,+4,$-1$,$0$,$+1$,$+2$,$+3$,$+4$)plt.sav efig(f:/5-19.png)5.2Matplotlib 数据可视化5.2.2 线形图 在上述所有的线性图中,x 轴和y 轴总是置于Figur e 的边缘(与图像的边缘重合)。我们可以改变坐标轴的位置显示,让两条轴穿过原点(0,0),也就是笛卡儿坐标轴。首先用gca()函数获取Ax es 对象,接着通过这个对象指定每条边的位置:右、左、下、上,选择组成图形边框的每条边。使用set_color
36、()函数把颜色设置成none,删除和坐标轴不符合的边(右和上)。然后,用set_position()函数移动x 轴和y 轴相符的边框,使其穿过原点(0,0)。5.2Matplotlib 数据可视化5.2.2 线形图In 19:impor tmatplotlib.pyplotaspltimpor tnumpyasnpx=np.arange(-2*np.pi,2*np.pi,0.01)y1=np.sin(x)/xy2=np.sin(3*x)/xy3=np.sin(4*x)/xplt.plot(x,y1)plt.plot(x,y2)plt.plot(x,y3)plt.xticks(-2*np.pi,
37、-np.pi,0,np.pi,2*np.pi,$-2 pi$,$-pi$,$0$,$pi$,$2 pi$)plt.y ticks(-1,0,+1,+2,+3,+4,$-1$,$0$,$+1$,$+2$,$+3$,$+4$)5.2Matplotlib 数据可视化5.2.2 线形图ax=plt.gca()ax.spines right.set-color(none)ax.spines t op.set-color(none)ax.xaxis.set-ticks-position(bott om)ax.spines bott om.set-position(data,0)ax.yaxis.set-t
38、icks-position(lef t)ax.spines lef t.set-position(data,0)5.2Matplotlib 数据可视化5.2.2 线形图这时,两条轴在图表中部位置交叉,这个位置就是笛卡儿坐标系的原点,如图5-20 所示。图5-20 笛卡儿坐标系5.2Matplotlib 数据可视化5.2.2 线形图 用箭头标明曲线上某一数据点的位置非常有用。Matplotlib 库的annotat e()函数特别适用于添加注释。annotat e()函数有多个关键字参数,这些参数可以改善显示效果,如下例所示。图形如图5-21 所示。In 20:impor tmatplotlib
39、.pyplotaspltimpor tnumpyasnpx=np.arange(-2*np.pi,2*np.pi,0.01)y1=np.sin(x)/xy2=np.sin(3*x)/xy3=np.sin(4*x)/xplt.plot(x,y1)plt.plot(x,y2)plt.plot(x,y3)5.2Matplotlib 数据可视化5.2.2 线形图plt.xticks(-2*np.pi,-np.pi,0,np.pi,2*np.pi,$-2 pi$,$-pi$,$0$,$pi$,$2 pi$)plt.y ticks(-1,0,+1,+2,+3,+4,$-1$,$0$,$+1$,$+2$,$
40、+3$,$+4$)plt.annotat e(r$lim_x t o0 frac sin(x)x=1$,xy=0,1,xy coor ds=data,xy t ext=30,30,fontsize=16,t ext coor ds=o ffsetpoints,arr owpr ops=dict(arr owstyle=,connectionstyle=ar c3,rad=.2)ax=plt.gca()ax.spines right.set_color(none)ax.spines t op.set_color(none)ax.xaxis.set_ticks_position(bott om)a
41、x.spines bott om.set_position(data,0)ax.yaxis.set_ticks_position(lef t)ax.spines lef t.set_position(data,0)5.2Matplotlib 数据可视化5.2.2 线形图图5-21 添加数学表达式 对于p andas 库的DataFrame 数据结构,Matplotlib 很轻松就可以将其转换成线形图,只需把DataFrame 作为参数传入plot()函数,就能得到多序列线形图,如图5-22 所示。5.2Matplotlib 数据可视化5.2.2 线形图In 21:impor tp andasa
42、spddf=pd.r ead_csv(f:/lo andata8.csv)x=np.arange(68)plt.plot(x,df)plt.legend(df,loc=0)图5-22 将DataFrame 数据结构做成多序列线形图5.2Matplotlib 数据可视化5.2.3 直方图hist(x,bins=None,normed=False,color=None,stacked=False,*kwargs)直方图又称质量分布图,是统计报告图的一种,由一系列高度不等的纵向相邻矩形组成。矩形的面积与落在其x 轴所对应区间的元素数量成正比。直方图常被用于样本分布等统计研究。pyplot 用于绘制直
43、方图的函数为hist(),其常用语法如下。5.2Matplotlib 数据可视化5.2.3 直方图In 22:impor tmatplotlib.pyplotaspltimpor tnumpyasnpy=np.random.standar d_nor mal(600,2)plt.hist(y,bins=20,label=1st,2nd)plt.grid(T rue)plt.legend(loc=0)plt.xlabel(V alue)plt.ylabel(Fr equency)plt.title(Hist ogram)使用hist()函数绘制直方图,如下例所示。图形如图5-23 所示。5.2M
44、atplotlib 数据可视化5.2.3 直方图图5-23 直方图示例 我们还可以生成两个数据集堆叠的直方图。plt.hist(y,bins=20,label=1st,2nd,color=b,m,stack ed=T rue,r width=0.8)的参数“stack ed=T rue”表示堆叠的直方图,“r width=0.8”表示修改条块的相对宽度为0.8,“color=b,m”表示颜色分别取蓝色、品红,如图5-24 所示。5.2Matplotlib 数据可视化5.2.3 直方图图5-24 堆叠直方图示例In 23:impor tmatplotlib.pyplotaspltimpor tn
45、umpyasnpy=np.random.standar d_nor mal(600,2)plt.hist(y,bins=20,label=1st,2nd,color=b,m,stack ed=T rue,r width=0.8)plt.grid(T rue)plt.legend(loc=0)plt.xlabel(V alue)plt.ylabel(Fr equency)plt.title(Hist ogram)5.2Matplotlib 数据可视化5.2.4 条状图1.垂直条状图 条状图是一种常用的图表类型,它与直方图相似,只不过x 轴表示的不是数值而是类别。用Matplotlib 的b ar
46、()函数很容易生成条状图。b ar()函数的常用语法如下。b ar(lef t,height,width=0.8,bott om=None,hold=None,*kwar gs)b ar()函数常用参数及其说明如表5-8 所示。5.2Matplotlib 数据可视化5.2.4 条状图使用b ar()函数绘制条形图,如下例所示。图形如图5-25 所示。图5-25 简单条状图In 24:impor tmatplotlib.pyplotaspltimpor tnumpyasnpx=0,1,2,3,4 y=5,7,3,4,6 plt.b ar(x,y)plt.xlabel(x)plt.ylabel(y
47、)5.2Matplotlib 数据可视化5.2.4 条状图 我们还可以通过在b ar()函数中添加特定的关键字参数进一步改进条状图。把包含标准差的序列传给y err 关键字参数,就能添加标准差,如图5-26 所示。In 25:impor tmatplotlib.font_managerasfmimpor tmatplotlib.pyplotaspltimpor tnumpyasnpzhfont1=fm.FontPr oper ties(fname=C:Windows Fonts msyh.tt c)x=0,1,2,3,4 y=5,7,3,4,6 st d1=0.8,1,0.4,0.9,1.3
48、plt.title(u 条状图,fontpr oper ties=zhfont1)plt.b ar(x,y,y err=st d1,err or_kw=ecolor:0.1,capsize:6,alpha=0.7)plt.xlabel(x)plt.ylabel(y)5.2Matplotlib 数据可视化5.2.4 条状图图5-26 带有误差线的垂直条状图2.水平条状图 在实际应用中,我们常常用到水平方向的条状图。这种模式的条状图用b arh()函数实现。b ar()函数的参数和关键字参数对该函数依然有效。唯一需要注意的是,两条轴的用途与垂直条状图刚好相反。在水平条状图中,类别分布在y 轴上,数
49、值显示在x 轴上。使用b arh()函数绘制条形图如下例所示,图形如图5-27 所示。5.2Matplotlib 数据可视化5.2.4 条状图In 26:impor tmatplotlib.font_managerasfmimpor tmatplotlib.pyplotaspltimpor tnumpyasnpzhfont1=fm.FontPr oper ties(fname=C:Windows Fonts msyh.tt c)x=0,1,2,3,4 y=5,7,3,4,6 st d1=0.8,1,0.4,0.9,1.3 plt.title(u 水平条状图,fontpr oper ties=z
50、hfont1)plt.b arh(x,y,x err=st d1,err or_kw=ecolor:0.1,capsize:6,alpha=0.7)plt.xlabel(x)plt.ylabel(y)5.2Matplotlib 数据可视化5.2.4 条状图图5-27 水平条状图3.多序列条状图 条状图可以用来显示多个序列的数值,方法是把每个类别占据的空间分为多个部分。想显示几个长条,就将其分为几部分。最好增加一个额外的空间,以便区分两个相邻的类别,如下例所示。图形如图5-28 所示。5.2Matplotlib 数据可视化5.2.4 条状图In 27:impor tmatplotlib.font