版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Ch13图形绘制和数据可视化本章要点:13.1Python绘图模块概述13.2Matplotlib模块13.3Matplotlib基本绘图13.4常用图表类型的绘制13.5面向对象的Matplotlib绘图资源下载提示2课件等资源:扫描封底的“课件下载”二维码,在公众号“书圈”中下载。素材(源码):扫描本书目录上方的二维码下载。讲解视频:扫描封底刮刮卡中的二维码,再扫描书中相应章节中(位于每章最前)的二维码,作为开源的补充阅读和学习资源。
案例研究:扫描封底刮刮卡中的二维码,再扫描书中相应章节中(位于每章最后)的二维码,可以在线学习。电子资源:扫描封底的“补充资源”二维码,在公众号“书圈”中下载,习题参考答案、教学大纲、教学案例、思政刚要和案例分析,以及Python计算生态等补充知识。
题库自测平台:扫描封底刮刮卡中的二维码,登录网站(),进入本书“题库”页面,选择相应章节练习Python绘图模块概述Python标准库中包括tkinter(画布绘图)turtle(海龟绘图)Python提供大量高质量的第三方绘图库,常用的开源绘图模块库如下(1)Matplotlib。Matplotlib可以绘制多种形式的图形,包括普通的线图、直方图、饼图、散点图以及误差线图等;还可以比较方便地定制图形的各种属性,例如图形的类型、颜色、粗细、字体的大小等。(2)Seaborn。Seaborn是基于Matplotlib进行再封装开发的第三方库,并且支持NumPy和Pandas。Seaborn能够对统计类数据进行有效的可视化展示,它提供了一批高层次的统计类数据的可视化展示效果。Seaborn的官网地址为“/”(3)PythonGoogleChart。PythonGoogleChart是GoogleChartAPI的一个完整封装,其官网地址“/”。(4)Pychart。Pychart用于创建高品质封装的PostScript、PDF、PNG或SVG图表Python库,其官网地址为“/pychart/”。(5)PLPlot。PLPlot是用于创建科学图表的跨平台软件包,以C类库为核心,支持各种语言(C、C++、Fortran、Java、Python等),其官网地址为“/”基于Matplotlib模块的绘图(1)Matplotlib是Python最著名的绘图库之一,提供了一整套和MATLAB相似的命令API,既适合交互式地进行制图,也可以作为绘图控件方便地嵌入GUI应用程序中Matplotlib的pyplot子库提供了和MATLAB类似的绘图API,方便用户快速绘制2D图表,包括直方图、饼图、散点图等Matplotlib配合NumPy模块使用,可以实现科学计算结果的可视化显示基于Matplotlib模块的绘图(2)Matplotlib的文档相当完备,其官网的Gallery页面(/gallery.html)中包括各种类型图形的示例图选择需要绘制某种类型的图形,可以查看相应的源代码,复制修改源代码后满足实际需求官网的examples页面(/examples/index.html)中包含大量示例程序图形显示:用户界面后端在Matplotlib中将图形结果显示在屏幕上称为用户界面后端(userinterfacebackend)。后端是Matplotlib的一部分,它在后台工作,基于不同的GUI库实现屏幕可视化基于灵活性同时针对GUI输出,Matplotlib引入了两层结构(1)渲染器(renderer):实现绘制。标准渲染器是Anti-GrainGeometry(AGG),一个高性能的渲染引擎,能够创建具有出版物级质量、抗锯齿和亚像素精度的图像。(2)画布(canvas):显示图形。由GUI库提供(例如GTK+),可以使用AGG呈现输出格式:硬拷贝后端在Matplotlib中将图形结果保存到磁盘文件称为硬拷贝后端(hardcopybackend)。Matplotlib支持众多的输出格式,可用于期刊、书籍、以及其它出版物,也可用于网页等。Matplotlib支持如下的输出格式。(1)光栅图像(RasterImage):包括PNG、JPG和BMP格式。(2)矢量图形(Vectorimage):包括EPS、PDF、PS、SVG格式。Matplotlib用于输出的渲染器及其支持的格式如下。(1)AGG渲染器:支持格式.png。(2)PS渲染器:支持格式.eps、.ps。(3)PDF渲染器:支持格式.pdf。(4)SVG渲染器:支持格式.svg。(5)Cairo渲染器:支持格式.png、.ps、.pdf、.svg。(6)GDK渲染器:支持格式.png、.jpg。PS和EPS格式特别适合于LaTeX文档,而LaTeX文档是科学论文的首选排版格式Matplotlib的特点Matplotlib尝试使简单的事情变得更简单,困难的事情变得可能(Matplotlibtriestomakeeasythingseasyandhardthingspossible),Matplotlib具有如下特点。(1)与MATLAB绘图语法类似,对MATLAB用户友好。(2)融入Python语言生态环境,可与Python包无缝对接。(3)具有良好的可定制性和可扩展性。(4)集成LaTeX标记。(5)跨平台支持(6)开源免费使用Matplotlib模块绘图概述安装Matplotlib模块Matplotlib的官网地址是/。可以直接从官网下载安装Matplotlib模块使用Matplotlib模块绘图,主要使用了Matplotlib.pyplot工具包Matplotlib是一套面向对象的绘图库,其绘制的图表中的每个绘图元素(例如线条、文字、刻度等)都是对象绘制折线图:使用一个列表数据使用单个列表数据绘制折线图时,列表数据作为y轴坐标值,x轴坐标值默认采用列表的索引0到len(lst)象【例13.1】使用plot()函数画图(linecurve.py):绘制列表[1,2,5,6,8],即绘制x轴坐标值为0、1、2、3、4,所对应的y轴坐标值为1、2、5、6、8的折线图importmatplotlib.pyplotasplt#导入matplotlib模块中的子模块pyplotplt.plot([1,2,5,6,8])#绘制列表plt.ylabel('somenumbers')#设置y轴坐标标题plt.show()#显示图形绘制折线图:使用两个列表数据使用两个列表数据绘制折线图时,这两个列表分别对应于x轴数据和y轴数据【例13.2】绘制y=x2的折线图(squarex.py)。使用numpy的linspace()函数生成x轴的坐标点列表,该列表取值范围为[0,10]内的100个点,然后计算y=x*x,最后绘制折线图importmatplotlib.pyplotasplt #导入模块importnumpyasnp #导入模块x=np.linspace(0,10,100) #生成x坐标点的列表y=x*x #生成x坐标点的列表(y=x*x)plt.plot(x,y) #绘制图形plt.show() #显示图形绘制多条曲线图通过多次调用plot.plot()函数可以在同一个图形中绘制多条曲线,然后调用plot.show()函数同时显示多条曲线【例13.3】编写程序(line3.py),在同一个图形中,绘制多条函数曲线y=0.5x、y=5x和y=x2importmatplotlib.pyplotasplt#导入模块importnumpyasnp#导入模块x=np.linspace(0,10,10)#生成x坐标点的列表plt.plot(x,x*0.5)#绘制图形y=0.5xplt.plot(x,x*5)#绘制图形y=5xplt.plot(x,x*x)#绘制图形y=x*x#plt.plot(x,x*0.5,x,x*5,x,x*x)#也可以使用一条语句同时绘制多个图形plt.show()#显示图形设置坐标轴范围importmatplotlib.pyplotasplt#导入模块importnumpyasnp#导入模块x=np.linspace(0,8,100)#生成x坐标点的列表plt.axis([0,8,10,80])#设置两个坐标轴的范围plt.plot(x,10+x*x)#绘制图形plt.show()#显示图形通过观察前面的图形绘制结果,可以发现图形坐标轴的范围会根据数据自动调整(比数据范围略大),因而坐标原点不是0。通过plot.axis()函数可以设置坐标轴的范围。例如:plt.axis([xmin,xmax,ymin,ymax])#设置坐标轴的范围plt.axis(xmin=nn,ymax=mm)#设置坐标轴范围的某个部分xmin,xmax,ymin,ymax=plt.axis()#返回坐标轴的范围plt.xlim([xmin,xmax])#设置x坐标轴的范围plt.ylim([ymin,ymax])#设置y坐标轴的范围【例13.4】编写程序(axisScope.py),绘制图形y=10+x2,并设置x坐标轴的范围为[0,8],y坐标轴的范围为[10,80]设置坐标轴标题和图表标题&图例图形的坐标轴标题和图表标题的设置方法如下。plt.xlabel('x轴标题')#设置x轴坐标轴标题plt.ylabel('y轴标题')#设置y轴坐标轴标题plt.title('图表标题')#设置图表标题如果图表中包含多个数据序列,则可通过图例标识不同的数据。图例的设置方法如下。plt.legend()#显示默认图例plt.legend(['序列1','序列2','序列3'])#设置图例内容plt.legend(loc='best')#指定图例位置,默认为0保存图形到文件将所产生的图形保存到文件的方法如下。plt.savefig('plot1.png')#图像保存到指定的文件plot1.png(当前目录中)plt.savefig('plot2.png',dpi=200)#图形保存到文件,同时指定分辨率在一个图形中同时绘制正弦曲线和余弦曲线importmatplotlib.pyplotasplt #导入模块importnumpyasnp #导入模块x=np.linspace(0,10,100) #生成x坐标点的列表plt.plot(x,np.sin(x),x,np.cos(x)) #绘制正弦曲线和余弦曲线plt.axis(xmin=0,xmax=11,ymin=-1.1,ymax=1.1) #设置两个坐标轴的范围plt.xlabel('x') #设置x轴坐标轴标题plt.ylabel('y') #设置y轴坐标轴标题plt.legend(['sin(x)','cos(x)'],loc='upperright') #设置图例plt.savefig('plot1.png’) #保存图形到文件plt.show() #显示图形【例13.5】编写程序(sincos.py),在一个图形中同时绘制正弦曲线和余弦曲线,设置x坐标轴的范围为[0,11],y坐标轴的范围为[-1.1,1.1]选择图表类型条形图(1)importmatplotlib.pyplotasplt#导入模块plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签#确定柱状图数量,可以认为是x轴刻度(地区:华中、华南、华东、华北、华西)x=[1,2,3,4,5]#x轴刻度y=[5,7,4,3,1]#y轴刻度(销售额,单位:百万)color=['red','black','green','orchid','blue']#颜色列表(红、黑、绿、淡紫色、蓝)x_label=['华中','华南','华东','华北','华西']#x轴刻度标签plt.xticks(x,x_label)#绘制x轴刻度标签plt.bar(x,y,color=color)#绘制y轴刻度标签plt.xlabel('地区')#绘制x轴坐标标题plt.ylabel('销售额(单位:百万)')#绘制y轴坐标标题plt.title('各地区产品年度销售额')#绘制图表标题plt.grid(True,linestyle=':',color='r',alpha=0.6)#设置网格刻度plt.show()#显示垂直柱状图条形图(Barcharts)使用矩形条(垂直或水平)表示值的长度,通常用于直观地比较两个或多个值。垂直方向的条形图又称为柱形图。条形图的语法格式如下:plt.bar(x,height,width=0.8)【例13.6】使用Matplotlib模块绘制各地区产品年度销售额的垂直柱状图(bar1.py),图表标题为“各地区产品年度销售额”,x轴标题为“地区”,x轴刻度标签为“华中、华南、华东、华北、华西”,y轴标题为“销售额”,每个地区的销售额信息采用不同的颜色表示条形图(2)importmatplotlib.pyplotasplt#导入模块plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签x=[5,7,4,3,1]#x轴刻度(销售额,单位:百万)#确定柱状图数量,可以认为是y轴刻度(地区:华中、华南、华东、华北、华西)y=[1,2,3,4,5]color=['red','black','green','orchid','blue']#颜色列表(红、黑、绿、淡紫色、蓝)y_label=['华中','华南','华东','华北','华西']plt.yticks(y,y_label)#绘制y轴刻度标签plt.barh(y,x,color=color)#绘制x轴刻度标签plt.xlabel('销售额(单位:百万)')#绘制x轴坐标标题plt.ylabel('地区')#绘制y轴坐标标题plt.title('各地区产品年度销售额')#绘制图表标题plt.grid(True,linestyle=':',color='r',alpha=0.6)#设置网格刻度plt.show()#显示水平柱状图【例13.7】使用Matplotlib模块绘制各地区产品年度销售额水平柱状图(bar2.py)饼图(1)饼图(Piecharts)使用圆形表示整体,其中扇区(也称为楔形wedges)的弧长表示对应值的比例。饼图适用于比较整体与部分的百分占比。使用plt.pie(x)可以绘制饼图,各值的占比为x/sum(x)。饼图的语法格式如下。plt.pie(x, #每一块饼图的比例
explode=None, #每一块饼图离开中心的距离
labels=None, #每一块饼图外侧显示的说明文字
colors=None, #每一块饼图的颜色
autopct=None, #百分比格式设置
pctdistance=0.6, #百分比绘图位置
shadow=False, #是否有阴影
labeldistance=1.1) #标签绘图位置饼图(2)importmatplotlib.pyplotasplt#导入模块plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签labels=['住房','餐饮','娱乐','其他']#饼图标签percentages=[60.2,20.5,15.1,4.2]#饼图百分比plt.pie(percentages,labels=labels,autopct='%1.1f%%')#饼图参数plt.title("9月份家庭支出占比")#绘制图标标题plt.show()#显示饼图【例13.8】使用Matplotlib模块绘制9月份某家庭各项支出占比的饼状图(pie1.py),假设“住房”“餐饮”“娱乐”和“其他”支出分别占比60.2%、20.5%、15.1%和4.2%,图表标题为“9月份家庭支出占比”,需要显示出各项支出的名称和所占比例(保留一位小数)饼图(3)importmatplotlib.pyplotasplt#导入模块plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签labels=['住房','餐饮','娱乐','其他']explode=(0,0.1,0,0.1)#分离出第2个&第4个切片('餐饮'和'其他')percentages=[60.2,20.5,15.1,4.2]#饼图百分比plt.pie(percentages,explode=explode,labels=labels,autopct='%1.1f%%',shadow=True)plt.title("9月份家庭支出占比")#饼图标题plt.show()#显示饼图【例13.9】使用Matplotlib模块绘制9月份某家庭各项支出占比的饼状图(pie2.py),为每块饼增加阴影,并分离出“餐饮”和“其他”这两个饼块散点图(1)散点图(Scatterplots)显示两组数据值组成的坐标点(x,y)。散点图通常用于识别两个变量之间的潜在关联。使用plt.scatter(x,y)可以绘制散点图。散点图的语法格式如下。plt.scatter(x, #x坐标值的列表
y, #y坐标值的列表
s=None, #点的大小
c=None, #点的颜色
marker=None) #标记散点图(2)importmatplotlib.pyplotasplt#导入模块importnumpyasnp#导入模块x=np.random.randn(1000)#生成由1000个随机点组成的x坐标y=np.random.randn(1000)#生成由1000个随机点组成的y坐标size=np.random.randn(1000)#生成由1000个随机点组成的大小colors=np.random.rand(1000)#生成由1000个随机点组成的颜色plt.scatter(x,y,s=size,c=colors)#绘制由1000个随机点组成的散点图plt.show()#显示图形【例13.10】编写程序(scatters.py),生成1000个随机大小和随机颜色的随机点(x,y),并绘制其散点图绘制直方图(1)直方图(Histogramcharts)是数值数据分布的图形表示。首先将整个值的范围分成一系列间隔(bins,通常为等间隔,Matplotlib也支持不等间隔),然后计算每个间隔中有多少值(频数)。在平面直角坐标系中,横轴标出每个组的端点,纵轴表示频数,每个矩形的高代表对应的频数,这样的统计图称为频数分布直方图使用plt.hist(data,bins=None)可以绘制data的直方图,其中bins为可选参数直方图是由一系列高度不等的纵向条纹或线段表示数据分布的统计报告图。使用Matplotlib.pyplot的hist()函数可以方便快捷地绘制直方图绘制直方图(2)importnumpyasnp#导入numpy模块importmatplotlib.pyplotasplt#导入matplotlib模块中的子模块pyplot#随机生成满足mu为100、sigma为20的正态分布的10万个智商数据mu,sigma=100,20x=mu+sigma*np.random.randn(100000)plt.hist(x,bins=50)#绘制直方图plt.xlabel('IQ')#绘制x轴坐标标题plt.ylabel('Probability')#绘制y轴坐标标题plt.title('HistogramofIQ')#绘制图表标题plt.grid(True)#显示网格plt.show()#显示直方图【例13.11】使用Matplotlib.pyplot的hist()函数绘制直方图示例(histfig.py):随机生成满足mu为100、sigma为20的正态分布的10万个智商数据,并绘制其直方图面向对象的Matplotlib绘图Matplotlib提供了三种绘图方式。(1)MATLAB风格的方式:使用matplotlib.pylab模块,该模块结合Matplotlib和NumPy,提供类似MATLAB的计算绘图环境。不推荐使用。(2)面向过程的方式:使用matplotlib.pyplot模块提供的命令函数,实现MATLAB风格的、面向过程的、全局状态的绘图环境,适用于交互式绘图。前面讨论的绘图方式都是基于面向过程的方式。(3)面向对象的绘图方式Matplotlib提供Python风格的绘图方式,可以实现最灵活的控制,适用基于编程实现复杂绘图面向对象的绘图matplotlib.pyplot提供了三种与绘图相关的对象。(1)FigureCanvas。Figure实例的容器对象。(2)Figure。Axes实例的容器对象,包含一个或多个Axes。(3)Axes。绘图区域对象,包含基本绘图元素,例如线条、文本等。面向对象的绘图方式一般步骤如下。(1)创建Figure对象。例如:fig1=plt.figure()(2)创建Axes对象。使用Figure对象的add_subplot()方法创建子图形(即Axes对象),其语法如下。fig1.add_subplot(numrows,numcols,fgnum)创建numrows行numcols列个子图中的第fgnum个子图(从1开始,从左到右、从上到下编号)。例如:ax1=fig1.add_subplot(1,2,1)#1行2列中的第一个子图ax2=fig1.add_subplot(1,2,2)#1行2列中的第二个子图(3)使用Axes对象的plot方法绘制图形。例如:ax1.plot([1,2,3],[1,2,3])(4)使用Axes对象的其它方法设置图表元素绘制多个子图importmatplotlib.pyplotasplt #导入模块importnumpyasnp #导入模块x=np.linspace(0,10,100) #生成x轴的列表数据(范围[0,10]中的100个点)fig1=plt.figure() #创建一个Figure对象ax1=fig1.add_subplot(2,1,1) #创建一个子图:2行1列中的第1个图ax1.plot(x,np.sin(x)) #绘制y=sin(x)ax1.set_title('sin(x)') #设置图表标题ax2=fig1.add_subplot(2,1,2) #创建一个子图:2行1列中的第2个图ax2.plot(x,np.cos(x)) #绘制y=cos(x)ax2.set_title('cos(x)') #设置图表标题plt.show() #显示图形pyplot支持绘制多个子图,通过figure()函数可以创建一个Figure对象,然后使用Figure对象的add_subpl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年初级会计师考试模拟试题(含答案解析)
- 工会固定资产管理经费审查工作报告
- 保密检查常态化自查整改管理制度
- 2026年企业课程开发设计师职业技能等级认定题库
- 景区运营管理技师试题及答案
- 汕头市妇幼保健院招聘考试真题及答案
- 珠宝行业展厅部导购员商品展示销售手册(执行版)
- 食品安全管理与质量认证手册
- 水泥砂浆屋面施工方案
- 2025-2026年全民健康知识竞赛题库
- 报表模板-土地增值税清算申报表(自动计算申报表)可填写数据
- 化工原理期末考试试题库含答案
- 原发性高血压与继发性高血压
- 被殴打起诉状
- 《市场营销学》吴建安
- 信用修复申请书
- 土建工程竣工结算报告
- 悬臂支护结构设计计算书-钢板桩
- 年产13000吨叔丁胺项目1
- 关于科技素养与高新技术【四篇】
- NB/T 10756-2021煤矿在用无轨胶轮车安全检测检验规范
评论
0/150
提交评论