Python数据可视化 课件 02章 Matplotlib图形构成_第1页
Python数据可视化 课件 02章 Matplotlib图形构成_第2页
Python数据可视化 课件 02章 Matplotlib图形构成_第3页
Python数据可视化 课件 02章 Matplotlib图形构成_第4页
Python数据可视化 课件 02章 Matplotlib图形构成_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

Python数据可视化第2章Matplotlib图表构成教师:xxx2024.07第1节Matplotlib绘图基础第2章

Matplotlib图表构成第2节子图划分第3节Axes属性设置第1节Matplotlib绘图基础Matplotlib是Python平台使用最广泛的绘图库。其结构比较复杂,包含众多的绘图对象和函数。为方便调用,matplotlib.pyplot模块提供了一组命令式绘图接口函数,绘图时主要使用此模块。importmatplotlib.pyplotasplt。下面先看两例:一、绘图框架importnumpyasnpimportmatplotlib.pyplotasplt #导入绘图库plt.rcParams['font.family']='SimHei' #设黑体字体以显示中文plt.rcParams['axes.unicode_minus']=False #正常显示负号x=np.linspace(-2*np.pi,2*np.pi,100) #在[-2π,2π]间生成数列plt.plot(x,np.sin(x),label='sin(x)') #绘制正弦曲线plt.plot(x,np.cos(x),label='cos(x)') #绘制余弦曲线plt.legend(fontsize=14) #显示图例plt.title('正弦-余弦曲线',fontsize=18) #图形标题plt.savefig('pic1.png',transparent=True) #保存为背景透明的图片第1节Matplotlib绘图基础(三)绘制散点图一、绘图框架importnumpyasnpimportmatplotlib.pyplotasplt plt.rcParams['font.family']='SimHei' x=np.arange(1,21) #x作为自变量y=2*x+1+np.random.uniform(-2,2,20) #"y=2x+1+随机数"模拟产生因变量yax=plt.gca() #返回当前绘图区域对象(类型为Axes)ax.scatter(x,y,label='scatterfigure') #在ax上绘制散点图ax.set_title('散点图',fontsize=18) #图标题ax.set_xticks(range(0,25,5)) #设置x轴显示的刻度值ax.set_xlabel('X轴',fontsize=14) #X轴标签ax.set_ylabel('Y轴',fontsize=14) #Y轴标签第1节Matplotlib绘图基础上面两段代码采用了两种编码风格。一种是类似MATLAB风格的“plt.函数()”的方式,这种方式简单,初学者上手快。另一种是采用“ax.set_函数()”的面向对象方式编码,这种设置更灵活。一、绘图框架(四)架构层次Matplotlib库采用面向对象方式架构,主要分为三个层次:1.matplotlib.backend_bases.FigureCanvasBase:绘图画板,用于承载画布。2.matplotlib.backend_bases.RendererBase:代表渲染器,用于在画板上绘图。3.matplotlib.artist.Artist:代表各类图表组件,这些组件利用渲染器绘图。Artist即对应折线、柱体等图形对象。一般绘图只需生成Artist,1和2无需自行生成,均默认存在。图形绘制在一个Figure(画布)上,Figure上至少有一个Axes(子图)对象,可根据需要划分多个Axes。在Axes中可添加简单类型的Artist(例如折线/散点/柱形等)。第1节Matplotlib绘图基础绘图前先准备好数据,数据多采用列表、numpy数组或pandas的DataFrame和Series等格式。绘图基本流程如右图所示。二、绘图流程importnumpyasnpimportmatplotlib.pyplotasplt#导入绘图库x=np.linspace(-2*np.pi,2*np.pi,100)#准备数据plt.plot(x,np.sin(x),label='sin(x)')

#绘正弦曲线plt.title('sin(x)',fontsize=18)

#标题plt.legend(fontsize=14) #图例plt.xlabel('x')

#x轴标签plt.grid() #网格线plt.show()

