matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地 进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。
1 快速绘图
matplotlib中的快速绘图的函数库可以通过如下语句载入:
import matplotlib.pyplot as plt
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)) #调用figure创建一个绘图对象
#调用plot函数,指定曲线名字、颜色、曲线宽度
plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
plt.plot(x,z,"b--",label="$cos(x^2)$")#参数''b--``指定曲线的颜色和线型,中b表示蓝色,''--``表示线型为虚线
plt.xlabel("Time(s)") #设置x轴文字
plt.ylabel("Volt") #设置y轴文字
plt.title("PyPlot First Example") #设置图标标题
plt.ylim(-1.2,1.2) #设置y轴范围
plt.legend() #显示图示
plt.show() #显示创建的所有绘图对象
实验结果:
matplotlib所绘制的图的每个组成部分都对应有一个对象,我们可以通过调用这些对象的属 性设置方法set_*或者pyplot的属性设置函数setp设置其属性值。例如plot函数返回一个 matplotlib.lines.Line2D 对象的列表,下面的例子显示如何设置Line2D对象的属性:
x = np.arange(0, 5, 0.1)
line, = plt.plot(x, x*x) # plot返回一个列表,通过line,获取其第一个元素
# 调用Line2D对象的set_*方法设置属性
line.set_antialiased(False)
# 同时绘制sin和cos两条曲线,lines是一个有两个Line2D对象的列表
lines = plt.plot(x, np.sin(x), x, np.cos(x))
# 调用setp函数同时配置多个Line2D对象的多个属性值
plt.setp(lines, color="r", linewidth=2.0)
2 绘制多轴图
一个绘图对象(figure)可以包含多个轴(axis),在Matplotlib中用轴表示一个绘图区域,可以将其理解 为子图。上面的第一个例子中,绘图对象只包括一个轴,因此只显示了一个轴(子图)。我们可以使用 subplot函数快速绘制有多个轴的图表。subplot函数的调用形式如下:
subplot(numRows, numCols, plotNum)
subplot将整个绘图区域等分为numRows行 * numCols列个子区域,然后按照从左到右,从上到下 的顺序对每个子区域进行编号,左上的子区域的编号为1。下面的程序创建3行2列共6个轴,通过axisbg参数给每个轴设置不同的背景颜色。
for idx, color in enumerate("rgbyck"):
plt.subplot(320+idx+1, facecolor=color)#原来axisbg已经被facecolor替换掉了
plt.show()
实验结果:
如果希望某个轴占据整个行或者列的话,可以如下调用subplot:
plt.subplot(221) # 第一行的左图
plt.subplot(222) # 第一行的右图
plt.subplot(212) # 第二整行
plt.show()
呈现为:
3 配置文件
一幅图有许多需要配置的属性,例如颜色、字体、线型等等。我们在绘图时,并没有一一对这些属性 进行配置,许多都直接采用了Matplotlib的缺省配置。Matplotlib将缺省配置保存在一个文件中,通 过更改这个文件,我们可以修改这些属性的缺省值。
通过下面的语句可以获取用户配置路径:
>>> import matplotlib
>>> matplotlib.get_configdir()
'C:\\Users\\juzi\\.matplotlib'
通过下面的语句可以获得目前使用的配置文件的路径:
>>> matplotlib.matplotlib_fname()
'D:\\software\\Anaconda3\\lib\\site-packages\\matplotlib\\mpl-data\\matplotlibrc'
由于在当前路径和用户配置路径中都没有找到位置文件,因此最后使用的是系统配置路径下的配置文 件。如果你将matplotlibrc复制一份到脚本的当前目录下:
然后os.getcwd()
函数获得当前的路径,复制配置文件之后再通过matplotlib.matplotlib_fname()
以获得目前使用的配置文件的路径。
如果你用文本编辑器打开此配置文件的话,你会发现它实际上是定义了一个字典。配置文件的读入可以使用 rc_params 函数,它返回一个配置字典:
在matplotlib模块载入的时候会调用rc_params:matplotlib.rcParams
,并把得到的配置字典保存到rcParams变量中。
matplotlib将使用rcParams中的配置进行绘图。用户可以直接修改此字典中的配置,所做的改变会反 映到此后所绘制的图中。例如下面的脚本所绘制的线将带有圆形的点标识符:
matplotlib.rcParams["lines.marker"] = "o"
import pylab
pylab.plot([1,2,3])
pylab.show()
为了方便配置,可以使用rc函数,下面的例子同时配置点标识符、线宽和颜色:
matplotlib.rc("lines", marker="x", linewidth=2, color="b")
pylab.plot([1,2,3])
如果希望恢复到缺省的配置(matplotlib载入时从配置文件读入的配置)的话,可以调用 rcdefaults 函数:
matplotlib.rcdefaults()
如果手工修改了配置文件,希望重新从配置文件载入最新的配置的话,可以调用:
matplotlib.rcParams.update( matplotlib.rc_params() )