Python大数据处理与分析第2版 课件 第3、4章 使用Pandas进行数据分析、使用Matplotlib进行数据可视化_第1页
Python大数据处理与分析第2版 课件 第3、4章 使用Pandas进行数据分析、使用Matplotlib进行数据可视化_第2页
Python大数据处理与分析第2版 课件 第3、4章 使用Pandas进行数据分析、使用Matplotlib进行数据可视化_第3页
Python大数据处理与分析第2版 课件 第3、4章 使用Pandas进行数据分析、使用Matplotlib进行数据可视化_第4页
Python大数据处理与分析第2版 课件 第3、4章 使用Pandas进行数据分析、使用Matplotlib进行数据可视化_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

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

文档简介

乘风破浪,世界就在眼前第3章使用Pandas进行数据分析目录

Pandas安装3.1

Pandas的对象3.2

Pandas基本操作3.3

Pandas的基本运用3.4

Pandas使用案例3.53.1Pandas安装TEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhereTEXTaddherePandas是什么?Pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的,它纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能快速便捷处理数据的函数和方法,是使Python成为强大而高效的数据分析的重要因素之一。3.1Pandas安装TEXTaddhereTEXTaddhereTEXTaddhere在cmd下使用命令:pipinstallpandas注意:若没有配置环境变量,需要先cd到python的安装目录安装完成后实验Pandas是否安装成功Pandas对象Series对象

DataFrame对象是什么?怎么用?有什么特点?3.2Pandas的对象3.2.1Series对象TEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhereSeries是Pandas中最基本的对象,类似于一维数组的对象,由一组数据和一组与之相关的数据标签(索引)组成。Series对象相比于一维数据结构多了一些额外的功能,它的内部结构很简单,由两个相互关联的数组组成(values和index),其中values数组用来存放数据,主数组的每一个元素都有一个与之相关联的标签,这些标签存储在一个index的数组中。3.2.1Series对象TEXTaddhereTEXTaddhereTEXTaddhere标签index内的内容也可以进行指定可以尝试查看这个对象中的两个数组values和index里面的内容3.2.1Series对象TEXTaddhereTEXTaddhereTEXTaddhereSeries对象的values属性本来就是一个Numpy的一个数组对象,而Series对象中的values数组也是对Numpy中的ndarray对象的引用,如果改变原有对象的值,Series对象的值也会跟着改变。3.2.1Series对象TEXTaddhereTEXTaddhereTEXTaddhere因为Series对象的index对应values,所以可以用字典对象来构造Series对象。字典中的所有的键放在Series对象的index数组中,字典中的所有值放在Series对象的values数组中,仍然保持对应关系。下面的代码给出了一个字典实例,如果index中的值在字典中有对应的键,则生成的Series对象中该值对应的元素为在字典中对应的值,如果找不到,则其值为NaN,即空值。3.2.2DataFrame对象DataFrame对象的数据结构跟excel表相似,其目的是将Series的使用场景由一维扩展到多维,它由按一定顺序排列的多列数据组成,各列的数据类型可以有所不同。DataFrame对象有两个索引数组(index和columns),第一个数组index与行相关,它与Series的索引数组极为相似,每个索引值都跟所在的一行相关联;第二个数组columns包含一系列列标签(每个值相当于列名)。DataFrame可以理解为一个由Series组成的字典,其中每一列的名称作为字典的键,形成DataFrame列的Series作为字典的值,每个Series的所有元素映射到称为index的标签数组中。3.2.2DataFrame对象TEXTaddhereTEXTaddhereTEXTaddhere与Series对象一样,可以指定index数组的内容,下面的案例中指定了index数组的内容。3.2.2DataFrame对象TEXTaddhereTEXTaddhereTEXTaddhere同样可以使用数组矩阵构造DataFrame对象基本操作导入与导出数据数据的查看与检查数据的增删查改是什么?怎么用?有什么特点?3.3Pandas基本操作3.3.1导入与导出数据1.数据导入(1)csv文件的导入函数原型:read_csv(filrpath,sep,names,encoding)。参数:①filepath完成导入csv文件的路径,一般使用绝对路径,且用“/”或者“\”表示;②sep表示分隔符,一般csv文件默认是逗号;③names表示导入的列和指定列的顺序,默认按顺序导入所有列;④encoding表示文件编码,大多时候会让参数encoding=‘utf-8’。3.3.1导入与导出数据1.数据导入(2)txt文件的导入函数原型:read_table(filrpath,sep,names,encoding)。参数:①filepath完成导入csv文件的路径,一般使用绝对路径,且用“/”或者“\”表示;②sep表示分隔符,一般csv文件默认是逗号;③names表示导入的列和指定列的顺序,默认按顺序导入所有列;④encoding表示文件编码,大多时候会让参数encoding=‘utf-8’。3.3.1导入与导出数据1.数据导入(3)Excel文件的导入函数原型:read_excel(filrpath,sep,names)。参数:①filepath完成导入csv文件的路径,一般使用绝对路径,且用“/”或者“\”表示;②sep表示分隔符,一般csv文件默认是逗号;③names表示导入的列和指定列的顺序,默认按顺序导入所有列。3.3.1导入与导出数据2.数据导出函数原型:to_csv(filrpath,sep,names,encoding)。参数:文件路径filrpath的末尾要写上.csv文件格式;分隔符sep是输出文件的分隔符,默认为逗号,也可以用制表符等;names是否输出索引,默认为输出索引,如果不想要可以改为False;encoding是否输出列名,默认为输出列名;编码默认为utf-8。3.3.2数据的查看与检查1.Series对象数据的查看与检查直接通过主数组的下标来获取,或者通过对象的index标签值来获取。可以一次性获取多个元素,同样也有和刚刚类似的两种方法,对于数组下标,只需要用“:”表示起始到终止的位置即可(这个结果只包含起始值但不包含终止值)。3.3.2数据的查看与检查2.DataFrame对象数据的查看与检查3.3.2数据的查看与检查2.DataFrame对象数据的查看与检查DataFrame对象也可以获得一列数据,获得一列数据有两种方法,一种是用“[]”,另一种使用符号“.”来连接。DataFrame对象也可以获得多行数据。3.3.3数据的增删查改1.数据的增加增加数据可以像字典一样直接添加。也可以使用append()函数进行增加,增加效果类似,但区别在于append()函数添加元素后,原来的值没有改变。3.3.3数据的增删查改2.数据的删除del方法可用于删除元素Pandas也提供了删除函数pop()3.3.3数据的增删查改3.数据的查找与修改由于Pandas库是以Numpy库为基础开发的,所以Numpy数组的许多操作方法对Series对象也有效,例如数据的筛选。对于DataFrame对象的数据修改,也是类似。查找某个元素值,类似于二维数组的查找办法,需要用两个[]分别找它的行标和列标;同时,也可以找到它的位置然后修改它的值。基本运用数据统计算数运算与数据对齐是什么?怎么用?有什么特点?3.4Pandas的基本运用3.4.1数据统计1.sum()函数与cumsum()函数sum()函数用于对象求和。cumsum()函数用于累计求和,不同点在于,sum()只显示了单列或者单行结果,而cumsum()函数显示的累计求和的过程。3.4.1数据统计2.idxmax()函数与idxmin()函数这两个函数的功能是返回最大最小值的行名称3.4.1数据统计3.unique()函数与value_counts()函数unique()函数的功能是去除重复的元素,使用Series对象的unique()函数,返回一个Numpy数组。value_counts()函数的功能是返回一个Series对象,index为原Series对象中不重复的元素,values为不重复的元素出现的次数。3.4.1数据统计4.isin()函数isin()函数可用于筛选数据,判定Series中的每个元素中是否包含在给定的isin()的参数中,如果包含,则为True,否则为False。3.4.2算数运算与数据对齐1.算术运算对于使用Numpy数组中的运算符(如+、-、*、/)或者其他的数学函数,也适用于Pandas。3.4.2算数运算与数据对齐2.数据对齐Pandas的数据对齐是数据清洗的重要过程,可以按索引对齐进行运算,如果没对齐的位置,则补NaN,即空值,在数据的末尾也可以填充NaN。对象除了和标量之间可以进行运算,对象和对象之间也可以进行运算,这样就可能存在没有数据对齐的情况,如果index的值没有对齐,则没有对齐的元素运算之后的值为NaN。3.5Pandas使用案例1.学生成绩数组导入3.5Pandas使用案例2.总分计算3.5Pandas使用案例3.数据查看4.求和3.5Pandas使用案例5.行标处理6.导出文件ThankYou!乘风破浪,世界就在眼前第4章Matplotlib数据可视化目录