#显示图形第1节Matplotlib绘图基础在构成图表的各种Artist对象中,Figure(画布)位于最顶层。它容纳了图形的所有元素,是后续所有绘图对象的总容器。画布对象默认已存在,无需自己创建,有需要时也可自建。该对象常用属性有:三、Figure对象Figure.patch:画布的背景矩形。Figure.axes:画布上的所有Axes子图构成的列表。Figure.images:画布上的所有img图片构成的列表。Figure.texts:画布上的所有文字实例构成的列表。创建新画布使用函数plt.figure(),格式如下。(8,6)表示画布宽8英寸,高6英寸fig=plt.figure(figsize=(8,6),facecolor=None,edgecolor=None,frameon=True,**kwargs)fig=plt.gcf()#亦可用此命令获取当前默认画布对象,gcf:getcurrentfigure第1节Matplotlib绘图基础Axes是Figure上的绘图区域,此术语也称为子图或坐标系。axes对象默认存在,也可自行创建。Axes是绘图的核心对象,内部可包含众多图形组件。Axes实例提供了绘图的坐标系,还包含坐标轴对象(xaixs/yaixs轴)。四、Axes子图属性描述属性描述artistsArtist对象linesLine2D对象列表patch作为Axes背景的Patch对象,可以是Rectangle或CirclepatchesPatch对象列表collectionsCollection对象textsText文字对象列表imagesAxesImage对象xaxisXAxis,即x轴legendLegend图例对象yaxisYAxis,即y轴Axes对象的属性第1节Matplotlib绘图基础Axes对象包含很多绘图函数。例如,ax.plot()绘制折线图,ax.bar()绘制条形图。四、Axes子图Axes对象的绘图方法Axes方法创建对象存储于列表Axes方法创建对象存储于列表annotateAnnotatetextsimshowAxesImageimagesbarRectanglepatchestextTexttextserrorbarLine2D、Rectanglelines,patchesplotLine2DlinesfillPolygonpatchesscatterPolygonCollectioncollectionshistRectanglepatches

第1节Matplotlib绘图基础四、Axes子图fig=plt.figure()

#新画布#用add_subplot创建axes对象,1行2列的第1个子图ax=fig.add_subplot(121)ax.patch.set_facecolor('b')

#设置子图背景为蓝色#设置背景的透明度,范围0-1,1表示不透明ax.patch.set_alpha(0.1)#绘制一条线,线是Line2D对象ax.plot([0,1,2],[1,2,3],c='r',marker='x')ax.plot([-1,0,1],[-1,0,1],c='b',marker='d')#再绘一条线#列表lst中含有2个Line2D对象,可供后续修改时引用lst=ax.lines第1节Matplotlib绘图基础pyplot不支持中文,中文会错误显示为小方框,需用plt.rcParams["font.family"]参数设置中文字体。设置中文字体后将导致坐标刻度的负号无法显示,因此还需设置axes.unicode_minus参数,代码如下:五、设置pyplot的参数importmatplotlib.pyplotaspltplt.rcParams['font.family']='SimHei' #设置黑体字体以正确显示中文plt.rcParams['axes.unicode_minus']=False #确保负号显示正常plt.xlim((-5,5)) #设置x轴刻度范围plt.title('中文标题') #执行上面的plt.rcParams语句后,中文和负号应显示正常plt.rcParams['font.sans-serif']='SimHei' #设置黑体,此写法亦可plt.rcParams['font.family']='ArialUnicodeMS' #Mac系统没有Simhei,Mac应设置此中文字体第1节Matplotlib绘图基础rcParams表示“runconfiguration”运行配置参数的意思。绘图对象有默认的属性,这些属性都可用plt.rcParams语句修改,示例如下。五、设置pyplot的参数x=np.linspace(1,10,100)plt.rcParams['lines.linestyle']=':' #修改线条为":"样式

plt.rcParams['lines.linewidth']=5 #修改线条宽度plt.rcParams['font.size']=14 #设置字体的默认大小#sin曲线将采用上面设置的默认线形和宽度plt.plot(x,np.sin(x))#cos曲线用自设的'-.'样式,宽度2plt.plot(x,np.cos(x),ls='-.',lw=2)plt.legend(['sin','cos']) #设图例#修改上述默认设置后,可用下面的命令恢复默认设置

