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的画布
import  matplotlib.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)——创建画布_第1张图片

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)——创建画布_第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)——创建画布_第3张图片

  • 当有多个子图时,用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)——创建画布_第4张图片

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

Matplotlib(2)——创建画布_第5张图片

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

Matplotlib(2)——创建画布_第6张图片

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)——创建画布_第7张图片

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)——创建画布_第8张图片

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
  • 实例:

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

你可能感兴趣的:(Matplotlib)