Python的绘图库matplotlib快速入门

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

PYTHON的绘图库MATPLOTLIB快速入门12Matplotlib—绘制精美的图表matplotlib是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。它的文档相当完备,并且Gallery页面中有上百幅缩略图,打开之后都有源程序。因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定。展示页面的地址:快速绘图快速绘图matplotlib的pyplot子库提供了和matlab类似的绘图API,方便用户快速绘制2D图表。(matplotlib_simple_plot.py)pylab模块matplotlib还提供了名为pylab的模块,其中包括了许多numpy和pyplot中常用的函数,方便用户快速进行计算和绘图,可以用于IPython中的快速交互式使用。4快速绘图matplotlib中的快速绘图的函数库可以通过如下语句载入:接下来调用figure创建一个绘图对象,并且使它成为当前的绘图对象。通过figsize参数可以指定绘图对象的宽度和高度,单位为英寸;dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80。因此本例中所创建的图表窗口的宽度为8*80=640像素。5importmatplotlib.pyplotaspltplt.figure(figsize=(8,4))快速绘图也可以不创建绘图对象直接调用接下来的plot函数直接绘图,matplotlib会自动创建一个绘图对象。如果需要同时绘制多幅图表的话,可以是给figure传递一个整数参数指定图标的序号,如果所指定序号的绘图对象已经存在的话,将不创建新的对象,而只是让它成为当前绘图对象。下面的两行程序通过调用plot函数在当前的绘图对象中进行绘图:6plt.plot(x,y,label=$sin(x)$,color=red,linewidth=2)plt.plot(x,z,b--,label=$cos(x^2)$)快速绘图plot函数的调用方式很灵活,第一句将x,y数组传递给plot之后,用关键字参数指定各种属性:•label:给所绘制的曲线一个名字,此名字在图示(legend)中显示。只要在字符串前后添加''$''符号,matplotlib就会使用其内嵌的latex引擎绘制的数学公式。•color:指定曲线的颜色•linewidth:指定曲线的宽度第三个参数‘’b--``指定曲线的颜色和线型7plt.plot(x,y,label=$sin(x)$,color=red,linewidth=2)plt.plot(x,z,b--,label=$cos(x^2)$“)快速绘图接下来通过一系列函数设置绘图对象的各个属性:•xlabel/ylabel:设置X轴/Y轴的文字•title:设置图表的标题•ylim:设置Y轴的范围•legend:显示图示最后调用plt.show()显示出创建的所有绘图对象。8plt.xlabel(Time(s))plt.ylabel(Volt)plt.title(PyPlotFirstExample)plt.ylim(-1.2,1.2)plt.legend()快速绘图9importnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(0,10,1000)y=np.sin(x)z=np.cos(x**2)plt.figure(figsize=(8,4))plt.plot(x,y,label=$sin(x)$,color=red,linewidth=2)plt.plot(x,z,b--,label=$cos(x^2)$)plt.xlabel(Time(s))plt.ylabel(Volt)plt.title(PyPlotFirstExample)plt.ylim(-1.2,1.2)plt.legend()plt.show()快速绘图10快速绘图还可以调用plt.savefig()将当前的Figure对象保存成图像文件,图像格式由图像文件的扩展名决定。下面的程序将当前的图表保存为“test.png”,并且通过dpi参数指定图像的分辨率为120,因此输出图像的宽度为“8X120=960”个像素。实际上不需要调用show()显示图表,可以直接用savefig()将图表保存成图像文件.使用这种方法可以很容易编写出批量输出图表的程序.11runmatplotlib_simple_plot.pyplt.savefig(test.png,dpi=120)快速绘图绘制多轴图一个绘图对象(figure)可以包含多个轴(axis),在Matplotlib中用轴表示一个绘图区域,可以将其理解为子图。上面的第一个例子中,绘图对象只包括一个轴,因此只显示了一个轴(子图(Axes))。可以使用subplot函数快速绘制有多个轴的图表。subplot函数的调用形式如下:12subplot(numRows,numCols,plotNum)快速绘图subplot将整个绘图区域等分为numRows行和numCols列个子区域,然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1。如果numRows,numCols和plotNum这三个数都小于10的话,可以把它们缩写为一个整数,例如subplot(323)和subplot(3,2,3)是相同的。subplot在plotNum指定的区域中创建一个轴对象。如果新创建的轴和之前创建的轴重叠的话,之前的轴将被删除。13快速绘图下面的程序创建3行2列共6个轴,通过axisbg参数给每个轴设置不同的背景颜色。如果希望某个轴占据整个行或者列的话,可以如下调用subplot:14foridx,colorinenumerate(rgbyck):plt.subplot(320+idx+1,axisbg=color)plt.show()plt.subplot(221)#第一行的左图plt.subplot(222)#第一行的右图plt.subplot(212)#第二整行plt.show()快速绘图当绘图对象中有多个轴的时候,可以通过工具栏中的ConfigureSubplots按钮,交互式地调节轴之间的间距和轴与边框之间的距离。如果希望在程序中调节的话,可以调用subplots_adjust函数,它有left,right,bottom,top,wspace,hspace等几个关键字参数,这些参数的值都是0到1之间的小数,它们是以绘图区域的宽高为1进行正规化之后的坐标或者长度。15快速绘图subplot()返回它所创建的Axes对象,可以将它用变量保存起来,然后用sca()交替让它们成为当前Axes对象,并调用plot()在其中绘图。如果需要同时绘制多幅图表,可以给figure()传递一个整数参数指定Figure对象的序号,如果序号所指定的figure对象已经存在,将不创建新的对象,而只是让它成为当前的Figure对象。下面的程序演示了如何依次在不同图表的不同子图中绘制曲线。(matplotlib_multi_figure.py)16快速绘图首先通过figure()创建了两个图表,它们的序号分别为1和2。然后在图表2中创建了上下并排的两个子图,并用变量ax1和ax2保存。17importnumpyasnpimportmatplotlib.pyplotaspltplt.figure(1)#创建图表1plt.figure(2)#创建图表2ax1=plt.subplot(211)#在图表2中创建子图1ax2=plt.subplot(212)#在图表2中创建子图2x=np.linspace(0,3,100)快速绘图在循环中,先调用figure(1)让图表1成为当前图表,并在其中绘图。然后调用sca(ax1)和sca(ax2)分别让子图ax1和ax2成为当前子图,并在其中绘图。当它们成为当前子图时,包含它们的图表2也自动成为当前图表,因此不需要调用figure(2)依次在图表1和图表2的两个子图之间切换,逐步在其中添加新的曲线18foriinxrange(5):plt.figure(1)#选择图表1plt.plot(x,np.exp(i*x/3))plt.sca(ax1)#选择图表2的子图1plt.plot(x,np.sin(i*x))plt.sca(ax2)#选择图表2的子图2plt.plot(x,np.cos(i*x))plt.show()快速绘图19快速绘图坐标轴设定Axis容器包括坐标轴的刻度线、刻度标签、坐标网格以及坐标轴标题等内容。刻度包括主刻度和副刻度,分别通过get_major_ticks()和get_minor_ticks()方法获得。每个刻度线都是一个XTick或YTick对象,它包括实际的刻度线和刻度标签。为了方便访问刻度线和文本,Axis对象提供了get_ticklabels()和get_ticklines()方法,可以直接获得刻度标签和刻度线。下面例子进行绘图并得到当前子图的X轴对象axis:20plt.plot([1,2,3],[4,5,6])plt.show()axis=plt.gca().xaxis快速绘图获得axis对象的刻度位置列表:下面获得axis对象的刻度标签以及标签中的文字:21axis.get_ticklocs()array([1.,1.5,2.,2.5,3.])axis.get_ticklabels()#获得刻度标签列表alistof5Textmajorticklabelobjects[x.get_text()forxinaxis.get_ticklabels()]#获得刻度的文本字符串[u'1.0',u'1.5',u'2.0',u'2.5',u'3.0‘]快速绘图22快速绘图下面获得X轴上表示主刻度线的列表,可看到X轴上共有10条刻度线由于没有副刻度线,因此副刻度线列表的长度为0:使用pyplot模块中的xticks()能够完成X轴上刻度标签的配置:23axis.get_ticklines()alistof10Line2Dticklinesobjectsaxis.get_ticklines(minor=True)#获得副刻度线列表alistof0Line2Dticklinesobjectsplt.xticks(fontsize=16,color=red,rotation=45)快速绘图上面的例子中副刻度线列表为空,这是因为用于计算副刻度位置的对象默认为NullLocator,它不产生任何刻度线。而计算主刻度位置的对象为AutoLocator,它会根据当前的缩放等配置自动计算刻度的位置.matplotlib提供了多种配置刻度线位置的Locator类,以及控制刻度标签显示的Formatter类。下面的程序设置X轴的主刻度为π/4,副刻度为π/20,并且主刻度上的标签用数学符号显示π。(matplotlib_axis_text.py自定义坐标轴的刻度和文字)24快速绘图与刻度定位和文本格式化相关的类都在matplotlib.ticker模块中定义,程序从中载入了两个类:MultipleLocaton,FuncFormatter.25frommatplotlib.tickerimportMultipleLocator,FuncFormatterimportmatplotlib.pyplotasplfrommatplotlib.tickerimportMultipleLocator,FuncFormatterimportnumpyasnpx=np.arange(0,4*np.pi,0.01)y=np.sin(x)pl.fig

1 / 81
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功