Matplotlib安装与绘图步骤4.1

经典常用图像绘制4.2

图形调整及美化4.3Matplotlib使用案例4.44.1Matplotlib安装与绘图步骤TEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhereMatplotlib是什么?

为了达成数据可视化的目的和完成众多领域的数据分析工作,数据科学家们使用Python编写了一系列令人印象深刻的可视化分析工具。其中最流行的工具之一是Matplotlib,用于完成数学绘图库,如折线图、直方图、散点图等多种类型的图表。在本章中主要介绍的内容就是如何使用Matplotlib进行数据可视化。4.1Matplotlib安装与绘图步骤经典常用图形绘制折线图、柱状图、散点图、直方图、等值线图Matplotlib使用案例掷骰子案例安装与绘图步骤5步绘图流程图形调整及美化各种图形调整函数使用4.1.1

Matplotlib安装TEXTaddhereTEXTaddhereTEXTaddhere1.在Windows中安装Matplotlib(1)Win+R运行cmd命令行,在命令行中输入以下命令进行升级。python-mpipinstall-upipsetuptools(2)输入以下命令进行自动的安装,系统会自动下载安装包。python-mpipinstallmatplotlib(3)安装完成后,可以使用以下命令来查看本机安装的所有模块,以确保Matplotlib已经安装成功。python-mpiplist或者直接进入到pythonidle中,在窗口中输入代码:importmatplotlib后运行程序,如果没有报错,就证明安装成功。4.1.1

Matplotlib安装TEXTaddhereTEXTaddhereTEXTaddhere2.在Linux中安装Matplotlib(1)本书使用CentOS7,且已安装Python3,使用以下命令可安装Matplotlib。$sudoyuminstallpython3-matplotlib如果使用的是CentOS7中自带的Python2,需要执行以下命令完成安装Matplotlib。$sudoyuminstallpython-matplotlib如果在计算中已经安装了Python较新的版本,但需要安装Matplotlib依赖的一些库,输入以下命令安装。$sudoyuminstallpython3.7-devpython3.7-tktk-dev$sudoyuminstalllibfreetype6-devg++安装好以上Matplotlib依赖库之后,再使用pip命令来安装Matplotlib,输入以下命令。$pipinstall–-usermatplotlib4.1.1

