1 figure
1.1 创建figure
在上文中我们一直提到的figure指的是Figure类的实例化对象,当然我们一般不会直接去实例化Figure类,因为这样创建的Figure实例对象不能纳入序列中共同管理。matplotlib中提供了多种方法创建figure,其中属pyplot模块中的figure()方法最常用也最方便,下面我们来说说这个方法。
figure方法参数如下:
- num:整型或字符串类型,可选参数,默认为None。这个参数课可以理解为是figure的身份标识,即id。当值为None时,会创建一个figure实例,该实例的num值会在已有基础上自增;当该参数不为None时,如果与已有的num值重复,则会切换到该figure使其处于激活状态,并返回一个该figure的引用;如果传入的参数为字符串,该字符串将会被设置为figure的标题。
- figsize:tuple类型,可选参数,默认为None。通过figsize参数可以设置figure的size,即(width, height),单位为inch。当值为None时,采用默认size。
- dpi:整型,可选参数,用于设置图片像素。
- facecolor:可选参数,用于设置前景色,默认为白色。
- edgecolor:可选参数,用于设置边框颜色,默认为黑色。
- frameon:bool类型,可选参数,表示是否绘制窗口的图框,默认是。
- FigureClass:传入一个类名,当使用自定义的类实例化figure时使用,默认为matplotlib.figure.Figure。
- clear:bool类型,可选参数,默认为False。如果值为True的话,如果figure已存在,则会清除该figure的全部内容。
from matplotlib import pyplot as plt import matplotlib as mpl import numpy as np mpl.rcParams['font.sans-serif'] = ['SimHei'] # 中文字体支持
fig = plt.figure(figsize=(4,2), facecolor='grey') # 创建figure fig.add_axes((0,0,1,1)) # 必须添加axes后才能显示 plt.show()
在jupyter编辑器中,空白的figure是不会显示的,所以必须在figure中至少添加一个axes。
1.2 figure的常用设置
1.2.1 set方法通用设置
创建figure时的各个参数基本都可以通过figure实例对象中对应的对应的set方法进行修改,例如set_facecolor()用来设置前景色,set_size_inches()用来设置大小等。
设置前景色:
fig = plt.figure(figsize=(4,2)) fig.set_facecolor('grey') # 设置前景色 plt.plot() plt.show()
fig = plt.figure() fig.set_size_inches(2,3) # 设置大小 plt.plot() plt.show()
1.2.2 设置figure标题
fig = plt.figure(figsize=(4,2)) fig.suptitle("figure title", color='red') # 设置figure标题 plt.plot() plt.show()
1.2.3 添加文本
fig = plt.figure(figsize=(4,2)) fig.text(0.5,0.5,"figure text",color='red') # 设置figure标题,前两个参数分别表示到左边框和上边框的百分比距离 plt.plot() plt.show()
1.2.4 设置图例
fig = plt.figure(figsize=(5,3)) axes = fig.add_axes((0,0,0.8,1)) x = np.linspace(0, 10, 1000) line1, = axes.plot(x, np.sin(x)) # 注意,line1后面有个逗号,因为plot()方法返回值是一个列表 line2, = axes.plot(x, np.cos(x)) fig.legend([line1, line2],['sin', 'cos']) plt.show()
1.2.5 设置子图间距
fig, axes = plt.subplots(2,2,facecolor='grey') fig.subplots_adjust(left=None, # 设置画图区域与figure上下左右边框的比例距离 bottom=None, right=None, top=None, wspace=0.3, # 子图间水平方向距离 hspace=1) # 子图间垂直方向距离 plt.show()