绘图关键概念Figure和Axes

参考:Parts of a Figure

解析绘图重要概念:Figure、Axes

Figure

Figure指的是整张图,绘图操作都在其上进行

程序中可以创建多张图,但是每次图形操作仅针对单张图进行

常用函数:

  1. figure
  2. suptitle

figure

调用函数matplotlib.pyplot.figure能够创建一张图

matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, clear=False, **kwargs)[source]

关键参数是num,默认为空,每次调用figure递增图像数字,用以区分创建的不同图形;输入指定数字,如果已存在,则返回已创建的图形,否则,新建一个图形

注意:如果调用figure创建了很多图形,退出之前显式调用pyplot.close(),以便pyplot能够正确清理内存

调整大小

设置参数figsize来调整大小,默认大小为640x480,参考rcParams["figure.figsize"] = [6.4, 4.8]

设置图像为600x800

fig = plt.figure(figsize=(6, 8))

保存图形

使用函数matplotlib.pyplot.savefig保存当前Figure

plt.savefig('xxx.png')

使用参数bbox_inches='tight'能够在保存图像时减少四周的空白区域

显示图形

使用函数matplotlib.pyplot.show显示Figure

plt.show()

suptitle

调用matplotlib.pyplot.suptitle为一张图形添加居中标题

示例代码

创建一张图并添加标题

fig = plt.figure(1)
fig.suptitle("hello plt")
fig.show()

Axes

Axes指的是绘图区域(或者称之为子图),绘图操作是在Axes上完成的,可以在Figure上实现多个Axes

一个Axes包含两个(在3D中包含三个)Axis(轴)对象,可以设置标题、x轴标签、y轴标签

常用函数:

  1. plot
  2. subplot
  3. title/xlabel/ylabel

plot

函数matplotlib.pyplot.plot能够在当前Axes上绘制线段或者标记

matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)

输入一个列表,表示仅输入y轴坐标,输入y轴坐标就能够自动生成相应长度的x轴坐标

y = list(range(1, 10))
plt.plot(y)
plt.show()

注意:x轴长度和y轴相同,但是从0开始计数

输入两个列表,表示输入x轴和y轴坐标,注意:两个列表的长度应该相同

x = list(range(11, 20))
y = list(range(1, 10))
plt.plot(x, y)
plt.savefig("plot-x-y.png")
plt.show()

还可以绘制标记点而不是线段

x = list(range(11, 20))
y = list(range(1, 10))

plt.subplot(121)
plt.title('121')

plt.subplot(122) # 1行,2列,第二个
plt.title('122')
plt.plot(x, y, 'r+')

plt.savefig("subplot-1-2-2.png")
plt.show()

subplot

函数matplotlib.pyplot.subplot能够指定当前Figure上要绘制的Axes列表,以及接下来要绘制的Axes位置

matplotlib.pyplot.subplot(*args, **kwargs)

比如指定当前Figure12列共2Axes,指定接下来要绘制的是第二个

x = list(range(11, 20))
y = list(range(1, 10))
# plt.plot(y)
plt.subplot(122) # 1行,2列,第二个
plt.plot(x, y, 'r+')
plt.savefig("subplot-1-2-2.png")
plt.show()

还可以分开表示AxesFigure中的行数/列数和指定当前Axes

subplot(nrows, ncols, index, **kwargs)
subplot(pos, **kwargs)

title/xlabel/ylabel

能够为每个Axes设置标签,x轴标签和y轴标签

参考:

matplotlib.pyplot.title

matplotlib.pyplot.xlabel

matplotlib.pyplot.ylabel

设置标题大小

参考:matplotlib命令与格式:标题(title),标注(annotate),文字说明(text)

默认为large(大小为12``),参考rcParams['axes.titlesize']

可以直接设置数值,也可以使用关键字

['xx-small', 'x-small', 'small', 'medium', 'large','x-large', 'xx-large']

设置如下:

fontdict = {'fontsize': 'small'}
plt.title('xxx', fontdict)

示例程序

实现一个22列子图的图形

fig = plt.figure(figsize=(7.2, 9.6))

fontdict = {'fontsize': 'small'}

x = list(range(1, 5))
y = list(range(6, 10))

plt.subplot(221)  # 第一行第一列
plt.plot(x, y)
plt.title('第一行第一列', fontdict)
plt.xlabel('第一行')
plt.ylabel('第一列')

plt.subplot(222)  # 第一行第二列
plt.plot(x, y, 'r+')
plt.title('第一行第二列', fontdict)
plt.xlabel('x')
plt.ylabel('y')

plt.subplot(223)  # 第二行第一列
plt.plot(x, y, 'bo')
plt.title('第二行第一列', fontdict)
plt.xlabel('x')
plt.ylabel('y')

plt.subplot(224)  # 第二行第二列
plt.plot(x, y, 'go')
plt.title('第二行第二列', fontdict)
plt.xlabel('x')
plt.ylabel('y')

plt.suptitle('2行2列Axes')
plt.savefig('axes-2-2.png')
plt.show()