1、1一、 前言 .1二、 matplotlib简介 2三、 Matplotlib使用入 门 23.1函数处 理部分( numpy的使用 ) .23.2Matplotlib使用风 格介绍 .4四、 2D图的画 法 94.1坐标轴 91 坐标区 间设置 .92 设置网 格线 .123 自定义 坐标轴刻度 .134 自动标 注坐标轴刻 度 134.2线条 .144.3标签注 释 164.4图像排 版 16五、 3D绘图方 法 16六、 后记 16一、 前言接触 python有近半年的时间了,和大多 数接触过 python的朋友一样,我被它的简单的表述和清晰的描写思路深深 吸引, python的三方模块
2、很是丰富,在不 断的学习中 ,渐渐里就接触 到了 matplotlib, 官 方 的英文文档 很详细, 虽 然 是英文 的, 我想 对于 只要过了四 级 的朋友, 仔细看看 明白不是什 么难事, 原始的官方 英文文档有 80多页, 详细是不 用说,但 还是有点 罗嗦, 本 书的 目的是让你 能快速知道 怎么使用 matplotlib, 当 然个 人所总结的 方法 未必对于 每个人都是 容易接受的 , 但 相 信大多数人 看完本书之 后会对于 matplotlib有一个 比 较清晰 的 理 解 , 读 者 如 果 在 文 中 发 现 错 误 还 请 麻 烦 反 馈 一 下 。 本 书 是 对 于
3、 学 习 中 需 要 用 到matplotlib的人 群 编 写 的 , 你 在 阅 读 之 前 可 能 需 要 了 解 一 些 python的知 识 , 如 果 你 对 于python还一点 不懂,那么 还是请你看 下 python相关的 文档吧。如在阅 读本书中遇 到任何问题 请联系 mastersel本文在 线网址为: htp:/ww.hblib.info/book/m atplotlib.htm lpdf在线网 址为 : htp:/ww.hblib.info/book/m atplotlib.pdf作者个 人博客网址 为 :htp:/ww.hblib.info/-mastersel-2
4、010.2.14二、 matplotlib简介Matplotlib是一个在 python下实现 的类 matlib的 纯 python的三方 库, 旨在用 python实现 matlab的功能 , 是 python下最出 色的绘图库 , 功 能很完 善, 其风格跟 matlib很相 似 ,2同时 也继承了 python的 简 单 明 了 的 风 格 , 其可以 很方便地设 计和输出二 维以及三维 的数 据 ,其提供 了常规的笛 卡尔坐标, 极 坐标, 球 坐 标, 三 维 坐标等 。 其 输 出的图 片质量也达 到了 科技论文 中的印刷质 量,日常的 基本绘图更 不在话下。其使用 中要先安装
5、numpy库( 一个 python下数组 处理的三方 库,可 以很方 便的处理 矩阵, 数组 ), 对 于做 数据图, 其原 理很简单, 就是把 函数变成关于 X,Y,Z的坐标 点的数组 ,如函数 Y=X2,我们画 图是也是先 找一组特征 点 (x,y),然后连 接成线 ,matplotlib出图的 过程和 我们画图 过程差不多 ,先生成 X的一个 取值数组 ,如要画 区间 0,1的图像 ,则先取 0,1之内的 一组数组 (如 :x=arange(0,1,0.01)表示 x以 0.01为步长取 10个点 ),然后去 对应 x的对应 y的值的一 组数据 ,这样以 坐标 (x,y)画出的 图就是一
6、条 曲线了。matplotlib对于图 像美化方面 的比较完善 , 可 以自 定义线条的 颜色和样式 , 可 以在 一 张绘图纸 上绘制多张 小图,也 可以 在一张图上 绘制多条线 ,可 以很方便 地将数据可 视化并对 比分析。 三、 Matplotlib使用 入门Matplotlib的使用 中有好几种 输出风格, 有 matlab的风格 , 和官方文 档的使用的 as风格, 各有所长 ,本文 对比 介绍 matplotlib官方文 档中的使用 风格,我们画 图的目的是 要将函数已 图像显现出 来,所以我们 要用 python处理的 东西有两个 ,一个是函 数, 另 一个是图像 , 函数 部分
7、在 matplotlib的使用 中是用了 numpy这个三 方库, 这 个库有着 很大的科学 计算功能, 但是不用担 心,在使用 中你会发现 他的好用, 3.1函数处理部分(函数处理部分(函数处理部分(函数处理部分(numpy的使用)的使用)的使用)的使用)具体的 使用可以参见 numpy的文档我们使 用 matplotlib将数据 可视化时 基本上 我们只用到 两种方法1: arange函数类 似于 python的 range函数, 通 过 指定开始值 、 终值和步 长来创建一 维数组 ,注意数 组不包括终 值 :importnumpyasnpnp.arange(0,1,0.1)aray(0
8、., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9)此函数 在区间 0,1之间以 0.1为步长 生成一个数 组。如果第 三个参数预 设为 1np.arange(0,10)aray(0,1,2,3,4,5,6,7,8,9)np.arange(0,5.6)aray(0., 1., 2., 3., 4., 5.)np.arange(0.3,4.2)aray(0.3, 1.3, 2.3, 3.3)2: linspace函数通 过指定开始 值、终值和 元素个数来 创建一维数 组,可以通 过 endpoint关键字指 定是否包括 终值,缺省 设置是包括 终值 :n
9、p.linspace(0,1,12)aray(0. , 0.09090909, 0.18181818, 0.27272727, 0.36363636,30.45454545, 0.5454545, 0.63636364, 0.72727273, 0.81818182,0.90909091, 1. )第三个 参数 num预设为 50np.linspace(0,10)aray( 0. , 0.20408163, 0.40816327, 0.61249,0.81632653, 1.02040816, 1.24898, 1.42857143,1.63265306, 1.83673469, 2.0408
10、163, 2.2489796,2.4897959, 2.6530612, 2.85714286, 3.061249,3.26530612, 3.4693876, 3.67346939, 3.875102,4.08163265, 4.28571429, 4.48979592, 4.693875,4.89795918, 5.10204082, 5.3061245, 5.51020408,5.71428571, 5.91836735, 6.124898, 6.32653061,6.5306124, 6.7346938, 6.938751, 7.14285714,7.34693878, 7.51020
11、41, 7.7510204, 7.95918367,8.16326531, 8.36734694, 8.57142857, 8.75102,8.97959184, 9.18367347, 9.38751, 9.59183673,9.79591837, 10. )Numpy库有一般 math库函数 的数组实现 ;如 sin, cos, log,x=np.arange(0,np.pi/2,0.1)y=sin(x)Traceback(mostrecentcallast):File“,line1,iny=sin(x)NameEror:namesin isnotdefinedy=np.sin(x)yar
12、ay(0. , 0.098342, 0.198693, 0.2952021, 0.38941834,0.4794254, 0.56464247, 0.6421769, 0.71735609, 0.7832691,0.84147098, 0.89120736, 0.93203909, 0.9635819, 0.9854973,0.974949)数组的 最后一项不是 1是因为 数组的数据 不是标准的 浮点型的数 据xaray(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)如果要 精确的浮点 计
13、算请参见 numpy文档。基本函 数 (三角 , 对数, 平 方, 立 方, 等 ) 的 使用就是在 函数前加上 np.这样就 能实现数 组的函数 计算。3.2Matplotlib使用风格介绍使用风格介绍使用风格介绍使用风格介绍Matplotlib的使用 中有好几种 输出风格,有 类 matlab的风格 ,和 官 方文档 的使用的 as风 格 ,4各有所 长, 下面详 细介绍这两 种方法先介绍 matlab风格下边的 例子左边是 Matplotlib的类 matlab的风格 ,右边 是原始的 matlab实现,在 Ipython下可以更好地使用 matlab风 格 的 输 入 ,( Ipyth
14、on是一个优秀的 shel工具,比自带的 IDEL要好用 )下图是 Ipython的使用 界面:下面介 绍官方文档 中使用较多的 as风格如我要 做一个正弦 函数的在区 间 -pi,pi图像importnumpyasnp5importmatplotlib.pyplotaspltx=np.arange(-np.pi,np.pi,0.01)y=np.sin(x)plt.plot(x,y,g)plt.show()只需要 四句代码, 简 单 的正弦 函数图就出 来了, 是 不是 很简单, 至 于图像 的美化加标 签等 在后面的 章节给大家 介绍。 官方文 档中给出了 104个函数 的简单介绍 ,我们的
15、各 种样式的图 都可以用他 们实现。Function Descriptionacor plottheautocorelationfunctionanotate anotatesomethinginthefigurearow adanarowtotheaxesaxes createanewaxesaxhline drawahorizontallineacrosaxesaxvline drawaverticallineacrosaxesaxhspan drawahorizontalbaracrosaxesaxvspan drawaverticalbaracrosaxesaxis setorretu
16、rnthecurentaxislimitsbarbs a(wind)barbplot6bar makeabarchartbarh ahorizontalbarchartbroken_barh asetofhorizontalbarswithgapsbox settheaxesframeon/ofstateboxplot makeaboxandwhiskerplotcla clearcurentaxesclabel labelacontourplotclf clearafigurewindowclim adjustthecolorlimitsofthecurentimageclose close
17、afigurewindowcolorbar adacolorbartothecurentfigurecohere makeaplotofcoherencecontour makeacontourplotcontourf makeafiledcontourplotcsd makeaplotofcrosspectraldensitydelaxes deleteanaxesfromthecurentfiguredraw Forcearedrawofthecurentfigureerorbar makeanerorbargraphfiglegend makelegendonthefigurerathe
18、rthantheaxesfigimage makeafigureimagefigtext adtextinfigurecordsfigure createorchangeactivefigurefil makefiledpolygonsfil_betwen makefiledpolygonsbetwentwocurvesfindobj recursivelyfindalobjectsmatchingsomecriteriagca returnthecurentaxesgcf returnthecurentfiguregci getthecurentimage,orNonegetp getagr
19、aphicspropertygrid setwhethergridingison7hexbin makea2Dhexagonalbiningplothist makeahistogramhold settheaxesholdstateiof turninteractionmodeofion turninteractionmodeonisinteractive returnTrueifinteractionmodeisonimread loadimagefileintoarayimsave savearayasanimagefileimshow plotimagedataishold retur
20、ntheholdstateofthecurentaxeslegend makeanaxeslegendloglog aloglogplotmatshow displayamatrixinanewfigurepreservingaspectpcolor makeapseudocolorplotpcolormesh makeapseudocolor plot usingaquadrilateralmeshpie makeapiechartplot makealineplotplot_date plotdatesplotfile plot columndatafromanASCItab/space/
21、comadelimitedfilepie piechartspolar makeapolarplotonaPolarAxespsd makeaplotofpowerspectraldensityquiver makeadirectionfield(arows)plotrc controlthedefaultparamsrgrids customizetheradialgridsandlabelsforpolarsavefig savethecurentfigurescater makeascaterplotsetp setagraphicspropertysemilogx logxaxis8s
22、emilogy logyaxisshow showthefiguresspecgram aspectrogramplotspy plotsparsitypaternusingmarkersorimagestem makeastemplotsubplot makeasubplot(numrows, numcols,axesnum)subplots_adjust changetheparamscontrolingthesubplotpositionsofcurentfiguresubplot_tol launchthesubplotconfigurationtolsuptitle adafigur
23、etitletable adatabletotheplottext adsometextatlocationx,ytothecurentaxesthetagrids customizetheradial thetagridsandlabelsforpolartitle adatitletothecurentaxesxcor plottheautocorelationfunctionofxandyxlim set/getthexlimitsylim set/gettheylimitsxticks set/getthexticksyticks set/gettheyticksxlabel adan
24、xlabeltothecurentaxesylabel adaylabeltothecurentaxesautumn setthedefaultcolormaptoautumnbone setthedefaultcolormaptobonecol setthedefaultcolormaptocolcoper setthedefaultcolormaptocoperflag setthedefaultcolormaptoflaggray setthedefaultcolormaptograyhot setthedefaultcolormaptohothsv setthedefaultcolor
25、maptohsv9四、 2D图的画法我们在 介绍之前先 想想 2D图的一 些元素 我在这 里按我的思 路写下一些 : 坐标轴(尺度,区间 ), 线条(样式,颜色 ), 图和线的标签和注释,图像大小,图像里图片 的排版(一 张图像中多 张图) .下面我们 将分别介 绍 4.1坐标轴坐标轴坐标轴坐标轴我们做 出一个精确的 2D图,其 中 不免要 用数轴来显 示坐标,下 面 介绍 matplotlab里面的 坐标轴使 用: 1 坐标区间设置实例 1:设置 坐标轴的区 间importnumpyasnpimportmatplotlib.pyplotaspltx=np.arange(-5,5,0.01)y
26、=x*3plt.axis(-6,6,-10,10)-6,6,-10,10plt.plot(x,y)plt.show()jet setthedefaultcolormaptojetpink setthedefaultcolormaptopinkprism setthedefaultcolormaptoprismspring setthedefaultcolormaptospringsumer setthedefaultcolormaptosumerwinter setthedefaultcolormaptowinterspectral setthedefaultcolormaptospectra
27、l10细心的 读者会发现 y轴的区 间和给定的 区间并不一 样,这里是 系统自动调 整了的,在 matplotlab下的坐 标轴设置还 有另外一种 方法xlim(xmin,xmax) #设置坐 标轴的最大 最小区间xlim(xmin,xmax) #设置坐 标轴的最大 最小区间ylim(ymin,ymax) #设置坐 标轴的最大 最小区间ylim(ymin,ymax) #设置坐 标轴的最大 最小区间请看下 面实例: importnumpyasnpimportmatplotlib.pyplotaspltx=np.arange(-5,5,0.01)y=x*3plt.xlim(-6,6)(-6,6)1
28、1plt.ylim(-50,50)(-50,50)plt.plot(x,y)plt.show()我们的 程序根据我们 的参数给 出了图像,但 是 我们发现 y轴区间 仍然不是给 定区间( 甚至 当设置 xlim( -2, 2)时, x轴的区 间仍然和给 定的参数不 一致), 下 面我们将给 予讨论:importnumpyasnpimportmatplotlib.pyplotaspltx=np.arange(-5,5,0.01)y=x*3plt.xlim(-2,2)(-2,2)plt.ylim(-50,50)(-50,50)plt.plot(x,y)plt.show()12在 Ipython下
29、show()之后使用参 数 xlim (m in,m ax),ylim (m in,m ax) 可以使 x轴或者 y轴显示到给定参 数的区间, 但是在 show()之前仍 然是无效的 。2 设置网格线grid() 函 数可以提供 是否显示网 格的选项, 当 你在 plot() 之 后加上 grid( True)则 可 以在坐标 上显示网格 importnumpyasnpimportmatplotlib.pyplotaspltx=np.arange(-5,5,0.01)y=x*3plt.xlim(-2,2)(-2,2)plt.ylim(-50,50)(-50,50)plt.plot(x,y)pl
30、t.grid(True)plt.show()133 自定义坐标轴刻度4 自动标注坐标轴刻度144.2线条线条线条线条线条颜 色设置表线条样 式表Alias Colorb blueg grenr redc cyanm m agentay yelowk blackw whitemarkerdescription . point , pixel o circle v triangle_down triangle_up triangle_right 1 tri_down 2 tri_up 3 tri_left 4 tri_right s square p pentago15n * star h hex
31、agon1 H hexagon2 + plus x x D diamond d thin_diamond | vline _ hlineTICKLEFT tickleftTICKRIGHT tickrightTICKUPtickupTICKDOWN tickdownCARETLEFT caretleftCARETRIGHTcaretrightCARETUPcaretupCARETDOWN caretdown None nothing nothing nothing164.3标签注释标签注释标签注释标签注释写作中 .4.4图像排版图像排版图像排版图像排版写作中 .五、 3D绘图方法写作中 .六、 后记写作中 .17