Matplotlib安装TEXTaddhereTEXTaddhereTEXTaddhere3.在MacOS中安装Matplotlib苹果的标准Python安装自带了Matplotlib。要检查MacOS中是否安装了Matplotlib,可以打开一个终端会话并导入Matplotlib,如果导入成功未报错,则说明已装有Matplotlib。如果系统没有自带的Matplotlib,可以使用以下命令来安装。$pipinstall-–usermatplotlib如果该命令不管用,可以删除--user试试。4.1.2Matplotlib绘图步骤TEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhere基本绘图步骤如下:(1)导入第三方包导入第三方包NumPy和绘图模块pyplot。科学计算包NumPy是Matplotlib库的基础,我们绘图所需要的数据集需要使用NumPy来生成,当然为了方便学习,也可以直接使用列表来生成所需数据。绘图模块pyplot是一个函数集合,让Matplotlib能够像Matlab一样工作。使用以下代码导入相应内容。importmatplotlib.pyplotaspltimportnumpyasnp(2)准备数据导入了所需要的第三方包后,就可以提前准备绘图所使用数据了。数据可以从网上下载,对它们进行可视化。为了方便学习,这里采用NumPy来生成所需数据,生成数据代码如下。x=np.linspace(1,10,5)y=np.sin(x)4.1.2Matplotlib绘图步骤TEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhere基本绘图步骤如下:(3)开始绘图准备好数据之后即可开始绘制想要的图形,plot()函数的功能是展现变量趋势的变化,在这一函数的作用下,根据二维坐标所决定的点的轨迹,使用plot()函数即可绘制出一幅折线图,读者需要做的仅仅是将x与y的值传给plot()函数,而x与y两个数组里面的元素将一一对应,共同构成图像上将要描绘的点集,但如果两个数组里面元素个数无法对应,将会产生错误。函数调用代码如下。plt.plot(x,y)4.1.2Matplotlib绘图步骤TEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhere基本绘图步骤如下:(4)完善图表上一步骤中根据数据画出了所需的基本图形,然而仅有显示数据变动的图形显然是不够的,一个好的图表需要有相应的说明和标识,以及合适的图像风格,需要对图形进行一系列的调整及美化,下面为大家介绍一些函数来进一步修饰图表。首先,可以对折线线条进行改进,在plot()函数中可以加入线条宽度的参数来修改线条的样式。plt.plot(x,y,linewidth=5)然后,可以设置图表标题,并且给坐标轴加上标签,图标标题和x,y轴标签设置函数使用代码如下。plt.title("plotfigure")plt.xlabel("valueofx")plt.ylabel("valueofy")4.1.2Matplotlib绘图步骤TEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhereTEXTaddhere基本绘图步骤如下:(5)展示结果完善了一系列的图表设置后,就可以将绘制的图形输出,展示一下绘制的图形了。使用下面的代码即可输出图形,如下图所示。plt.show()4.2经典常用图形绘制直方图绘制方法等值线图及地理信息可视化绘制方法折线图绘制方法散点图绘制方法柱状图绘制方法4.2.1

折线图TEXTaddhereTEXTaddhereTEXTaddhere绘制折线图一般使用plot()函数。plot()函数作为展现变量趋势变化的函数,在它传入的参数中可以轻松调整绘制线条的风格。plot()函数的原型为:plt.plot(x,y,format_string,**kwargs)其中,①x:x轴数据,列表或函数,可选。②y:y轴数据,列表或函数,不可选。③format_string:控制曲线的格式字符串,可选。这一字符串用来定义图线的基本属性,例如,颜色、点型、线型。这是一个快速设置样式的方法,接收的是每个属性的单个字母缩写,如定义线条的颜色和样式的操作,“ro”就是红色的圆圈。④**kwargs:一系列可选关键字参数,可以在里面指定很多内容。例如,“label”可指定线条的标签,“linewidth”可指定线条的宽度,“color”可指定线条颜色等。4.2.1

折线图TEXTaddhereTEXTaddhereTEXTaddhere在上面所讲内容基础上,可以将上一小节中plot()函数的使用修改如下。plt.plot(x,y,'ro',linestyle='-',linewidth=2,label="figure")除了plot()函数用来绘制线条外,pyplot中还有很多函数可以用来设置一系列的图表元素,给图表增加说明,调整和美化图表。下面通过对上一节中的折线图元素设置代码的改进,来为读者介绍一些常用的设置函数。plt.title("firstgraph",fontsize=20) #设置图表标题plt.xlabel("ValueofX",fontsize=12) #设置x轴标签plt.ylabel("ValueofY",fontsize=12) #设置y轴标签plt.tick_params(axis='both',labelsize=10) #设置刻度样式plt.grid(ls=":",c="b") #设置网格线plt.text(4,0.1,"y=sin(x)",weight="bold",color="b")#设置注释文本plt.legend(loc="lowerleft") #设置图例4.2.1

折线图TEXTaddhereTEXTaddhereTEXTaddhere(1)title()函数用于添加图形内容的标题。第一个参数用于设置标题内容文本的字符串,第二个参数用于设置标题文本字体大小。(2)xlabel()和ylabel()两个函数分别用于设置x和y坐标轴的标签。第一个参数用于设置标签文本内容,第二个参数设置文本字体大小。(3)tick_params()函数用于对刻度线样式进行设置。第一个参数用于指定要修改的坐标轴,这里设置为两个坐标轴都修改,第二个参数对刻度标签大小进行设置。(4)grid()函数用于绘制网格线,函数中可以传入定义网格线的样式的参数,例如线条颜色,类型,粗细等。需要注意的是,如果只想对x轴或者y轴添加网格,只需要设定参数axis="x"或axis="y"即可。此处第一个参数设置了网格风格为点状,第二个参数设置颜色为蓝色。注意:在设定关键字参数时可使用单词缩写。(5)text()函数用于添加图形内容细节的无指向型注释文本。第一个参数为注释文本内容所在位置横坐标,第二个参数为注释文本所在位置纵坐标,第三个参数为注释文本内容,第四个参数为文本内容粗细风格,第五个参数为文本字体颜色。(6)legend()函数用于标识不同图形的文本标签图例。参数loc为图例在图中的地理位置。4.2.1

