【Python】五、Matplotlib——《用Python做科学计算》

xiaoxiao2021-02-28  93

matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。 它的文档相当完备,并且 http://matplotlib.org/gallery.html 中有上百幅缩略图,打开之后都有源程序。因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定。 本章节作为matplotlib的入门介绍,将较为深入地挖掘几个例子,从中理解和学习matplotlib绘图的一些基本概念。

1.快速绘图

matplotlib的pyplot子库提供了和matlab类似的绘图API,方便用户快速绘制2D图表。让我们先来看一个简单的例子: # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt x = 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("PyPlot First Example") plt.ylim(-1.2,1.2) plt.legend() plt.show()

调用figure创建一个绘图对象,并且使它成为当前的绘图对象。 plt.figure(figsize=(8,4)) 也可以不创建绘图对象直接调用接下来的plot函数直接绘图,matplotlib会为我们自动创建一个绘图对象。如果需要同时绘制多幅图表的话,可以是给figure传递一个整数参数指定图标的序号,如果所指定序号的绘图对象已经存在的话,将不创建新的对象,而只是让它成为当前绘图对象。 通过figsize参数可以指定绘图对象的宽度和高度,单位为英寸;dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80。因此本例中所创建的图表窗口的宽度为8*80 = 640像素。 下面的两行程序通过调用plot函数在当前的绘图对象中进行绘图: 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--"指定曲线的颜色和线型,这个参数称为格式化参数,它能够通过一些易记的符号快速指定曲线的样式。其中b表示蓝色,"--"表示线型为虚线。在IPython中输入 "plt.plot?" 可以查看格式化字符串的详细配置。 接下来通过一系列函数设置绘图对象的各个属性: plt.xlabel("Time(s)") plt.ylabel("Volt") plt.title("PyPlot First Example") plt.ylim(-1.2,1.2) plt.legend() xlabel : 设置X轴的文字 ylabel : 设置Y轴的文字 title : 设置图表的标题 ylim : 设置Y轴的范围 legend : 显示图示 最后调用plt.show()显示出我们创建的所有绘图对象。

2.绘制多轴图

一个绘图对象(figure)可以包含多个轴(axis),在Matplotlib中用轴表示一个绘图区域,可以将其理解为子图。上面的第一个例子中,绘图对象只包括一个轴,因此只显示了一个轴(子图)。我们可以使用subplot函数快速绘制有多个轴的图表。subplot函数的调用形式如下: subplot(numRows, numCols, plotNum) subplot将整个绘图区域等分为numRows行 * numCols列个子区域,然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1。如果numRows,numCols和plotNum这三个数都小于10的话,可以把它们缩写为一个整数,例如subplot(323)和subplot(3,2,3)是相同的。subplot在plotNum指定的区域中创建一个轴对象。如果新创建的轴和之前创建的轴重叠的话,之前的轴将被删除。 下面的程序创建3行2列共6个轴,通过axisbg参数给每个轴设置不同的背景颜色。 for idx, color in enumerate("rgbyck"): plt.subplot(320+idx+1, axisbg=color) plt.show() ---------------------------------------------------------------------------------------------- enumerate是枚举、列举的意思,主要使用对象是列表(list)和字符串(string)。enumerate将其组成一个索引序列,利用它可以同时获得索引(index)和内容(item) list = ["a", "b", "c", "d"] for index, item in enumerate(list): print index, item >>> 0 a 1 b 2 c 3 d ----------------------------------------------------------------------------------------------- 如果希望某个轴占据整个行或者列的话,可以如下调用subplot: plt.subplot(221) # 第一行的左图 plt.subplot(222) # 第一行的右图 plt.subplot(212) # 第二整行 plt.show() 想看完整内容请去原文地址。 本文参考自:http://old.sebug.net/paper/books/scipydoc/matplotlib_intro.html
转载请注明原文地址: https://www.6miu.com/read-84865.html

最新回复(0)