Matplotlib(2)——创建画布

总结:

方法 当前图像 面相对象 意义 子图是否覆盖原图像 如何划分画布
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对象
方法:
figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=, clear=False, **kwargs)
参数:
- 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')

Matplotlib(2)——创建画布
文章图片

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')

Matplotlib(2)——创建画布
文章图片

  • 创建两个子图,并将输出的数组压缩成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)

Matplotlib(2)——创建画布
文章图片

  • 当有多个子图时,用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)

Matplotlib(2)——创建画布
文章图片

  • 设置轴共享
# 所有的子图共享轴 plt.subplots(2, 2, sharex='all', sharey='all')

Matplotlib(2)——创建画布
文章图片

  • 创建子图并命名
# 创建子图10,如果存在,就删除它 fig, ax=plt.subplots(num=10, clear=True)

Matplotlib(2)——创建画布
文章图片

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)

Matplotlib(2)——创建画布
文章图片

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])

Matplotlib(2)——创建画布
文章图片

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,# 调整坐标系之间的垂直间隔 )

    推荐阅读