折线图TEXTaddhereTEXTaddhereTEXTaddhere通过以上各种函数来对图表进行完善后,可以使用savefig()函数将图片保存到当前.py文件所在的目录中。plt.savefig("test.png",dpi=120)函数第一个参数将生成的图像保存为”test.png”;第二个参数dpi指定图像的分辨率为120。注意:plt.savefig()函数要出现在plt.show()函数之前,否则,关闭图像窗口后,图像对象将被释放,无法保存。经过以上一系列操作后,图像已绘制完毕,可以将其展示出来了,使用show()函数即可输出图形,整个绘制折线图的完整代码如下所示,结果输出图如下图所示。4.2.1

折线图TEXTaddhereTEXTaddhereTEXTaddhereimportmatplotlib.pyplotaspltimportnumpyasnp#数据准备x=np.linspace(1,10,5)y=np.sin(x)

#绘制折线plt.plot(x,y,'ro',linestyle='-',linewidth=2,label="figure")#完善图表plt.title("firstgraph",fontsize=20)plt.xlabel("Value",fontsize=12)plt.ylabel("SofValue",fontsize=12)plt.tick_params(axis='both',labelsize=10)plt.grid(ls=":",c="b")plt.text(4,0.1,"y=sin(x)",weight="bold",color="g")plt.legend(loc="lowerleft")#保存图像和输出plt.savefig("test.png",dpi=120)plt.show()4.2.2

柱状图TEXTaddhereTEXTaddhereTEXTaddhere通常使用bar()函数来绘制柱状图,官方文档中bar()函数的原型为:matplotlib.pyplot.bar(x,height,width=0.8,bottom=None,*,align='center',data=None,**kwargs)其中,①x:为一个标量序列。标示在x轴上的定性数据类别,即条形的x轴坐标。②height:标量或标量序列。和x对应,确定每种定性数据类别的数量,即条形的y轴高度③width:标量或类似数组,可选。决定单个直方图的宽度,默认为0.8。④bottom:标量或类似数组。设置y边界坐标轴起点,默认值为0。⑤align:可选两个值{'center','edge'},其默认为center,使基准在x位置居中,而赋值edge会使条形图的左边缘与x位置对齐。如果想要对齐右边缘的条,则需要传递负宽度和align='edge'。⑥**kwarg:传递一系列的关键字参数。常用的参数有“color”指定柱状图的颜色,只给出一个值表示全部使用该颜色,若赋值颜色列表则会逐一染色,若给出颜色列表数目少于直方图数目则会循环利用;“edgecolor”指定条形边缘的颜色;“linewidth”指定条形的宽度;“tick_label”设置条形的刻度标签,默认情况下没有标签,根据x的设置来显示;“hatch”来设置条形的绘制风格,每一种hatch字符代表填充的形状,其中‘/’代表斜杆、‘*’代表五角星、‘.’代表以点填充、‘o’代表圆形填充。更多参数请参阅官方文档。4.2.2柱状图下面是一个货运箱重量统计的柱状图实例,图形绘制结果如下图所示。使用Matplotlib绘制图表直接输出汉字会形成乱码,无法正常显示,而使用属性字典rcParams或matplotlib.rc()函数可以很好地解决这一问题。在这里使用设置rcParams属性字典的方式来设置该案例的汉字输出。通过调用属性字典matplotlib.rcParams,利用属性字典的属性名、属性值的对应关系与更新字典键值的方法,就可以改变matplotlib的相关属性值,此处将“font.sans-serif”的值设置为想要输出的汉字字体即可。4.2.2

柱状图柱状图实例代码如下所示:importmatplotlib.pyplotaspltimportmatplotlibasmpl#字体设置mpl.rcParams["font.sans-serif"]="SimHei" #设置字体样式mpl.rcParams["axes.unicode_minus"]=False #设置为字符显示mpl.rcParams["font.size"]=12 #设置字体大小#数据准备x=[1,2,3,4,5,6]y=[7,5,3,9,4,6]#绘制柱状图plt.bar(x,y,width=0.4,align="center",tick_label=["toy","cup","battery","textbook","computer","phone"],color=color=['c','b','r'],hatch='/')#完善图形说明plt.xlabel("箱子类型")plt.ylabel("箱子重量(kg)")plt.title("货运箱重量统计",color="b")#显示图像plt.show()4.2.3

直方图柱状图实例代码如下所示:importmatplotlib.pyplotaspltimportmatplotlibasmpl#字体设置mpl.rcParams["font.sans-serif"]="SimHei" #设置字体样式mpl.rcParams["axes.unicode_minus"]=False #设置为字符显示mpl.rcParams["font.size"]=12 #设置字体大小#数据准备x=[1,2,3,4,5,6]y=[7,5,3,9,4,6]#绘制柱状图plt.bar(x,y,width=0.4,align="center",tick_label=["toy","cup","battery","textbook","computer","phone"],color=color=['c','b','r'],hatch='/')#完善图形说明plt.xlabel("箱子类型")plt.ylabel("箱子重量(kg)")plt.title("货运箱重量统计",color="b")#显示图像plt.show()4.2.3

