《2023大数据分析工具Matplotlib用法.docx》由会员分享,可在线阅读,更多相关《2023大数据分析工具Matplotlib用法.docx(23页珍藏版)》请在课桌文档上搜索。
1、大数据分析工具MatPIotlib用法目录1.1初级绘制3L使用默认配置42 .改变线条的颜色和粗细63 .设置边界64 .设置刻度65 .设置刻度标签76 .移动轴线87 .添加图例88 .注解某些点91.2图像、子区、子图、刻度101 .图像102 .子图113 .坐标轴114 .刻度111.3其他种类的绘图131 .常规绘图132 .散点图143 .条形图154 .等高线图175 .饼图186 .矢量图197 .极轴图208 .三维绘图211.4总结22大数据分析工具MatPlOtlib用法MalPlotlib是PyIhon2D绘图领域使用广泛的套件。它能让使用者很轻松地将数据图形化,并
2、且提供多样化的输出格式。本章将会探索MatPlotIib的常见用法。在MatPIOtlib中使用最多的模块是PyPlot。PyIab是MaIPIouib面向对象绘图库的一个接口。它的语法和Matlab十分相近。也就是说,它主要的绘图命令和MaHab对应的命令有相似的参数。1.1 初级绘制使用MatPIOHib库绘图,原理很简单,就是下面这5步: 创建一个图纸(figure)o 在图纸上创建一个或多个绘图(PlOlting)区域(也叫子图、坐标系/轴)。 在PIotting区域上描绘点、线等各种marker。 为plotting添加修饰标签(绘图线上的或坐标轴上的)。 其他各种DIY。在上面的过
3、程中,主要涉及下面3个元素: 变量。 函数。 图纸(figure)和子图(axes,也可以理解成坐标轴)。其中,变量和函数通过改变figure和axes中的元素(例如标题、标签、点和线等)一起描述figure和axes,也就是在画布上绘图。图片结构如图5.1所示。图5.1MaIPlOuib库绘图图片结构这一节将从简到繁:先尝试用默认配置在同一张图上绘制正弦和余弦函数图像,然后逐步美化它。下面取得正弦函数和余弦函数的值:frompylabimport*X=n.Iinspace(-n.i,np.i,256,endPoint=TrUe)C,S=np.cos(X)tnp.sin(X)X现在是一个NUm
4、Py数组,包含从-到+(包含)等差分布的256个值。C是正弦值(256个值),S是余弦值(256个值)。可以在IPython的交互模式下测试代码,也可以执行Python文件。pythonexercise_l.py1.使用默认配置MatPIoHib的默认配置都允许用户自定义。可以调整大多数的默认配置:图片大小和分辨率(dpi)、线宽、颜色、风格、坐标轴以及网格的属性、文字与字体属性等。不过,MatPIOHib的默认配置在大多数情况下已经做得足够好,只在很少的情况下才会更改这些默认配置。frompylabimport*X=np.Iinspace(-np.pi,np.piz256,endpoint=
5、True)C,S=np.cos(X)znp.sin(X)plot(X,C)plot(X,S)show()MatPIOuib使用默认配置的正余弦图如图5.2所示。1.0下面的代码中展现了MatPIoHib的默认配置并辅以注释说明,这部分配置包含有关绘图样式的所有配置。代码中的配置与默认配置完全相同,可以在交互模式中修改其中的值来观察效果。# 导入MatPIQtlib的所有内容(NymPy可以用np这个名字)frompylabimport*# 创建一个8*6点(point)的图,并设置分辨率为80figure(figsize=(8,6)rdi=80)# 创建一个新的1*1的子图,接下来的图样绘制在
6、其中的第1块(也是唯一的一块)subplot(lz1,1)X=np.Iinspace(-np.pi,np.pi,256zendpoint=True)C,S=np.cos(X),np.sin(X)# 绘制余弦曲线,使用蓝色的、连续的、宽度为1(像素)的线条plot(X,C,color=blue,zIinewidth=I.0,linestyle=-)# 绘制正弦曲线,使用绿色的、连续的、宽度为1(像素)的线条plot(X,Szcolor=,green,Iinewidth=I.0,Iinestyle=-)# 设置横轴的上下限Xlim(-4.0,4.0)# 设置横轴记号xticks(np.Iinspa
7、ce(-4,4,9,endpoint=True)# 设置纵轴的上下限ylim(-1.0z1.0)# 设置纵轴记号yticks(np.Iinspace(-1,1,5,endpoint=True)# 以分辨率72来保存图片# savefig(exercice_2.png,zdpi=72)# 在屏幕上显示show()2 .改变线条的颜色和粗细以蓝色和红色分别表示余弦和正弦函数,而后将线条变粗一点。在水平方向拉伸一下整个图,如图5.3所示。图5.3改变线条的颜色和粗细figure(figsize=(10,6),dpi=80)plot(X,C,color=blue,linewidth=2.5,Iines
8、tyle=-)plot(X,S,color=red,zlinewidth=2.5zlinestyle=*-)3 .设置边界当前的图像边界有点太紧了,而且想要预留一点空间使数据点更清晰。Xlim(X.min()*1.1,X.max()*1.1)ylim(C.min()*1.1,C.max()*1.1)4 .设置刻度当前的刻度并不理想,因为不显示正余弦中我们感兴趣的值(+/-砥+/-兀/2)。我们将进行更改,让其只显示这些值。xticks(-np.piz-np.pi2z0,np.pi2znp.pi)yticks(-1,0,+1)效果如图5.4所示。5 .设置刻度标签刻度已经设置得很合适了,但是其标
9、签并不是很清楚,可以猜出3.142是心但是最好让它更直接。当设置刻度值时,也可以在第二个参数列表中提供相应的标签。注意,用EeX可以获得更好渲染的标签。xticks(-np.pi,-np.pi/2,O,np.pi/2,np.pi,r*$-pi$r*$-pi/2$,r,$0$r$+pi/2$,r$+pi$)yticks(-1,0,+1,r,$-l$,r$0$r,$+l$,)效果如图5.5所示。图5.5设置刻度标签6 .移动轴线轴线(spines)是连接刻度标志和标示数据区域边界的线。它们可以被放置在任意地方,现在是轴的边界。改变这点,让它们位于中间。一共有4个轴线(上/下/左/右)。通过将它们的
10、颜色设置成NOne舍弃位于顶部和右部的轴线。然后把底部和左部的轴线移动到数据空间坐标中的零点。a=gca()ax.spines,right,.set_color(,none,)ax.spines*top,.set_color(,none)ax.xaxis.set_ticks_position(bottom*)ax.spines,bottom*.set_position(,data,f0)ax.yais.set_ticks_position(,Ieft,)ax.spines,left,.set_position(data,O)7 .添加图例下面在图片左上角添加一个图例。这仅仅需要向PIot命令添
11、加关键字参数IabeI(之后将被图例框使用)。plot(X,C,color=blue,linewidth=2.5,linestyle=-u,label=,cosineu)plot(XzS,color=,redzlinewidth=2.5zlinestyle=n-,label=sine)legend(Ioc=,upperleft,)图5.6添加图例8 .注解某些点现在使用annotate命令注解一些我们感兴趣的点。选择23作为想要注解的正弦值和余弦值。我们将在曲线上做一个标记和一个垂直的虚线。然后,使用annotate命令来显示一个箭头和一些文本。t=2*np.pi3plot(t,t/0,np.
12、cos(t),color=,blue,linewidth=2.5,linestyle=)scatter(tz/np.cos(t),50,color=,blue,)annotate(r,$sin(frac2pi3)=fracsqrt32$zxy=(t,np.sin(t),xycoords=data,xytext=(+10,+30),textcoords=,offsetpoints,fontsize=16,arrowprops=dict(arrowstyle=,-,connectionstyle=,arc3,rad=.2m)plot(t,t,0,np.sin(t),color=,red*,line
13、width=2.5,Iinestyle=*-*)scatter(t,np.sin(t),50,color=,red)annotate(r,$cos(frac(2pi)3)=-frac1H2$,xy=(t,np.cos(t),xycoords=,data,xytext=(-90,-50)ftextcoords=*offsetpoints,fontsize=16,arrowprops=dict(arrowstyle=一,connectionstyle=,arc3,rad=.2)图5.7注解某些点1.2图像、子区、子图、刻度到目前为止,我们都用隐式的方法来绘制图像和坐标轴。在快速绘图中,这种方法很方
14、便。我们也可以显式地控制图像(Figures)子图(AXeS)和坐标轴。MatPIoUib中的“图像”指的是用户在界面上看到的整个窗口内容。在图像里面有所谓的“子图子图的位置是由坐标网格确定的,而“坐标轴却不受此限制,可以放在图像的任意位置。我们已经隐式地使用过图像和子图:在调用PlOt函数的时候,MatPIoHib调用gca()函数和gcf()函数来获取当前的坐标轴和图像。如果无法获取图像,就会调用figure。函数来创建一个图像,严格地说,是用SUbPk)t(l,1,1)创建一个只有一个子图的图像。1 .图像所谓图像,就是GUl里以“Figure#为标题的那些窗口。图像编号从1开始,与Ma
15、Hab的风格一致,而与PythOn从0开始编号的风格不同。表5.1所示的参数是图像的属性。表5.1图像的属性参数参数默认值描述num1图像的数量figsizcfigure,flgsizc图像的长和宽(英寸)dpi11gurc.dpi分辨率(点/英寸)facecolorfigure,facccolor绘图区域的背景颜色edgecolorfigurc.edgccolor绘图区域边缘的颜色frameonTrue是否绘制图像边缘除了图像数量这个参数外,其余的参数都很少修改。在图形界面中可以单击右上角的“X”来关闭窗口,MatPIotIib还提供了名为CIoSe的函数来关闭这个窗口。和其他对象一样,你可
16、以使用SeIP或者Sejsomething来设置图像的属性。2 .子图用户可以用子图来将图样(PIot)放在均匀的坐标网格中,如图5.8所示。用SUbPlot函数的时候需要指明网格的行列数量,以及希望将图样放在哪个网格区域中。此外,gridspec函数的功能更强大,也可以选择它来实现这个功能。subp-1,color=blue,alpha=.25)pit.fill_between(X,-1,Y-l,(Y-l)-1,color=red*,alpha=.25)pit.xlim(-np.pi,np.pi),pit.xticks()plt.ylim(-2.5r2.5)fpit.yticks()# sa
17、vefig(,.figuresplot-ex.png,dpi=48)pit.show()提示:需要使用f11Lbetween命令。2 .散点图下面尝试生成图5.11所示的图形,注意标记大小、颜色和透明度。於7*图5 11散点图# Copyright(c)2015,NicolasP.Rougier.AllRightsReserved.# Distributedunderthe(new)BSDLicense.SeeLICENSE.txtformoreinfo.importnumpyasnpimportmatplotlib.pyplotaspitn=1024X=np.random.normal(0,
18、1,n)Y=np.random.normal(0,1,n)T=np.arctan2(Y,X)pit.axes(0.025,0.025,0.95,0.95)pit.scatter(X,Y,s=75,c=T,alpha=.5)plt.lim(-l.5,1.5),plt.ticks()plt.ylim(-l.5,1.5),plt.yticks()#savefig(,./figures/scatter_ex.png*,dpi=48)pit.show()提示:色彩由(X,Y)角度给出。3 .条形图下面尝试生成图5.12所示的图形。;079IhiI043050Z043。,7I063093图5.12条形图#
19、 Copyright(c)2015,NicolasP.Rougier.AllRightsReserved.# Distributedunderthe(new)BSDLicense.SeeLICENSE.txtformoreinfo.importnumpyasnpimportmatplotlib.pyplotaspitn=12X=np.arange(n)Yl=(1-X/float(n)*np.random.uniform(0.5,1.0,n)Y2=(1-X/float(n)*np.random.uniform(0.5,1.0,n)pit.axes(0.025,0.025,0.95,0.95)pi
20、t.bar(X,+Ylzfacecolor=,#9999ffzedgecolor=,white)pit.bar(X,-Y2zfacecolor三,Iff9999,edgecolor=,white,)forx,yinzip(X,Yl):pit.text(x+0.4,y+0.05,1%.2f,%y,ha=,center,va=,bottom1)forx,yinzip(X,Y2):pit.text(x+0.4,-y-0.05,%.2f,%y,ha=center*,va=,top)pit.xlim(-.5,n),pit.xticks()lt.ylim(-1.25,+1.25),pit.yticks()
21、# savefig(,./figures/bar_ex.png,dpi=48)plt.show()提示:要注意文本对齐。4 .等高线图下面尝试生成图5.13所示的图形。图5.13等高线图importnumpyasnpimportmatplotlib.pyplotaspitdeff(x,y):return(l-x2+x*5+y*3)*np.exp(-x*2-y*2)n=256x=np.Iinspace(-3,3rn)y=np.Iinspace(-3,3,n)X,Y=np.meshgrid(,y)pit.axes(0.025,0.025,0.95,0.95)pit.contourf(X,Y,f(X
22、,Y),8,alpha=.75,cmap=plt.cm.hot)C=pit.contour(X,Y,f(X,Y),8,colors=,black,linewidth=.5)pit.clabel(C,inline=l,fontsize=10)pit.xticks(),pit.yticks()#savefig(,.figurescontour-ex.ng,di=48)pit.show()5 .饼图下面尝试生成图5.14所示的图形。importnumpyasnimportmatplotlib.pyplotaspitn=20Z=np.ones(n)Z-l*=2pit.axes(0.025,0.025,
23、0.95,0.95)pit.pie(Zrexplode=Z*.05,colors=%f,%(ifIoat(n)foriinrange(n)pit.gca().set_aspect(equal,)pit.xticks()zplt.yticks()#savefig(,./figures/pie_ex.png,dpi=48)pit.show()提示:需要改变Z。6 .矢量图下面尝试生成图5.15所示的图形。图5.15矢量图importnumpyasnpimportmatplotlib.pyplotaspitn=8X,Y=np.mgridO:n,0:nT=np.arctan2(Y-n/2.0,X-n/
24、2.0)R=10+np.sqrt(Y-n/2.0)*2+(X-n/2.0)*2)U,V=R*np.cos(T),R*np.sin(T)plt.axes(0.025,0.025,0.95r0.95)pit.quiver(XzY,U,V,R,alpha=.5)pit.quiver(XzY,U,V,edgecolor=k,facecolor=None,linewidth=.5)pit.xlim(-l,n),pit.xticks()pit.ylim(-lzn),pit.yticks()#savefig(,.figuresquiver-ex.png,dpi=48)pit.show()提示:注意色彩和方向
25、,你需要画两次箭头。7 .极轴图下面尝试生成图5.16所示的图形。importnumpyasnpimportmatplotlib.pyplotaspitax=pit.axes(0.025,0.025,0.95,0.95zpolar=Tre)N=20theta=np.arange(0.0,2*np.pi,2*np.piN)radii=10*np.random.rand(N)width=np.pi/4*np.random.rand(N)bars=pit.bar(theta,radii,width=width,bottom=0.0)forrzbarinzip(radii,bars):bar.set_
26、facecolor(pit.cm.jet(r10.)bar.set_alpha(0.5)ax.set_xticklabels()ax.set_yticklabels()#savefig(,./figures/polar_ex.png,dpi=48)pit.show()提示:仅仅需要修改axes这行。8.三维绘图下面尝试生成图5.17所示的图形。图5.17三维图# Copyright(c)2015,NicolasP.Rougier.AllRightsReserved.# Distributedunderthe(new)BSDLicense.SeeLICENSE.txtformoreinfo.im
27、portnumpyasnpimportmatplotlib.pyplotaspitfrommpl_toolkits.mplot3dimportAxes3Dfig=pit.figure()ax=Axes3D(fig)X=np.arange(-4,0.25)Y=np.arange(-4,4z0.25)X,Y=np.meshgrid(X,Y)R=np.sqrt(X*2+Y*2)Z=np.sin(R)ax.plot_surface(X,Y,Z,rstride=l,cstride=l,cmap=plt.cm.hot)ax.contourf(X,Y,Z1zdir=,z,offset=-2,cmap=plt.cm.hot)ax.set_zlim(-2,2)# savefig(,.figuresplot3d_ex.png,dpi=48)pit.show()提示:需要使用ComoUrf命令。1.4总结MatPlOtIib是Python的绘图库。它可以与NUmPy一起使用,提供了一种有效的Matlab开源替代方案。它也可以和图形工具包一起使用,如PyQt和WXPython。本章主要介绍了MatPIOtlib初级绘图的用法及其绘图种类。