Python数据分析与数据挖掘 课件 第7章 Matplotlib_第1页
Python数据分析与数据挖掘 课件 第7章 Matplotlib_第2页
Python数据分析与数据挖掘 课件 第7章 Matplotlib_第3页
Python数据分析与数据挖掘 课件 第7章 Matplotlib_第4页
Python数据分析与数据挖掘 课件 第7章 Matplotlib_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章Matplotlib基础及应用主讲人:***13-10月-23Python数据分析与数据挖掘目录contentsMatplotlib简介0102Matplotlib基础知识03Pyplot的使用04Pyplot中的常用图形Matplotlib简介017.1.1

Matplotlib主要特性 Matplotlib是一个常用的Python绘图库,常与NumPy和Pandas一起结合使用,它以各种格式和跨平台的交互环境生成可达到印刷质量的图形。Matplotlib可用于Python脚本、Python和IPythonshell、JupyterNotebook、Web应用程序服务器和四个图形用户界面工具包。 Matplotlib具有良好的操作系统兼容性和图形显示底层接口兼容性,并支持几十种图形显示接口与输出格式,是Python中绘制二维、三维图表的重要可视化工具。新版的Matplotlib可以轻松实现主流的绘图风格,其中加入了许多新的程序包,实现了更加简洁新颖的API,例如Seaborn、ggplot、HoloViews、Altair和Pandas对Matplotlib的API封装的绘图功能。其主要特点:使用简单绘图语句实现复杂绘图效果;以交互式操作实现渐趋精细的图形效果;对图表的组成元素实现精细化控制;使用嵌入式的LaTeX输出具有印刷级别的图表、科学表达式和符号文本。7.1.2Matplotlib安装python-mpipinstall-Upippython-mpipinstall-Umatplotlib

对于Windows、MacOS和普通Linux平台来说,Anaconda、Canopy和ActiveState都是非常好的选择。Winpython是Windows用户的一个选项。这些发行版中已经包含了matplotlib和许多其他有用的(数据)科学工具。其安装语法如下:

使用时,只需将其导入即可:以plt作为Pyplot子模块的缩写。importmatplotlibasmplimportmatplotlib.pyplotaspltMatplotlib基础知识027.2.1导入Matplotlib

我们在作图前,需要导入matplotlib和其中的模块(如matplotlib.pyplot)。通常为了方便,设置一个常用的简写形式,本章例子中还需要导入NumPy和Pandas模块。importmatplotlibasmplimportmatplotlib.pyplotaspltimportnumpyasnpimportpandasaspd7.2.2Matplotlib图形构成

Matplotlib将数据绘制在图形(Figure)上,图形可以理解为包含其他所有绘图元素的顶级容器,其中包含所有轴(Axes)、其他Artist和画布(Canvas)。通常情况下,画布(Canvas)是一个绘图的对象,对用户而言,该对象一般不可见。在图形上看到的一切都是Artist,Artist有两种类型,即图形元素(primitives)和容器(containers)。图形元素是我们需要加入Canvas的元素,比如线条、矩形、文字等,而容器是放置这些元素的地方,例如Axis、Axes和Figure,其中Figure是顶层的Artist。1、图形(Figure)[例7-1]使用figure()方法创建新图形。

轴(Axes)是matplotlibAPI中重要的类,这是因为轴是大多数对象所在的绘图区域。在创建Figure对象之后,在作图前需要创建轴,轴是绘图基准,是图像中带数据空间的区域。如果将Figure理解为容器,即画布的载体,则具体的绘图操作是在画纸上完成,画纸可以理解为子图Subplot或更加灵活的子图--轴(Axes)。2、轴(Axes)7.2.2Matplotlib图形构成[例7-2]本例首先生成一个空白Figure,然后创建1行2列的子图,返回子图的轴对象ax1和ax2。在第1个子图的轴对象ax1上添加轴线标签X-Axis和Y-Axis,并设置轴线的数据范围:X为[0,5],Y为[-2,2]。

轴线是类似数字线的对象,是轴上的刻度。它们负责设置图形范围并生成记号(轴上的标记)和记号标签(标记记号的字符串)。一般情况下,图中可以包含两个或三个轴线对象(三维图),它们负责处理数据范围。可以使用plt.axis()或plt.xlim()等函数设置轴线范围,plt.xlabel()或者plt.ylabel()等为轴线命名,同时也可利用tick的相关方法对轴上的刻度进行修改。3、轴线(Axis)7.2.2Matplotlib图形构成[例7-3]设置轴线实例。图Figure、Axes和Axis的关系