直方图绘制直方图一般使用hist()函数,在官方文档中,hist()函数的原型为:matplotlib.pyplot.hist(x,bins=None,range=None,density=False,weights=None,cumulative=False,bottom=None,histtype='bar',align='mid',orientation='vertical',rwidth=None,log=False,color=None,label=None,stacked=False,*,data=None,**kwargs)可以看到该函数的参数很多,本书对其中较为常用的参数进行说明:①x:在x轴上绘制箱体的定量数据,即要统计的数据集,用来划分每个bin(箱子)分布的数据。它可以是单个数组,也可以是不要求长度相同的数组序列。②bins:整数值或序列,或字符串,可选,默认为10。为整数值时指定bin的个数,也就是一个数据集总共有几条条状图;为数组时规定限制了bin的边界,包括第一个bin的左边界和最后一个bin的右边界,此时可解决一些刻度上数字与bin不对齐问题。4.2.3

直方图③histtype:直方图类型,可取值为{'bar','barstacked','step','stepfilled'},默认为bar。“bar”是传统的条形直方图。如果给出多个数据,则条形图并排排列。④align:设定直方图的对齐方式,可选值为{'left','mid','right'},默认为“mid”。“left”指定条形图位于bin左边缘的中心;“mid”:指定条形图在bin边缘之间居中;“right”指定条形图在bin的右边缘居中。⑤orientation:指定直方图方向,可选值为{'horizontal','vertical'}。如果取值设定为horizontal,则直方图将以y轴为基线,水平排列。⑥rwidth:标量值或None。柱子的宽度占bins宽的比例。例如:当bins=range(1,8)时,每个柱子默认宽为1,若设置rwidth=0.8,则柱子的宽度将为0.8,柱子之间的距离为0.2。⑦color:具体颜色或数组(元素为颜色)或None,可选。指定条状图颜色。⑧label:字符串或字符串序列或为None。当有多个数据集时,用label参数做标注区分。⑨**kwargs:关键字参数,常用的有“normed”是否将得到的直方图向量归一化,默认为0;“facecolor”指定直方图颜色;“edgecolor”指定直方图边框颜色;“alpha”指定透明度。4.2.3

直方图下面是计算机专业学生英语成绩的直方图统计代码实例:importmatplotlib.pyplotaspltimportmatplotlibasmplimportnumpyasnp#设置字体mpl.rcParams["font.sans-serif"]="SimHei"mpl.rcParams["axes.unicode_minus"]=Falsempl.rcParams["font.size"]=12#数据准备x=[np.random.randint(0,100,40),np.random.randint(0,100,40)]y=list(range(0,101,10))#绘制直方图plt.hist(x,bins=y,color=['c','b'],histtype="bar",rwidth=1,alpha=0.6,edgecolor="black",label=['一班','二班'])#完善图表说明plt.xlabel("测试成绩")plt.ylabel("学生人数")plt.title("学生英语考试分数统计",color="r")#设置图例和展示图像plt.legend()plt.show()4.2.3

直方图代码中的x数组代表了两个班的考试成绩,是两个人数都为40的数据集,而bins用来确定每个柱体所包含的数据范围,除了最后一个柱体的数据范围是闭区间外,其他柱体的数据范围都是左闭区间,右开区间。在这里bins以10为跨度。label参数用数组来区分两个数据及所代表的班级,color也同理指定两个颜色的数组来区分。图形绘制结果如下图所示:4.2.4

散点图绘制散点图一般会用到scatter()函数,官方文档中scatter()的函数的原型为:matplotlib.pyplot.scatter(x,y,s=None,c=None,marker=None,cmap=None,norm=None,vmin=None,vmax=None,alpha=None,linewidths=None,verts=<deprecatedparameter>,edgecolors=None,*,plotnonfinite=False,data=None,**kwargs)该函数常用参数说明如下:①x,y:标量或形如shape(n,)的数组,两个参数共同决定所绘点的位置。②s:标量或类似数组,可选。用来指定点的大小(也就是面积)默认20。③c:数组或颜色或颜色列表,可选。指定点的颜色或颜色序列,默认蓝色。④marker:标记样式。标记可以是类的实例,也可以是特定标记的文本简写。用来指定点的形状,可选值,默认是圆形。⑤cmap:一个Colormap实例或记录了的colormap名。用来指定颜色映射。如果c为浮点型数组时,camp是非常有用的。⑥vmin,vmax:vmin和vmax被用于与norm一起标准化亮度数据。如果默认为None(无)时,则使用颜色阵列的各自的最小值和最大值。4.2.4

散点图该函数常用参数说明如下:⑦linewidths:标量或类似数组的值,可选。用来指定线条的宽度,默认为None时宽度为1.5。⑧alpha:标量,可选,默认值:无,0(透明)和1(不透明)之间的alpha混合值。⑨edgecolors:可填写三个值{'face','none',None}或颜色或颜色序列,可选。默认值为face。该参数用来指定点的边缘颜色。当值为“face”时边缘颜色将始终与face颜色相同;为“none”时不绘制点的边界;为“None”时即为默认。⑩hold:为了同时在一个图上画多条曲线,可以使用hold关键字。4.2.4

散点图下面以随机漫步来为读者展现scatter()函数绘制散点图的魅力。首先需要创建一个RandomWalk()的类,用来模拟随机漫步;然后通过绘点来将RandomWalk()类中的随机漫步过程用可视化的方式呈现出来;最后再进行一系列对图像设置的调整。RandomWalk()类中需要两个函数,第一个函数用于初始化类中的变量。def__init__(self,point_num=5000): #初始化变量self.point_num=point_numself.xval=[0]self.yval=[0]4.2.4

散点图第二个函数用于执行随机漫步,计算每次漫步的点。该函数需要一个循环,在这个循环中要计算出每次漫步点的位置,函数代码如下。deffill_walk(self): #计算每次漫步点的坐标whilelen(self.xval)<self.point_num: x_direction=choice([1,-1])step_num=choice([0,1,2,3,4])xstep=x_direction*step_num