plt.rcdefaults()第2节子图划分一、等分子图区域有时因为业务要求,需要将画布划分为若干子区域,每个子图上绘制不同的图形。plt有多种子图划分函数。plt.subplot()用于生成规整的行列布局的子图,格式为:plt.subplot(numRows,numCols,plotNum)numRows表示将画布分成几行,numCols表示将画布分成几列,plotNum代表子图编号(从1开始)。该命令执行后返回axes子图对象,此对象将成为默认绘图子图,后续的图形对象就自动绘制在此子图上。plt.subplot(2,2,1) #2行2列的第一个子图plt.subplot(221) #允许省略逗号,将参数写为221,效果同上第2节子图划分一、等分子图区域(一)plt.subplot()示例importmatplotlib.pyplotasplt#1行2列模式的第1个子图,此为默认子图plt.subplot(1,2,1)#在坐标(0.4,0.5)处显示红色字符串'121'plt.text(0.4,0.5,'121',c='red',fontsize=20)

plt.subplot(122) #1行2列模式的第2个子图plt.text(0.4,0.5,'122',c='r',fontsize=20)第2节子图划分一、等分子图区域(二)plt.subplots()示例执行此命令将返回一个画布对象fig及由多个axes构成的数组。importmatplotlib.pyplotasplt#返回一个画布对象fig,ax是二维数组,2行2列共4个子图fig,ax=plt.subplots(nrows=2,ncols=2,figsize=(8,6))fig.patch.set_color('b') #画布背景蓝色fig.patch.set_alpha(0.1) #画布背景透明度0.1x=np.arange(1,11)ax[0,0].plot(x,x) #y=x ax[0,1].plot(x,-x) #y=-xax[1,0].plot(x,x**2) #y=x2

ax[1,1].plot(x,np.log(x)) #y=lnx#ravel()将二维转为一维以便遍历fori,axesinenumerate(ax.ravel()): axes.set_title('ax'+str(i+1),fontsize='20')#设置子图titlefig.tight_layout() #调整子图间距,避免重叠第2节子图划分一、等分子图区域(三)fig.add_subplot()示例对比上两条命令,fig.add_subplot()命令的主体是画布对象fig。fig=plt.figure() #创建新画布ax1=fig.add_subplot(221) #2行2列的第1个子图ax1.text(0.4,0.5,'ax1',c='r',fontsize=18)ax3=fig.add_subplot(223) #2行2列的第3个子图ax3.text(0.4,0.5,'ax3',c='r',fontsize=18)ax2=fig.add_subplot(122) #1行2列的第2个子图ax2.text(0.4,0.5,'ax2',c='r',fontsize=18) 第2节子图划分二、划分复杂子图如果遇到复杂的子图划分情况可考虑使用函数plt.subplot2grid()。该函数内含的rowspan和colspan参数可以让子图跨越网格的多行或多列,实现灵活的区域划分。函数的工作方式是设定网格,选中网格,确定选中行列的数量。示例见第2章配套代码文件"02.ipynb"。第2节子图划分三、图中图前面的命令划分的是规整子图。fig.add_axes()命令可在画布的任意位置创建新子图,即使与现有的Axes对象重叠亦可,这样可实现图中图的特殊效果。x=[1,2,3,4,5,6,7]y=[1,7,15,24,30,50,55]plt.plot(x,y,'gD-')#g绿色,D菱形点,-实线plt.title('大图',fontsize=20)fig=plt.gcf()#返回当前画布#(left,bottom)新子图左下角坐标,width:宽度,height:高度#此处将画布宽和高均视为1left,bottom,width,height=0.2,0.5,0.25,0.25#在指定位置创建Axesax=fig.add_axes([left,bottom,width,height])ax.plot(x,y,'r^')#r^红色三角点ax.set_title('图中图',fontsize=16)第3节Axes属性设置Axes实例有x轴和y轴属性,可以使用Axes.xaxis和Axes.yaxis来控制两个轴的相关元素,例如刻度(tick)、刻度标签(ticklabel)、刻度线定位器等。此外,Axes还包含网格线(grid)、参考区域、标题(title)、注释(text)、图例(legend)等图形细节元素,如右图所示。第3节Axes属性设置一、轴属性Axes的周边有四条轴脊(top、bottom、left和right),默认底部的轴脊为x轴,左边的轴脊为y轴,x轴和y轴上有刻度线和刻度标签。函数set_color()、set_linewidth()和set_linestyle()用于设置轴脊的颜色、宽度和样式。#以右轴脊为例,设置其颜色为黄色,宽度为10,样式为虚线importmatplotlib.pyplotaspltax=plt.gcf().gca()