图例是展现图表中数据组列表并通过提供线索(线条样式或颜色)来让数据组更易于识别。图例的设置与修改是通过调用legend()来实现。4、图例(legend)5、标题(title)

标题是对整个图标的说明,方便对整个图表含义的理解,通过调用plt.title()方法来实现对title内容的设置。6、网格(Grid)

有时需要在图形中添加网格,网格线方便看到图表中每个元素的精确值,而且也方便执行单点之间的对比。但是网格也会增加噪声,让看到实际的数据流变得困难。一般情况下,默认状态下无网格线,可以通过调用grid()方法实现。7.2.2Matplotlib图形构成7、图形主体内容

图形的主体内容是一张图的核心,对于二维图表而言,图形的主体内容可以是点,也可以是线条等。对应的方法分别是点(scatter、plot)、线(line、plot)等。7.2.2Matplotlib图形构成[例7-4]添加了网格、图例的绘图实例。 Matplotlib默认状态下无法显示中文,在前面的许多例子中各种标题及图例都是使用的英文。若在作图过程中,需要显示中文,可通过下面两种方法进行操作。方法一:借助rcParams修改字体实现设置

其中,rcParams[‘font.family’]的种类也可以设置多种。属性说明‘font.family’用于显示字体的名字‘font.style’字体风格,正常‘normal’或斜体‘italic’‘font.size’字体大小,整数字号或者‘large’、‘x‐small’rcParams的属性7.2.3Matplotlib中设置中文中文字体种类 Matplotlib默认状态下无法显示中文,在前面的许多例子中各种标题及图例都是使用的英文。若在作图过程中,需要显示中文,可通过下面两种方法进行操作。方法一:借助rcParams修改字体实现设置7.2.3Matplotlib中设置中文

可以用下列语句查看matplotlib中默认已经识别到的所有可用字体和对应的文件名,其中部分输出的为字体名称,font.fname部分输出字体文件的路径和文件名。importmatplotlib.pyplotaspltfrommatplotlibimportfont_managerforfontinfont_manager.fontManager.ttflist:#查看字体名以及对应的字体文件名print(,'--',font.fname)输出的“KaiTi--C:\Windows\Fonts\simkai.ttf”中,“KaiTi”为字体名,“C:\Windows\Fonts\simkai.ttf”为对应的字体文件。则可以用如下语句来使用该字体,如下所示:plt.rcParams['font.family']='KaiTi'plt.text(0.5,0.5,'楷体',ha='center',fontsize=50) Matplotlib默认状态下无法显示中文,在前面的许多例子中各种标题及图例都是使用的英文。若在作图过程中,需要显示中文,可通过下面两种方法进行操作。方法一:借助rcParams修改字体实现设置7.2.3Matplotlib中设置中文[例7-5]中文显示方法一。 Matplotlib默认状态下无法显示中文,在前面的许多例子中各种标题及图例都是使用的英文。若在作图过程中,需要显示中文,可通过下面两种方法进行操作。方法二:在有中文输出的地方,增加一个fontproperties属性。7.2.3Matplotlib中设置中文[例7-6]中文显示方法二。Pyplot使用037.3.1plt.plot()的使用

在Matplotlib模块中,Pyplot是一个核心的子模块,通过该子模块,我们可以完成很多基本的可视化操作。子模块的导入如下:importmatplotlib.pyplotasplt

