- matplotlib 面向对象的调用接口进行绘图比较烦琐,因此matplotlib还提供了快速绘图的pyplot模块,方便我们快速绘制 二维图表。
- 为了将matplotlib绘制的图表嵌入Notebook中,需要执行下面的命令:
%matplotlib inline
- 使用inline模式在Notebook中绘制的图表会自动关闭,为了在Notebook的多个单元格内操作同一幅图表,需要运行下面命令:
%config InlineBackend.close_figures = False
1. pyplot绘图实例如下:
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()创連一个Figure对象,成为当前Figure对象,如果不调用,则在plot()时自动生成figure对象。
#figsize参数指定Figure对象的宽度和高度,单位为英寸。
#dpi参数指定Figurc对象的分辨率,即每英寸所表示的像素数,这里使用默认值80。
plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
plt.plot(x,z, "b--",label="$cos(x^2)$"
#plot()在当前的Axes(子图)对象上绘图,如果当前的Figure对象中没有Axes对象,将会为之创建一个几乎充满整个图表的Axes对象,作为当前的axes对象。
#label:给曲线指定一个标签,此标签将在图示中可见。如果标签字符用$包裹,则可显示为数学公式。
#color:指定曲线的颜色,颜色可以用"red","#000000",(1.0,0.0,0.0)三种方式表示。
#linewidth: 指定曲线的宽度,可以不是整数,也可以使缩写形式的参数名lw。
#可以使用简写表示颜色和线型,"b--",其中’b’表示蓝色,--表示线型为虚线。
# 下面是Axes对象的各个属性设置:
plt.xlabel("Time(s)")
pit.ylabel("MVolt")
# xlabel、ylabel 分别设置X 、Y 轴的标题文字。
plt.title("PyPlot First Example")
# title: 子图的标题。
plt.ylim(-1.2,1.2)
# xlim、ylim: 分别设 X 、Y 轴的显示范園。
pit.legend()
# legend:显示图例,即图中表示每条曲线的标签(label)和样式的矩形域。
plt.savefig()
# plt.show() 展示图
# plt.savefig()将当前的Figure对象保存成图像文件,图像格式由图像文件的扩展名决定。
# -------------------------------------------
# savefig()的第一个参数可以是文件名,也可以是接口对象。如下:此时需要使用fmt参数指定图像格式。
import io
buf = io.BytesIO() # 创逑一个用来保存图像内容的BytesIO对象
plt.savefig(buf, fmt="png") # 将图像以png格式保存到 buf 中
2. 面向对象进行绘图。
- matplotlib 真正优秀的地方就是面向对象,包括pyplot模块在进行封装的时候也是在内部获取到当前的fig 和 axes 对象后进行的绘图。具体是通过 gcf()获得Figure对象,gca()获得子图的Axes对象。
fig = plt.gcf()
axes = plt.gca()
3. 配置属性
3.1 matplotlib所绘制图表的每个组成部分都和一个对象对应,可以通过调用这些对象的属性设 置方法set_*()或者 pyplot模块的属性设置函数setp()来设置它们的属性值。
方式1:set_*()
plt.figure(figsize=(4j 3))
x = np.arange(0^ 5., 0.1)
line = plt.plot(x, 0.05*x*x)[0] # plot 返回一个列表
line.set_alpha(0.5) # 调用 Line2D 对象的set_*()方法来设置厲性值
方式2 : plt.setp()
lines = plt.plot(x,np.sin(x),x, np.cos(x))
pit.setp(lines,color="r",linewidth=4.0)
3.2 通过调用Line2D对象的get_*() 或者通过plt.getp()来获取对象的属性值:
print line.get_linewidth()
print plt.getp(lines[0], "color") # 返回color属性
- 注意getp()和 setp()不同,它只能对一个对象进行操作: 如果指定属性名称,返冋对象的某个值。 不指定属性名:输出对象的所有属性和值。
f = plt.gcf()
plt.getp(f)
- Figure对象的axes属性是一个列表,它保存图表中的所有子图对象。相同的方式可以获取axes对象的lines属性等。
plt.getp(f,"axes")
plt.getp(f, "axes")[0] is plt.gca()
alllines = plt.getp(plt.gca(), "lines")
4. 绘制多子图
- 一个Figure对象可以包含多个子图(Axes) ,可以使用subplot()快速绘 制包含多个子图的图表,它的调用形式如下:
subplot(numRows, numCols, plotNum)
- 图表的整个绘图区域被等分为numRows行 和 numCols列,然后按照从左到右、从上到下的顺序对每个区域进行编号,左上区域的编号为1。
- 三个参数都小于10,则可以把它们缩写成 个整数,例如 subplot(323)和 subplot(3,2,3)的含义相同。
pit.subplot(221 ) # 第一行的左图
plt.subplot(222) # 第一行的右图
pit.subplot(212) # 第二整行
- 同时绘制多张图。
plt.figure(l) # 创建图表 1
plt.figure(2) # 创建图表 2
axl = plt.subplot(121) # 在图表2 中创建子图1
ax2 = plt.subplot(122) # 在图表 2 中创建了图 2
x = np.linspace(0,3,100)
for i in xrange(5):
plt.figure(l) # 选择图表 1
pit.plot(x, np.exp(i*x/3))
plt.sca(axl) # 选择图表2 的子图1 此处也可以ax1.plot()方式进行。
pit.plot(x, np.sin(i*x))
plt.sca(ax2) # 选择图表2 的子图2
pit.plot(x,np.cos(i*x))
- 批量定义 axes
fig,axes = plt.subplots(2, 3)
[a, b, c], [dj e, f] = axes
- 4.2. 另外一种布局方式:subplot2grid
fig = plt.figure(figsize=(6, 6))
axl = plt.subplot2grid((3,3),(0,0),colspan=2)
ax2 = plt .subplot2grid((3,3),(0,2 ),rowspan=2)
ax3 = plt.subplot2grid((3,3), (1,0),rowspan=2)
ax4 = plt.subplot2grid((3,3), (2,1),colspan=2)
ax5 = plt.subplot2grid((3,3), (1,1))
5. 配置文件
- 关于绘制一幅图中颜色、字体、线型等属性,matplotlib将这些默认配置保存在matplotlibrc的配置文件中,通过修改配置文件,可以修改图表的默认样式。同时存在多个配置文件时,遵从优先原则。
- 获取配置文件路径
from os import path
path .abspath(matplotlib.get_configdir())
#-------------------
path.abspath(matplotlib.matplotlib_fname())
- matplotlib 模块载入时,rc_params()函数读入了配置文件,保存在rcParams变量中。
print(matplotlib.rcParams)
#---------
agg.path.chunksize : 0
animation.avconv_args: [ ]
animation.avconv_path: avconv
animation.bitrate: -1
- 可以通过rcParams变量进行属性设置。缩写为 rc()
matplotlib .rcParams["lines.marker"] = "o"
matplotlib.rc("lines", marker="x", linewidth=2, color="red")
matplotlib .rcdefaults() # 恢复道默认设定。
- 可以调节样式,或者说风格。
from matplotlib import style
print style.available # 可选样式
style.use("ggplot") # 选择ggplot样式。
6. 显示中文。
6.1 获取支持的字体文件
from matplotlib.font_manager import fontManager
fontManagen.ttflist[:3]
[<Font 'cmssl0' (cmssl0.ttf) normal normal 400 normal>,
<Font 'cmbl0' (cmbl0.ttf) normal normal 400 normal>,
<Font 'cmexl0' (cmexl0.ttf) normal normal 400 normal>]
# -------------------
print fontManager.ttflist[0].name
print fontManager.ttflist[0].fname
6.2 设置字体
- 程序中直接指定
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc'、 size=14)
plt.xlabel(u"时间",fontproperties=font)
- 在程序开头修改配置字典rcParams。
pit.rcParams["font.family"] = "SimHei"
pit.plot([1,2,3])
plt.xlabel(0.5 ,0.5, u "中文字体")
- 改配置文件。 (不建议)