#返回当前画布的当前子图ax.spines['right'].set_color('y')

#设置右轴脊黄色ax.spines['right'].set_linewidth(10)

#线宽ax.spines['right'].set_linestyle('--')

#线条样式第3节Axes属性设置二、网格线、参考线和参考区域为了更好地观察图形和坐标轴的对应关系,通常会在绘图区域添加一些参考元素。例如,背景网格线、水平参考线、竖直参考线、水平参考区域、竖直参考区域等。为避免背景喧宾夺主,可借助参数alpha调节背景透明度。alpha取值在0~1之间,值越小越透明。#设置网格线形态为"-.",红色,透明度0.5plt.grid(linestyle="-.",c='r',alpha=0.5)第3节Axes属性设置三、图例图例用于标识区分画布上的不同绘图组件。绘图时可以先设置各组件的label,然后执行“plt.legend(loc=0)”显示出图例。“loc=0”表示系统将自动选择最合适的位置显示图例,尽量不遮盖图形,此为默认参数。用户也可自行指定图例的位置,例如loc=1表示右上角,loc=2表示左上角,loc=3表示左下角等。loc的取值还可以用字符串“upperright、upperleft、lowerleft”等替代,详情请查询帮助help(plt.legend)。x=np.arange(10)y1,y2,y3,y4=x,x*2,x*3,x*4plt.plot(x,y1,x,y2,'-.',x,y3,':',x,y4,'--')#在legend中为4条线设置label,(1.05,1)图例在Axes区域以外plt.legend(['$y1=x$','$y2=2*x$','$y3=3*x$','$y4=4*x$'],bbox_to_anchor=(1.05,1));第3节Axes属性设置四、标题为图表添加标题可以说明绘图区域的核心信息。plt.title()函数用于设置图像标题,可以指定标题的名称、位置、颜色、字体、大小等。plt.title('标题',fontsize=18,loc='center'),主要参数说明如下:loc:标题位置,取值可为“left/right/center”,默认居中。fontsize:字体大小,默认12。va:垂直对齐,可选参数“center/top/bottom/baseline”。ha:水平对齐,可选参数“left/right/center”。rotation:旋转角度,可选参数“vertical/horizontal”。backgroundcolor:背景颜色。bbox:标题外框,用字典格式定义方框外形。plt.title('中间标题',fontsize=16)plt.title('左边标题',loc='left',fontdict={'fontsize':'18','color':'r','family':'KaiTi'})plt.title('右边标题',loc='right',family='FangSong',fontsize=20,bbox=dict(facecolor='y',edgecolor='blue',alpha=0.3))#标题外框第3节Axes属性设置五、文本格式和注释绘图时可在图形中添加适当文本注释,这样图形释义更清晰。普通的不带箭头的注释可使用函数plt.text()或plt.figtext()添加,带箭头的注释使用函数plt.annotate()添加。plt.text()在当前Axes中添加注释文本,坐标是相对Axes而言。plt.figtext()在当前画布上添加文字,坐标是相对画布而言。plt.axis([0,3,0,2])plt.figtext(0.15,0.9,'figtext()在画布中注释,坐标相对当前画布',c='k',fontsize=16)plt.text(0.1,0.9,'text()在Axes中注释,坐标相对当前Axes',c='b',fontsize=16)plt.text(0.2,1.6,'带框注释',fontsize=20,bbox=dict(fc='y',alpha=0.3))plt.text(2.1,1.5,'旋转角度',fontsize=18,rotation=30)plt.text(0.3,0.4,'水印效果',fontsize=40,alpha=0.1)#透明度很高,水印效果plt.text(2.2,0.35,'上面',fontsize=40,c='r',zorder=2)#重叠时,zorder值大的显示在外

温馨提示

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

评论

0/150

提交评论