y_direction=choice([1,-1])step_num=choice([0,1,2,3,4])ystep=y_direction*step_num

ifxstep==0andystep==0:continue x_next=self.xval[-1]+xstepy_next=self.yval[-1]+ystep

self.xval.append(x_next)self.yval.append(y_next)4.2.4

散点图在该函数中,choice()函数作用是在给定的列表或数组中选定一个值,使用此函数需要先导入包random中的choice。fromrandomimportchoice至此,我们的RandomWalk类里面一共包括上面的fill_walk()函数和三个变量。在写完RandomWalk类后便可以开始绘制点了。首先,创建类的实例,并且开始随机漫步,指定漫步5000次,一共将绘制5000个点。rw=RandomWalk(5000)rw.fill_walk()其次,根据rw里面点的位置列表开始绘制,且使用颜色映射来按照漫步点的先后顺序设置颜色渐变,并删除点的轮廓将edgecolor设为none,使颜色更突出。4.2.4

散点图最后,绘制起点和终点,表示下一漫步的开始和结束。#生成1-5000的序列point_numbers=list(range(rw.point_num))#按照point_numbers列表指定的点序来绘制颜色渐变的散点plt.scatter(rw.x_val,rw.y_val,c=point_numbers,cmap=plt.cm.Blues,edgecolor='none',s=15)#绘制起始点和终点plt.scatter(0,0,c='green',edgecolors='none',s=100)plt.scatter(rw.x_val[-1],rw.y_val[-1],c='red',edgecolor='none',s=100)经过以上工作,一幅随机漫步的散点图就已经画出来了,为了更加突出图形,我们将坐标轴通过以下代码给隐藏。最终绘制结果如下图所示。plt.axes().get_xaxis().set_visible(False)plt.axes().get_yaxis().set_visible(False)4.2.4

散点图最后,可以将点的数量在扩大至50000,且把点的大小调为s=2,之后的效果图如下图所示,一幅精细的云彩图便呈现在眼前了。4.2.5

等值线图及地理信息可视化1.等值线图等值线图包括等高线图、等温线图、地层等厚度图等。这里使用等值线图中的等高线图为例来为读者展示如何绘制等值线,并且给等高线间加上温度变化。等高线这种可视化方法用由一圈圈封闭的曲线组成的等值线表示三维结构的表面,其中封闭的曲线表示的是一个个处于同一层级或z值相同的数据点。虽然等高线图看上去结构很复杂,其实用Matplotlib实现起来并不难。首先,你需要用z=f(x,y)函数生成三维结构;然后,定义x、y的取值范围,确定要显示的区域;之后,使用f(x,y)函数计算每一对(x,y)所对应的z值,得到一个z值矩阵;最后,用contour()函数生成三维结构表面的等高线图。下面以一个等高线图为例来给读者讲解一个等值线图解绘制过程。4.2.5

等值线图及地理信息可视化(1)准备工作首先需要导入所需要的包。importmatplotlibasmplimportmatplotlib.pyplotaspltimportnumpyasnp(2)数据准备x与y的数据采用linspace()函数来从-4到4之间等间隔生成128个数据。x与y这两个数组将共同决定z的数值。num=128x=np.linspace(-4,4,num)y=np.linspace(-4,4,num)等值线是将z轴上函数值相等的点连接起来,而函数值是通过二元函数计算得出的,所以可以定义一个如下所示的函数,用来计算z的值。#定义根据x,y值计算z值的函数deff(x,y):z=(1-y**6+x**6)*np.exp(-x**2-y**2)returnz4.2.5

等值线图及地理信息可视化(3)填充等值线颜色要画出等值线,核心函数是plt.contourf(),该函数的作用并不是绘出等值线,而是对以外的区域填充颜色,以区分不同区域。此外在这个函数中输入的参数是x,y对应的网格数据以及此网格对应的高度值,因此还需要调用np.meshgrid(x,y)把x,y值转换成网格数据才行,代码如下。#x,y数据生成mesh网格状的数据,等值线的显示在网格的基础上添加的高度值x1,y1=np.meshgrid(x,y)z=f(X,Y)#填充等值线区间plt.contourf(x1,y1,z)通过plt.show()函数可看到如图所示绘制成果。4.2.5

等值线图及地理信息可视化(3)填充等值线颜色如果想要改变色调显示为热力图,那么只要在plt.contourf()函数中添加属性cmap=plt.cm.hot就能显示热力图。其中,cmap代表为colormap,这一设置把colormap映射成hot(热力图),同时将函数返回值赋给csf变量,代码修改如下。csf=plt.contourf(x1,y1,z,cmap=mlp.cm.hot)改进后的图片显示如下图所示。4.2.5

等值线图及地理信息可视化(4)绘制等值线前面是用plt.contourf()填充了等高线颜色,但还有一种方式是可以在上一个步骤的基础上显示等高线,而不是填充的方式,使不同颜色区域边界区分明显,代码如下。#绘制等值线cs=plt.contour(x,y,z,10,colors='black')#添加等值线文字标签plt.clabel(cs,inline=True,fontsize=12)通过调用函数contour()获得一个ContourSet实例,可以将ContourSet实例作为参数代入函数clabel()中,为等高线添加标签以此表示出每条等值线的数值大小。此外,如若使用等值线图,在该图的一侧增加图例作为对图表中所用颜色的说明是很有必要的。在代码的最后增加colorbar()函数即可实现该功能。plt.colorbar(csf)plt.show()4.2.5

等值线图及地理信息可视化(5)输出等值线图以上操作都完成了过后便可以显示如下图所示最终结果。4.2.5