其中,以plt作为Pyplot子模块的缩写 Pyplot绘图的主要功能是绘制x,y的坐标图,在完成绘图后一般情况下是不会自动显示图表的,需要调用plt.show()方法显示。当plt.plot()中只有一个输入列表或者数组时,参数会被当作Y坐标数据,而X的坐标列表自动生成索引,默认为[0,1,2,3,…]。1、基本使用使用plt.plot()绘制的主要是线图,其语法格式为:plt.plot(x,y,

format_string,

**kwargs)其中:必要的参数是x坐标列表和y坐标列表。当plt.plot(x,y)中用2个以上参数时,则会按照x轴和y轴顺序绘制数据点。7.3.1plt.plot()的使用[例7-7]plt.plot()绘制实例。plt.plot()还有数十个可选参数来设置绘图特征,但常用的有几个特征,分别是: color:设置线条颜色,默认为蓝色。 linewidthorlw:设置线条宽度,默认为1.0。 linestyleorls:设置线条样式,默认为实线。 labels:设置图形名称,一般搭配legend属性使用。 marker:设置数据点的符号,默认为点。字符颜色字符颜色‘b’蓝色‘g’绿色‘r’红色‘c’青色‘m’品红色‘y’黄色‘k’黑色‘w’白色字符线条样式‘-’实线‘--’虚线‘-.’点划线‘:’点线字符标记类型字符标记类型‘。’点‘,’像素‘o’圆圈‘v’下三角1‘^’上三角1‘<’左三角1‘>’右三角1‘1’下三角2‘2’上三角2‘3’左三角2‘4’右三角2‘s’正方形‘p’五角形‘*’星号‘h’六边形样式1‘H’六边形样式2‘+’加号‘x’X‘D’钻石‘d’薄钻石‘|’垂直线‘_’水平线7.3.1plt.plot()的使用1、基本使用Matplotlib的颜色Matplotlib的线条样式Matplotlib标记1、基本使用—参数设置实例7.3.1plt.plot()的使用[例7-8]设置plot绘图特征实例。2、添加内容

图表主体内容设置结束后,还可以设置或添加文本内容。具体的添加内容与所调用的函数具体见表。函数名称函数作用plt.title()在当前图形中添加标题,可以指定标题的名称、位置、颜色、字体大小等参数。plt.xlabel()在当前图形中添加x轴名称,可以指定位置、颜色、字体大小等参数plt.ylabel()在当前图形中添加y轴名称,可以指定位置、颜色、字体大小等参数plt.xlim()指定当前图形x轴的范围,只能确定一个数值区间,而无法使用字符串标识。plt.ylim()指定当前图形y轴的范围,只能确定一个数值区间,而无法使用字符串标识。plt.xticks()指定x轴刻度的数目与取值。plt.yticks()指定y轴刻度的数目与取值。plt.legend()指定当前图形的图例,可以指定图例的大小、位置、标签7.3.1plt.plot()的使用常用添加画布内容的函数说明2、添加内容—实例7.3.1plt.plot()的使用[例7-9]设置plot绘图文本。2、添加内容—实例7.3.1plt.plot()的使用[例7-10]为图形添加注释。代码中的plt.annotate()函数有多个参数plt.annotate(s,xy=arrow_crd,xytext=text_crd,arrowprops=dict)3、图形的保存7.3.1plt.plot()的使用

图形绘制完成后,可以使用plt.show()进行显示,也可以使用plt.savefig()将其保存,在该函数中可以设置保存路径和文件名、图片的分辨率、边缘的颜色等参数。如果既要显示又要保存,请注意要将plt.savefig()放在plt.show()之前。否则,在plt.show()后实际上已经创建了一个新的空白的图片,此时再用plt.savefig()就会保存这个生成的空白图片。[例7-11]保存图片。plt.savefig()函数中主要参数含义为:fname:含有文件路径的字符串,拓展名指定文件类型,如'png'、'pdf'、’svg'、'ps'、'jpg'等;dpi:分辨率,默认100;facecolor:图像的表面颜色,默认为“auto”;bbox_inches:图表需要保留的部分,如果设置为“tight”,则将尝试剪除图像周围的空白部分。7.3.2子图

在Matplotlib中,不仅可以在一张图形中绘制多条曲线,还可以将一张图分成多个子图进行绘制。plt的subplot()方法参数可以是一个三位数字,例如121,也可以是一个数组,如[1,2,1]。其中第一个数字代表子图总行数,第二个数字代表子图总列数,第三个数字表示对应图像显示的绘图区域数。【解释说明】:以plt.subplot(2,2,1)为例,它是指将绘图区域分为2行2列4个区域,并在第一个区域内作图,其他同上。1. 使用matplotlib.pyplot.subplot()进行设置子图[例7-12]用plt的subplot()绘制子图。

