总结:
方法 | 当前图像 | 面相对象 | 意义 | 子图是否覆盖原图像 | 如何划分画布 |
---|---|---|---|---|---|
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库中的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对象
方法:
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的画布
importmatplotlib.pyplot as plt
fig = plt.figure(figsize=(3,3))
subplot() 先隐式的创建一个画布,然后再在画布上添加一个子图。该函数创建并返回一个Axes对象,按照子图索引,按以行主顺序递增。
使用subplot() 方法创建子图将删除任何与其重叠的预先存在的子图,而不是共享边界。
方法:
subplot(*args, **kwargs)
参数介绍:
subplot(nrows, ncols, index, **kwargs)
subplot(pos, **kwargs)
subplot(ax)
参数:
- *args:三个整数或一个三位数(自动解析成三个整数),用于分别对应 nrows, ncols, index
- nrows:在画布纵轴上分隔成几个子图
- ncols:在画布横轴上分隔成几个子图
- index:子图索引 - **kwargs:一些涉及子图属性的关键字参数。此方法还接受返回AXIS基类的关键字参数。
# 创建两个子图,第二个子图用关键字参数设置为极坐标图ax1 = plt.subplot(2,1,1)
ax1 = plt.subplot(2,1,1)
ax2 = plt.subplot(212,projection='polar')
文章图片
subplots(): 创建一张画布和一组子图,并返回一个figure和axes对象的元组
方法: subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
参数:
- nrows / ncols:在行列上子图分割的份数
- sharex / sharey:是否共轴。可选:‘none’, ‘all’, ‘row’, ‘col’, ‘True’, ‘False’
- all / True:所有子图共享轴
- none / False:各自享有自己的轴
- row / col:按子图行或列共享x,y轴 - squeeze:在返回多个子图时,axes是否要压缩为1维数组
- subplot_kw:创建subplot的关键字字典
- **fig_kw:创建figure时的其他关键字
- 创建图形,并创建一个子图
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维
# 创建两个子图,并将输出的数组压缩成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)
文章图片
- 当有多个子图时,用ax接收axes数组后,可以用flatten()转化为1维数组
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)
文章图片
subplot2grid() 将画布按照shape函数划分成网格,在网格特定位置创建一个子图。
方法: subplot2grid(shape, loc, rowspan=1, colspan=1, fig=None, **kwargs)
参数:
- shape:画布的形状。以元组的形式传入,第一项是行数,第二项是列数,数值为整数型。
- loc:子图的位置。以元组的形式传入,第一项是行数,第二项是列数。画布左上坐标为(0,0)
- rowspan:在列向上占几格,默认为1
- colspan:在行向上占几格,默认为1
# (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)
文章图片
add_subplot() 面对对象的方法,参数及使用与subplot相似,但不会删除与其重叠的子图
add_axes() 面对对象的方法,创建一个子图,如范围内已有图像,则覆盖在原图像上。
方法: add_axes(rect, projection=None, polar=False, **kwargs)
参数:
- rect:子图的位置,大小。以列表传入[左、下、宽、高]。
- 左 / 下:以百分比确定
- projection:投影类型
- polar:为True时,相当于projection = ‘polar’
- **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() 对子图的布局进行设置
- 方法: subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
- 参数:
- left:以图形宽度为单位,调整最左侧子图与画布左边框的距离,范围(0-1)
- bottom:以图形高度为单位,调整最下侧子图与画布下边框的距离,范围(0-1)
- right:以图形宽度为单位,调整最右侧子图与画布右边框的距离,范围(0-1)
- top:以图形高度为单位,调整最上侧子图与画布上边框的距离,范围(0-1)
- wspace:调整坐标系之间的水平间隔
- hspace:调整坐标系之间的垂直间隔
- 注:
- left和right值的和为1,且left<=rigth
- bottom和top值的和为1,且bottom<=top
- 【Matplotlib(2)——创建画布】实例:
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,# 调整坐标系之间的垂直间隔
)
推荐阅读
- Python艺术|用Python画双摆
- python自动化办公|用python实现自动化办公------Excel操作
- python学习|matplotlib画图汉字无法显示
- Matplotlib|Python matplotlib seaborn(学习笔记)
- 大数据分析|Python matplotlib plotly
- Phthon|Python matplotlib 堆叠图
- 机器学习|Numpy、Matplotlib、Pandas速成
- 机器学习|用Matplotlib绘制学生身高实例——直方图
- 机器学习|用Matplotlib绘制事物的变化情况实例——折线图