3.1函数处理部分(numpy的使用).........................................................23.2Matplotlib使用风格介绍..................................................................4四、2D图的画法....................................................................................9
4.1坐标轴.......................................................................................9
1.坐标区间设置.........................................................................92.设置网格线..........................................................................123.自定义坐标轴刻度..................................................................134.自动标注坐标轴刻度................................................................134.2线条.........................................................................................144.3标签注释....................................................................................164.4图像排版....................................................................................16五、3D绘图方法...................................................................................16六、后记............................................................................................16
一、前言
接触python有近半年的时间了,和大多数接触过python的朋友一样,我被它的简单的表述和清晰的描写思路深深吸引,python的三方模块很是丰富,在不断的学习中,渐渐里就接触到了matplotlib,官方的英文文档很详细,虽然是英文的,我想对于只要过了四级的朋友,仔细看看明白不是什么难事,原始的官方英文文档有800多页,详细是不用说,但还是有点罗嗦,本书的目的是让你能快速知道怎么使用matplotlib,当然个人所总结的方法未必对于每个人都是容易接受的,但相信大多数人看完本书之后会对于matplotlib有一个比较清晰的理解,读者如果在文中发现错误还请麻烦反馈一下。本书是对于学习中需要用到matplotlib的人群编写的,你在阅读之前可能需要了解一些python的知识,如果你对于python还一点不懂,那么还是请你看下python相关的文档吧。
如在阅读本书中遇到任何问题请联系mastersell ----------------------------------------------------------------------mastersell------------------------------------------------------------------------2010.2.14 二、matplotlib简介 Matplotlib是一个在python下实现的类matlib的纯python的三方库,旨在用python实现matlab的功能,是python下最出色的绘图库,功能很完善,其风格跟matlib很相似, 1 同时也继承了python的简单明了的风格,其可以很方便地设计和输出二维以及三维的数据,其提供了常规的笛卡尔坐标,极坐标,球坐标,三维坐标等。其输出的图片质量也达到了科技论文中的印刷质量,日常的基本绘图更不在话下。 其使用中要先安装numpy库(一个python下数组处理的三方库,可以很方便的处理矩阵,数组),对于做数据图,其原理很简单,就是把函数变成关于X,Y,Z的坐标点的数组,如函数Y=X2,我们画图是也是先找一组特征点(x,y),然后连接成线,matplotlib出图的过程和我们画图过程差不多,先生成X的一个取值数组,如要画区间[0,1]的图像,则先取[0,1]之内的一组数组(如:x=arange(0,1,0.01)表示x以0.01为步长取100个点),然后去对应x的对应y的值的一组数据,这样以坐标(x,y)画出的图就是一条曲线了。 matplotlib对于图像美化方面的比较完善,可以自定义线条的颜色和样式,可以在一张绘图纸上绘制多张小图,也可以在一张图上绘制多条线,可以很方便地将数据可视化并对比分析。 三、Matplotlib使用入门 Matplotlib的使用中有好几种输出风格,有matlab的风格,和官方文档的使用的as风格,各有所长,本文对比介绍matplotlib官方文档中的使用风格, 我们画图的目的是要将函数已图像显现出来,所以我们要用python处理的东西有两个,一个是函数,另一个是图像,函数部分在matplotlib的使用中是用了numpy这个三方库,这个库有着很大的科学计算功能,但是不用担心,在使用中你会发现他的好用, 3.1函数处理部分(numpy的使用) 具体的使用可以参见numpy的文档 我们使用matplotlib将数据可视化时基本上我们只用到两种方法 1:arange函数类似于python的range函数,通过指定开始值、终值和步长来创建一维数组,注意数组不包括终值:>>>importnumpyasnp>>>np.arange(0,1,0.1) array([0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9])此函数在区间[0,1]之间以0.1为步长生成一个数组。如果第三个参数预设为1>>>np.arange(0,10) array([0,1,2,3,4,5,6,7,8,9])>>>np.arange(0,5.6) array([0.,1.,2.,3.,4.,5.])>>>np.arange(0.3,4.2) array([0.3,1.3,2.3,3.3]) 2:linspace函数通过指定开始值、终值和元素个数来创建一维数组,可以通过endpoint关键字指定是否包括终值,缺省设置是包括终值:>>>np.linspace(0,1,12)array([0.,0.09090909,0.18181818,0.27272727,0.36363636, 2 0.45454545,0.54545455,0.63636364,0.72727273,0.81818182,0.90909091,1.]) 第三个参数num预设为50>>>np.linspace(0,10)array([0.,0.20408163,0.40816327,0.6122449, 0.81632653,1.02040816,1.2244898,1.42857143,1.63265306,1.83673469,2.04081633,2.24489796,2.44897959,2.65306122,2.85714286,3.06122449,3.26530612,3.46938776,3.67346939,3.87755102,4.08163265,4.28571429,4.48979592,4.69387755,4.89795918,5.10204082,5.30612245,5.51020408,5.71428571,5.91836735,6.12244898,6.32653061,6.53061224,6.73469388,6.93877551,7.14285714,7.34693878,7.55102041,7.75510204,7.95918367,8.16326531,8.36734694,8.57142857,8.7755102,8.97959184,9.18367347,9.3877551,9.59183673,9.79591837,10.]) Numpy库有一般math库函数的数组实现;如sin,cos,log, >>>x=np.arange(0,np.pi/2,0.1)>>>y=sin(x) Traceback(mostrecentcalllast): File\" NameError:name'sin'isnotdefined>>>y=np.sin(x)>>>yarray([0.,0.09983342,0.19866933,0.29552021,0.38941834, 0.47942554,0.56464247,0.64421769,0.71735609,0.78332691,0.84147098,0.89120736,0.93203909,0.96355819,0.98544973,0.99749499]) 数组的最后一项不是1是因为数组的数据不是标准的浮点型的数据>>>x array([0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1., 1.1,1.2,1.3,1.4,1.5]) 如果要精确的浮点计算请参见numpy文档。 基本函数(三角,对数,平方,立方,等)的使用就是在函数前加上np.这样就能实现数组的函数计算。 3.2Matplotlib使用风格介绍 Matplotlib的使用中有好几种输出风格,有类matlab的风格,和官方文档的使用的as风格, 3 各有所长,下面详细介绍这两种方法先介绍matlab风格 下边的例子左边是Matplotlib的类matlab的风格,右边是原始的matlab实现, 在Ipython下可以更好地使用matlab风格的输入,(Ipython是一个优秀的shell工具,比自带的IDEL要好用) 下图是Ipython的使用界面: 下面介绍官方文档中使用较多的as风格如我要做一个正弦函数的在区间[-pi,pi]图像>>>importnumpyasnp 4 >>>importmatplotlib.pyplotasplt >>>x=np.arange(-np.pi,np.pi,0.01)>>>y=np.sin(x)>>>plt.plot(x,y,'g') [ 只需要四句代码,简单的正弦函数图就出来了,是不是很简单,至于图像的美化加标签等在后面的章节给大家介绍。 官方文档中给出了104个函数的简单介绍,我们的各种样式的图都可以用他们实现。Functionacorrannotatearrowaxesaxhlineaxvlineaxhspanaxvspanaxisbarbs Description plottheautocorrelationfunctionannotatesomethinginthefigureaddanarrowtotheaxescreateanewaxes drawahorizontallineacrossaxesdrawaverticallineacrossaxesdrawahorizontalbaracrossaxesdrawaverticalbaracrossaxessetorreturnthecurrentaxislimitsa(wind)barbplot 5 barmakeabarchartbarhahorizontalbarchart broken_barhasetofhorizontalbarswithgapsboxsettheaxesframeon/offstateboxplotmakeaboxandwhiskerplotclaclearcurrentaxesclabellabelacontourplotclfclearafigurewindow climadjustthecolorlimitsofthecurrentimage closecloseafigurewindow colorbaraddacolorbartothecurrentfigurecoheremakeaplotofcoherencecontourmakeacontourplotcontourfmakeafilledcontourplot csdmakeaplotofcrossspectraldensitydelaxesdeleteanaxesfromthecurrentfiguredrawForcearedrawofthecurrentfigureerrorbarmakeanerrorbargraph figlegendmakelegendonthefigureratherthantheaxes figimagemakeafigureimagefigtextaddtextinfigurecoordsfigurecreateorchangeactivefigurefill makefilledpolygons fill_betweenmakefilledpolygonsbetweentwocurvesfindobjrecursivelyfindallobjectsmatchingsomecriteria gcareturnthecurrentaxesgcfreturnthecurrentfiguregcigetthecurrentimage,orNonegetpgetagraphicspropertygrid setwhethergriddingison 6 hexbinmakea2Dhexagonalbinningplothistmakeahistogramholdsettheaxesholdstateioffturninteractionmodeoffion turninteractionmodeon isinteractivereturnTrueifinteractionmodeisonimreadloadimagefileintoarrayimsavesavearrayasanimagefileimshowplotimagedata isholdreturntheholdstateofthecurrentaxeslegendmakeanaxeslegendloglogaloglogplotmatshowdisplayamatrixin a new figure preservingaspect pcolormakeapseudocolorplotpcolormeshmakeapseudocolorplot using a quadrilateralmeshpiemakeapiechartplotmakealineplotplot_dateplotdates plotfileplotcolumndatafromanASCII tab/space/commadelimitedfilepiepiecharts polarmakeapolarplotonaPolarAxespsdmakeaplotofpowerspectraldensityquivermakeadirectionfield(arrows)plotrccontrolthedefaultparams rgridscustomizetheradialgridsandlabelsforpolar savefigsavethecurrentfigurescattermakeascatterplotsetpsetagraphicspropertysemilogx logxaxis 7 semilogylogyaxisshowshowthefiguresspecgramaspectrogramplot spyplotsparsitypatternusingmarkersorimage stemmakeastemplot subplotmakeasubplot(numrows,numcols, axesnum) subplots_adjuchangetheparamscontrollingthesubplotst positionsofcurrentfigure subplot_toollaunchthesubplotconfigurationtoolsuptitleaddafiguretitletableaddatabletotheplot textaddsometextatlocationx,ytothecurrentaxes thetagridscustomizetheradialthetagridsandlabelsforpolar titleaddatitletothecurrentaxes xcorrplottheautocorrelationfunctionofxandy xlimset/getthexlimitsylimset/gettheylimitsxticksset/getthexticksyticksset/gettheyticks xlabeladdanxlabeltothecurrentaxesylabeladdaylabeltothecurrentaxesautumnsetthedefaultcolormaptoautumnbonesetthedefaultcolormaptobonecoolsetthedefaultcolormaptocoolcoppersetthedefaultcolormaptocopperflagsetthedefaultcolormaptoflaggraysetthedefaultcolormaptograyhotsetthedefaultcolormaptohothsv setthedefaultcolormaptohsv 8 jetpinkprismspringsummerwinterspectral setthedefaultcolormaptojetsetthedefaultcolormaptopinksetthedefaultcolormaptoprismsetthedefaultcolormaptospringsetthedefaultcolormaptosummersetthedefaultcolormaptowintersetthedefaultcolormaptospectral 四、2D图的画法 我们在介绍之前先想想2D图的一些元素............我在这里按我的思路写下一些:坐标轴(尺度,区间...),线条(样式,颜色...),图和线的标签和注释,图像大小,图像里图片的排版(一张图像中多张图).....下面我们将分别介绍 4.1坐标轴 我们做出一个精确的2D图,其中不免要用数轴来显示坐标,下面介绍matplotlab里面的坐标轴使用: 1.坐标区间设置 实例1:设置坐标轴的区间>>>importnumpyasnp >>>importmatplotlib.pyplotasplt>>>x=np.arange(-5,5,0.01)>>>y=x**3 >>>plt.axis([-6,6,-10,10])[-6,6,-10,10]>>>plt.plot(x,y) [ 9 细心的读者会发现y轴的区间和给定的区间并不一样,这里是系统自动调整了的,在matplotlab下的坐标轴设置还有另外一种方法xlim((xmin,xmax))#设置坐标轴的最大最小区间xlim(xmin,xmax) #设置坐标轴的最大最小区间 ylim((ymin,ymax))#设置坐标轴的最大最小区间ylim(ymin,ymax)#设置坐标轴的最大最小区间 请看下面实例:>>>importnumpyasnp >>>importmatplotlib.pyplotasplt>>>x=np.arange(-5,5,0.01)>>>y=x**3>>>plt.xlim(-6,6)(-6,6) 10 >>>plt.ylim(-500,500)(-500,500)>>>plt.plot(x,y) [ 我们的程序根据我们的参数给出了图像,但是我们发现y轴区间仍然不是给定区间(甚至当设置xlim(-2,2)时,x轴的区间仍然和给定的参数不一致),下面我们将给予讨论:>>>importnumpyasnp >>>importmatplotlib.pyplotasplt>>>x=np.arange(-5,5,0.01)>>>y=x**3 >>>plt.xlim(-2,2)(-2,2) >>>plt.ylim(-500,500)(-500,500) >>>plt.plot(x,y) [ 11 在Ipython下show()之后使用参数xlim(min,max),ylim(min,max)可以使x轴或者y轴显示到给定参数的区间,但是在show()之前仍然是无效的。 2.设置网格线 grid()函数可以提供是否显示网格的选项,当你在plot()之后加上grid(True)则可以在坐标上显示网格 >>>importnumpyasnp >>>importmatplotlib.pyplotasplt>>>x=np.arange(-5,5,0.01)>>>y=x**3 >>>plt.xlim(-2,2)(-2,2) >>>plt.ylim(-500,500)(-500,500) >>>plt.plot(x,y) [ 12 3.自定义坐标轴刻度 4.自动标注坐标轴刻度 13 4.2线条 线条颜色设置表AliasColor‘b’blue‘g’green‘r’red‘c’cyan‘m’magenta‘y’yellow‘k’black‘w’ white 线条样式表 markerdescription‘.’point‘,’pixel‘o’circle‘v’triangle_down‘^’triangle_up‘<’triangle_left‘>’triangle_right‘1’tri_down ‘2’tri_up‘3’tri_left ‘4’tri_right ‘s’square‘p’pentago 14 n ‘*’star‘h’hexagon 1 ‘H’hexagon 2 ‘+’plus‘x’x‘D’diamond‘d’thin_di amond ‘|’vline‘_’hlineTICKLEFticklefTt TICKRIGtickrigHTht TICKUPtickupTICKDOWtickdowNn CARETLEcaretleFTft CARETRIcaretriGHTght CARETUPcaretupCARETDOcaretdoWNwn ‘None’nothing‘‘nothing‘’nothing 15 4.3标签注释 写作中......................... 4.4图像排版 写作中......................... 五、3D绘图方法 写作中......................... 六、后记 写作中......................... 16 17 因篇幅问题不能全部显示,请点此查看更多更全内容