subplot()方法也可以设置不同大小的绘图区域。【解释说明】:对于第一图而言,它是在2行1列的区域内作图,当设置后续三张图的位置时,从编号4开始,暗示图一占据3列的宽度。7.3.2子图1. 使用matplotlib.pyplot.subplot()进行设置子图[例7-13]使用subplot()设置不同大小的绘图区域。7.3.2子图

实际使用中可能会面临更复杂的绘图分隔区域,subplot()方法就不能很好地满足需要,此时需要借助subplot2grid()方法。语法如下: plt.subplot2grid(GridSpec,CurSpec,colspan=num1,rowspan=num2)2. 使用matplotlib.pyplot.subplot2grid()设置复杂的绘图分隔区域【解释说明】:创建第1个小图,(3,3)表示将整个图像窗口分成3行3列,(0,0)表示从第0行第0列开始作图,colspan=3表示列的跨度为3,行的跨度为缺省,默认跨度为1;创建第2个小图,(3,3)表示将整个图像窗口分成3行3列,(1,0)表示从第1行第0列开始作图,colspan=2表示列的跨度为2。后续子图同理。注意:可以使用subplots_adjust()调整子图间的间距。7.3.2子图2. 使用matplotlib.pyplot.subplot2grid()设置复杂的绘图分隔区域[例7-14]设置复杂的绘图分隔区域。7.3.2子图3. 使用matplotlib.pyplot.subplots()函数来设置子图

subplots()函数,返回一个包含figure和axes对象的元组。因此,通常使用fig,ax=plt.subplots()将元组分解为fig和ax两个变量。如果创建了多个子图,则ax可以是一个Axes对象的数组。

例如,fig,ax=plt.subplots(m,n,figsize=(a,b))设置了m*n个大小为a*b的子图,fig为图像对象,ax为大小为m*n的axes数组。7.3.2子图3. 使用matplotlib.pyplot.subplots()函数来设置子图[例7-15]用subplots()函数设置子图。7.3.2子图4. 使用matplotlib.figure.Figure.add_subplot()来设置子图

add_subplot()的参数与plt的subplot()类似,可以是一个三位数字,例如121,也可以是一个数组,如[1,2,1]。其中第一个数字代表子图总行数,第二个数字代表子图总列数,第三个数字表示对应图像显示的绘图区域数。7.3.2子图[例7-16]使用figure的add_subplot()设置子图并标号。4. 使用matplotlib.figure.Figure.add_subplot()来设置子图7.3.2子图[例7-17]使用figure的add_subplot()设置子图。4. 使用matplotlib.figure.Figure.add_subplot()来设置子图Pyplot中的常用图形047.4Pyplot中的常用图形

Matplotlib中提供了许多绘制图形的函数,包括简单的基础统计图形,如直方图、气泡图、箱线图等,也有一些高维度的立体图形,如3D图等。下表给出Pyplot常用的基础图像绘制函数。函数说明Plt.plot(x,y,fmt,…)绘制作表态Plt.boxplot(data,notch,position)绘制箱型图Plt.bar(left,height,width,bottom)绘制条形图Plt.barh(width,bottom,left,height)绘制一个横向条形图Plt.polar(theta,r)绘制极坐标图Plt.pie(data,explode)绘制饼图Plt.psd(x,NFFT=256,pad_to,Fs)绘制功率谱密度图Plt.specgarm(x,NFFT=256,pad_to,Fs)绘制谱图Plt.cohere(x,y,NFFT=256,Fs)绘制X-Y的相关性图Plt.scatter(x,y)绘制散点图,其中x和y长度相同Plt.step(x,y,where)绘制步阶图Plt.hist(x,bins,normed)绘制直方图Plt.contour(X,Y,Z,N)绘制等制图Plt.vlines()绘制垂直图Plt.stem(x,y,linefmt,markerfmt)绘制柴火图Plt.plot_date()绘制数据日期7.4.1散点图

散点图的绘制依赖plt.scatter()函数,该函数包含很多参数,具体如下:S:点的大小C:点的颜色,取值可以为[‘b’,‘c’,‘g’,‘k’,‘m’,‘r’,‘w’,‘y’]Alpha:点的透明度,取值为0-1Marker:点的形状,默认状态下为“o”,常见的还有[‘v’,‘>’,‘<’,‘*’,‘s’,‘p’,‘h’,‘x’,‘+’]。[例7-18]不设置参数绘制散点图。1、不设置任何参数时调用7.4.1散点图[例7-19]设置部分参数绘制散点图。2、设置部分的参数,优化图表7.4.1散点图7.4.2柱状图