等值线图及地理信息可视化2.地理信息可视化下面以Basemap绘制世界地图为例来展现一下地理信息的可视化。(1)绘制平面世界地图并上色frommpl_toolkits.basemapimportBasemapimportmatplotlib.pyplotasplt

#设置投影方式map=Basemap(projection='cyl')

#首先给背景涂上蓝色的一层map.drawmapboundary(fill_color='aqua')#然后画出的陆地涂上土黄色,给江河湖泊涂上蓝色map.fillcontinents(color='coral',lake_color='aqua')#绘制图形map.drawcoastlines()plt.show()4.3图形调整及美化颜色参数及映射表如何设置图标颜色形式图表主要组成元素调整绘图元素结构4.3.1

图表主要组成元素调整绘图的底层是一个Figure实例,也叫画布,绘制的图形都在上面,而这些图形统称为Axes实例。该实例基本上包含了Matplotlib的所有组成元素和属性。具体一点说,Matplotlib图表的组成元素主要包括:图形(figure)、二维直角坐标系(axes)、图表标题(title)、图例(legend)、主要刻度(majortick)、次要刻度(minortick)、刻度标签(ticklabel)、y轴标签(yaxislabel)、x轴标签(xaxislabel)、数据标记(markers)、网格(grid)线等。4.3.1

图表主要组成元素调整总的来说在Matplotlib中主要分为两大类元素,说明如下:(1)基础类元素:线(line)、点(marker)、文字(text)、图例、图表标题、图片(image)等。(2)容器类元素:图形、坐标图形、坐标轴(axis)和刻度(tick)。基础类元素是需要绘制的标准对象,容器类元素可以包含许多基础类元素并将它们组织成一个整体,它们也有层级结构:图形包含坐标图形;坐标图形包含坐标轴;坐标轴又包含刻度,这些元素的区别和说明如下:①figure对象。整个图形即是一个figure对象。figure对象至少包含一个子图,也就是axes对象。figure对象包含一些特殊的artist对象,例如图名、图例。②axes对象。字面上理解,axes是axis的复数,但它并不是指这些坐标轴,而是子图对象。可以这样理解,每一个子图都有x轴和y轴,axes则用于代表这两个坐标轴所对应的一个子图对象。4.3.1

图表主要组成元素调整③axis对象。axis是数据轴对象,主要用于控制数据轴上的刻度位置和显示数值。axis有locator和formatter两个子对象,分别用于控制刻度位置和显示数值。④tick对象。常见的二维直角坐标系都有两条坐标轴,横轴和纵轴。每个坐标轴都包含两个元素:刻度(容器类元素),该对象里还包含刻度本身和刻度标签;标签(基础类元素),该对象包含的是坐标轴标签。下面则对常用基础元素的设置函数做介绍和说明。4.3.1

图表主要组成元素调整1.添加图例和标题添加图例一般使用legend()函数,添加标题使用title()函数,两者的官方函数原型为:legend(*args,**kwargs)title(label,fontdict=None,loc=None,pad=None,y=None,**kwargs)(1)title()的核心参数有:①label:一个字符串,为标题的文本内容。②fontdict:一个控制标题文本外观的字典,可以指定字体大小(fontsize)和字体颜色(color)一系列文本风格。③loc:指定文本的放置方位,可选值为{'center','left','right'},分别为居中、靠左、靠右。(2)legend()函数的核心参数有:①loc:指定图例的位置,可以用完整的方位名词或对应数字值来设置,两者的对应关系如表所示。②facecolor:图例的背景颜色,默认为白色。③edgecolor:图例的边框颜色,默认为黑色。④fontsize:图例字体大小。4.3.1

图表主要组成元素调整1.添加图例和标题LocationStringLocationCodeLocationStringLocationCodebest0centerleft6upperright1centerright7upperleft2lowercenter8lowerleft3uppercenter9lowerright4center10right5--4.3.1

图表主要组成元素调整2.调整刻度格式和设置刻度标签对x,y轴的刻度范围设置一般用到xlim()和ylim()两个函数;标题设置一般使用xlabel()和ylabel()两个函数;内容和格式设置一般使用xticks()和yticks()两个函数。(1)xlim()和ylim()函数的原型为:xlim(*args,**kwargs)ylim(*args,**kwargs)它们的函数调用形式为xlim(left,right)和ylim(left,right)。其中,left:限定的最小值。right:限定的最大值。4.3.1

图表主要组成元素调整2.调整刻度格式和设置刻度标签(1)xlabel()和ylabel()函数的原型为:xlabel(xlabel,fontdict,labelpad,loc,**kwargs)ylabel(ylabel,fontdict,labelpad,loc,**kwargs)函数的核心参数为:①xlabel,ylabel:为一个指定字符串,为标签文本内容。②loc:指定标签位置。可选值为{'bottom','center','top'},分别表示位于底部、居中、顶部,默认为居中。③**kwargs:传入一系列Text属性参数。这一参数控制标签文本外观,如“alpha”、“color”等属性。4.3.1

图表主要组成元素调整2.调整刻度格式和设置刻度标签(2)xticks()和yticks()函数的原型为:xticks(ticks,labels,**kwargs)yticks(ticks,labels,**kwargs)两个函数的核心参数为:①ticks:类似数组,可选。该参数是轴线每个刻度位置的列表,如果传入一个空列表,则会移除该坐标轴刻度。②labels:类似数组,可选。这个参数所传递的标签内容将会安放在ticks所传数组的相应位置上,所以这样也就要求了两个数组必须对应,不然会出错。③**kwargs:传入一系列Text属性参数。这一参数控制标签文本外观,如“alpha”、“color”等属性。4.3.1

