方法 | 当前图像 | 面相对象 | 意义 | 子图是否覆盖原图像 | 如何划分画布 |
---|---|---|---|---|---|
figure | plt.figure() | plt.figure() | 创建画布 | ||
subplot | plt.subplot(2,2,1) | 在画布上创建子图 | 是 | 在轴上划分的子图数量 | |
add_subplot | ax1 = fig.add_subplot(2,2,1) | 在画布上创建子图 | 否 | 在轴上划分的子图数量 | |
subplots | fig,ax = plt.subplots(2,2) | 创建一个画布及子图 | 否 | 在轴上划分的子图数量 | |
subplot2grid | plt.subplot2grid((3,3),(0,0),2,1) | 在网格中特定位置创建子图 | 是 | 网格的位置 | |
add_axes | ax1 = fig.add_axes([0.5,0.5,1,1]) | 在画布特定位置创建子图 | 否 | 轴长的百分比 |
在Matplotlib中,创建一幅图首先要创建一个画布,但在创建画布前,还需要做一些操作,来使图像能够更好的展示。
# 导入matplotlib库中的pyplot
import matplotlib.pyplot as plt
# 使图标在丘比特笔记本中展示
%matplotlib inline
# 解决中文乱码
plt.rcParams['font.sans-serif']='SimHei'
# 解决负号无法显示的问题
plt.rcParams['axes.unicode_minus']=False
# 将图表以矢量图格式显示,提高清晰度
%config InlineBackend.figure_format = 'svg'
创建一个新的画布,可以通过figure()函数来实例化Figure对象
方法:
figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=
参数:
- num:用于对画布进行唯一标号。可以输入一个整数或字符串。
- figsize:输入一个俩元素元组,定义画布的长宽。默认(6.4,4.8)。
- dpi:图像分辨率,默认值为100。
- facecolor:背景颜色。默认为:rc:figre.facecolor‘=’w‘
- edgecolor:边框颜色。如果未提供,默认为:rc:figre.edgecolor‘=’w‘
- frameon:图形框架的显示
实例:
# 创建一个长宽为3的画布
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(3,3))
先隐式的创建一个画布,然后再在画布上添加一个子图。该函数创建并返回一个Axes对象,按照子图索引,按以行主顺序递增。
使用subplot() 方法创建子图将删除任何与其重叠的预先存在的子图,而不是共享边界。
方法:
subplot(*args, **kwargs)
参数介绍:
subplot(nrows, ncols, index, **kwargs)
subplot(pos, **kwargs)
subplot(ax)
参数:
实例:
# 创建两个子图,第二个子图用关键字参数设置为极坐标图ax1 = plt.subplot(2,1,1)
ax1 = plt.subplot(2,1,1)
ax2 = plt.subplot(212,projection='polar')
创建一张画布和一组子图,并返回一个figure和axes对象的元组
方法: subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
参数:
实例:
x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)
# 创建图形,并创建一个子图
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Simple plot')
# 创建两个子图,并将输出的数组压缩成1维
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
ax1.plot(x, y)
ax1.set_title('Sharing Y axis') # 两子图Y轴共轴
ax2.scatter(x, y)
fig, ax = plt.subplots(2,2,figsize=(6,6))
ax = ax.flatten()
ax[0].plot(x, y)
ax[3].scatter(x, y)
创建4个子图,并设置为极轴。通过数组或切片指定子图
fig, ax = plt.subplots(2, 2, subplot_kw=dict(polar=True))
ax[0, 0].plot(x, y)
ax[1, 1].scatter(x, y)
# 也可以写成这种样子
ax[0][0].plot(x,y)
ax[1][1].scatter(x, y)
# 所有的子图共享轴
plt.subplots(2, 2, sharex='all', sharey='all')
# 创建子图10,如果存在,就删除它
fig, ax=plt.subplots(num=10, clear=True)
将画布按照shape函数划分成网格,在网格特定位置创建一个子图。
方法: subplot2grid(shape, loc, rowspan=1, colspan=1, fig=None, **kwargs)
参数:
实例:
# (3,3)为画布的大小,(0,0)说明子图位于画布左上角,colspan = 2说明在行上跨2格
a1 = plt.subplot2grid((3,3),(0,0),colspan = 2)
# (3,3)为画布的大小,(0,2)说明子图位于画布第1行,第3列,rowspan = 3说明在列上跨3格
a2 = plt.subplot2grid((3,3),(0,2), rowspan = 3)
# (3,3)为画布的大小,(1,0)说明子图位于画布第2行,第1列,子图在列上跨2格,在行上跨1格
a3 = plt.subplot2grid((3,3),(1,0),rowspan = 2, colspan = 1)
面对对象的方法,参数及使用与subplot相似,但不会删除与其重叠的子图
面对对象的方法,创建一个子图,如范围内已有图像,则覆盖在原图像上。
方法: add_axes(rect, projection=None, polar=False, **kwargs)
参数:
实例:
# 创建两个子图对象,ax2将覆盖在ax1上
fig = plt.figure()
ax1 = fig.add_axes([0,0,1.5,1.5])
ax2 = fig.add_axes([0.5,0.5,1,1])
对子图的布局进行设置
方法: subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
参数:
注:
实例:
fig, ax = plt.subplots(2, 2)
fig.subplots_adjust(left=0.1, # 调整最左边坐标系到画布左边框的间距(参数 0~1)
right=0.9, # 调整最右边坐标系到画布右边框的间距(参数 0~1)
top=0.2, # 调整最上面坐标系到画布顶部框的间距(参数 0~1)
bottom=0.8, # 调整最下面坐标系到画布底部框的间距(参数 0~1)
wspace=1.5, # 调整坐标系之间的水平间隔
hspace=1.5, # 调整坐标系之间的垂直间隔
)