柱状图主要用于查看各分组数据的数量分布,以及各个分组数据之间的数量比较。

柱状图的绘制使用:

plt.bar(x,height,width,bottom=None,*,align='center',data=None,**kwargs)7.4.2柱状图[例7-20]绘制简单柱状图。如果把例子中的plt.bar()改为plt.barh(),其他参数不变,即可以绘制如右图的水平柱状图。7.4.2柱状图[例7-21]柱状图顶部添加数据说明。本例中在柱状图顶部添加上具体的数据说明。7.4.3直方图

直方图的绘制依赖plt.hist(x,bins=bins,color=”b”,histtype=’bar’,label=’label’,rwidth=rwidth)函数,具体各参数说明如下: x:连续型数据的输入值bins:用于确定柱体的个数或是柱体边缘范围color:柱体的颜色histtype:柱体类型label:图例内容rwidth:柱体宽度[例7-22]绘制简单直方图。7.4.3直方图[例7-23]绘制堆积直方图。当参数stacked设置为False时,也是默认状态,则绘制并排放置的直方图。7.4.4饼图

饼图的绘制依赖plt.pie(size,explode,labels,autopct,startangle,shadow,color)函数,具体各参数说明如下:size:各部分的百分比;explode:饼片边缘偏离半径的百分比,凸出率;labels:每部分饼片的文本标签;autopct:每部分饼片对应数值的百分比样式;startangle:第一个饼片逆时针旋转的角度;shadow:是否绘制饼片的阴影;color:柱体的颜色。[例7-24]只给定数据,绘制饼图。[例7-25]设置参数,绘制饼图。7.4.4饼图[例7-26]设置饼图的参数explode,强调某几部分饼片的可视性。7.4.4饼图7.4.53D图

Matplotlib还支持3维立体图形的绘制。利用的函数分别是ax.plot_surface()和ax.scatter()函数,前者常用来绘制三维面,而后者常用来绘制三维立体的点。【首先将绘制3D图形的模块导入】[例7-28]定义数据,绘制3D图。[例7-27]绘制3D图。本章实践例题本章实践例题[例7-29]matplotlib中常用参数设置实例。本例介绍了使用matplotlib.pyplot中的函数设置中文字体和字号、图形的x和y轴范围及文本标签等的方法。本章实践例题[例7-30]使用matplotlib.axes.Axes.set()函数设置图形属性。可以使用matplotlib.axes.Axes.set()函数一次性设置图形属性,如下例所示。本章实践例题[例7-31]某地区2000-2017年的旅游数据分析与可视化。随着人们生活水平的提升和时代的发展,旅游受到越来越多的人的喜爱,将我国旅游业的发展推入新的时代。下面结合某地区2000-2017年的旅游人数与费用分析国内旅游业的发展。案例需求:以城乡居民的旅游人数变化,结合所学的作图工具,得出以下结论:旅游业的发展变化趋势。数据准备:该数据库中收集了2000-2017年某地区有关旅游业的相关信息,并将其整理到名为Tour的xlsx的文件中。具体数据见下表。本章实践例题本章实践例题[例7-31]某地区2000-2017年的旅游数据分析与可视化。案例实现:从生成的折线图可知,国内某地区旅游总人次随年份呈现出明显上升的趋势,可见旅游业的发展也一直处于高速发展的进程中,图中显示城镇居民国内旅游人数的变化趋势与总体趋势大致相同,而农村居民国内旅游人次的增长较为缓慢。由此也可见国内旅游业的发展主要依赖于城镇居民的旅游人次。此特点也可由其他的特征得出,读者自行练习。本章实践例题[例7-32]某高校3个专业高考入学分数的可视化分析。案例需求:分别以折线图和柱状图等形式,分析某高校计科、材料、物流专业学生的高考入学分数情况。数据准备:该数据集名为“gaokaofenshu.xlsx”,记录了某高校计科、材料、物流三个专业的高考分数。本章实践例题[例7-32]某高校3个专业高考入学分数的可视化分析。本章实践例题[例7-33]Netflix电视节目和电影数据的可视化分析。案例需求:对于Netflix列出的电视节目和电影数据进行可视化分析,该数据集包括截至2019年Netflix

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论