图表主要组成元素调整3.为图表添加网格线绘制网格线一般使用grid()函数,其函数原型为:grid(b,which,axis,**kwargs)其中,①b:为bool型值或为None,可选。用于指定是否展现网格。②which:可选值为{'major','minor','both'},指定你想要修改的网格线。③axis:可选值为{'both','x','y'},用于指定哪条坐标轴应用更改。④**kwargs:传入一系列Line2D属性参数。这一参数指定网格线条特性,如“linestyle”、“linewidth”等属性。4.3.1

图表主要组成元素调整4.绘制参考线绘制参考线一般使用axhline()和axvline()两个函数,分别可以绘制平行于x,y轴的参考线。axhline()和axvline()函数的原型为:axhline(y,xmin,xmax,**kwargs)axhline(y,xmin,xmax,**kwargs)axhline()和axvline()函数核心参数为:①x或y:水平参考线的出发点。②**kwargs:传入一系列Line2D属性参数。这一参数指定参考线线条特性,例如“linestyle”、“linewidth”等属性。4.3.1

图表主要组成元素调整5.添加图表注释绘制注释一般使用annotate()和text()函数,分别用于添加指向型注释文本和无指向型注释文本。annotate()和text()函数的原型为:annotate(text,xy,*args,**kwargs)text(x,y,s,fontdict)annotate()函数核心参数为:①text:注释的文本内容,一个字符串。②xy:(float,float)形式。指定所添加注释指向的点的坐标。③xytext:(float,float)形式。注释文本的位置坐标。④arrowprops:指示被注释内容的箭头的属性字典。⑤**kwargs:传入一系列Text属性参数。这一参数控制标签文本外观,如“alpha”、“color”等属性。4.3.1

图表主要组成元素调整6.向统计图形添加表格绘制表格一般使用table()函数,其函数原型为:table(cellText=None,cellColours=None,cellLoc='right',colWidths=None,rowLabels=None,rowColours=None,rowLoc='left',colLabels=None,colColours=None,colLoc='center',loc='bottom',bbox=None,edges='closed',**kwargs)其中,①cellText:二维列表或字符串。放在表格单元里面的文本内容。②cellLoc:表格中的数据对其位置,可选值为{'left','center','right'},分别为左对齐、居中、右对齐,默认为右对齐。③colWidths:表格每列的宽度。④colLabels:表格每一列的名称标签。⑤colColours:表格每列的列头所在单元格的颜色。⑥rowLabels:表格每一行的行名称标签。⑦rowLoc:表格每行名称单元格的对齐方式,可选值为{'left','center','right'},分别为左对齐、居中、右对齐,默认为左对齐。⑧loc:表格在画布的位置。4.3.1

图表主要组成元素调整函数的基本元素设置介绍完毕,下面是一个元素设置综合运用的案例importmatplotlib.pyplotaspltimportnumpyasnpimportmatplotlibasmpl

#设置字体mpl.rcParams["font.sans-serif"]="SimHei"mpl.rcParams["axes.unicode_minus"]=False

#数据准备x=np.linspace(0.2,3.0,100)y1=np.sin(x)y2=np.random.randn(100)

#绘图plt.scatter(x,y2,c="green",label="散点图",edgecolor="none")plt.plot(x,y1,ls="--",c="orange",lw=3,label="曲线图")4.3.1

图表主要组成元素调整#开始完善图表元素设置#设置刻度范围plt.xlim(0.0,4.0)plt.ylim(-4.0,4.0)#设置坐标轴标签plt.ylabel("Y轴",rotation=360)plt.xlabel("X轴")#设置网格plt.grid(True,ls=":",color="grey")#设置参考线plt.axhline(y=0.0,c="r",ls="--",lw=2)#设置注释plt.annotate("y=sin(x)",xy=(np.pi/2,1.0),xytext=(1.8,2),color="r",fontsize=15,arrowprops=dict(arrowstyle="->",connectionstyle="arc3",color="r"))4.3.1

图表主要组成元素调整plt.annotate("y,x轴",xy=(0.75,-4),xytext=(0.35,-2.7),color="b",fontsize=15,arrowprops=dict(arrowstyle="->",connectionstyle="arc3",color="b"))plt.annotate("",xy=(0,-3.5),xytext=(0.3,-2.7),color="b",arrowprops=dict(arrowstyle="->",connectionstyle="arc3",color="b"))plt.annotate("",xy=(3.5,0.0),xytext=(3.4,-1.0),color="b",arrowprops=dict(arrowstyle="->",connectionstyle="arc3",color="b"))plt.text(3.0,-1.3,"图表参考线",color="b",fontsize=15)#设置标题plt.title("图表元素设置示例",color="m",fontsize=20)#设置图例plt.legend(loc="upperright",fontsize="12")#展示图形plt.show()4.3.1

图表主要组成元素调整绘图结果如下图所示:4.3.2

颜色参数及映射表1.颜色参数的使用颜色参数一般是在具体的函数中使用,例如下面在前文的代码中出现的的函数调用。plt.title("图表元素设置示例",color="m",fontsize=20)plt.text(3.0,-1.3,"图表参考线",color="b",fontsize=15)map.fillcontinents(color="coral",lake_color="aqua")颜色参数总结起来有以下几种赋值方式:(1)使用英文全称。举例如下:color='black'color='red'4.3.2

颜色参数及映射表1.颜色参数的使用Matplotlib完整的颜色名称对应如图所示。4.3.2

颜色参数及映射表1.颜色参数的使用(2)使用英文缩写。举例如下,且列出常见颜色的对应表,如表所示。color='k'color='r'颜色缩写颜色缩写蓝色b洋红色m

温馨提示

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

评论

0/150

提交评论