图形对象函数figure() 及 子图创建函数subplot()

时间:2023-03-10 02:50:31
图形对象函数figure() 及 子图创建函数subplot()

1 图像对象创建函数figure

创建图形Creates a new figure,

图形名既可以作为显示在图形窗口标题栏中的文本,也是该对象的名称

也可以通过mp.figure()获取(或激活)已创建的图形

1.1 语法

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

参数:

num - 整数或字符串,optional。默认值None,

若无,则创建一个新图形,图形编号(数字)递增,同时将数字保存在number属性中;

若提供了num值,系统首先检测该num值(整数或字符串)是否存在,存在则将其设置为活动状态,同时返回对他的应用,若不存在,创建图形并返回它

但是,数字和字符串不同,数字为编号(不会显示在图形中,其内部的编号),字符串为图形名称

figsize - tuple of integers , 指定figure的宽和高,单位为英寸 ,若无提供,defaults to rc figure.figsize.

dpi - 图形的分辨率,int,optinal,若缺省,则defaults to rc figure.dpi.

faceclor - 背景色,若缺省,则 defaults to rc figure.facecolor.

edgecolor - 边框颜色,若缺省,则 defaults to rc figure.edgecolor.

frameon - 布尔值bool,optional ,默认True(绘制边框),若False,则不绘制边框

clear - 布尔值bool,optional,默认False,若True,且该图已存在,则会将其清除并重新绘制

FigureClass - matplotlib.figure.Figure的派生类,optional,使用自定义图形实例

1.2 图形示例

import numpy as np
import matplotlib.pyplot as mp

x = np.linspace(-np.pi, np.pi, 200)
cos_y = np.cos(x)
sin_y = np.sin(x)

# 创建图形对象
mp.figure('Figure Object 1',
          figsize=(4, 3), dpi=120,
          facecolor='lightgray')

# 设置标题
mp.title('Figure Object 1', fontsize=14)

# 设置坐标轴标签
mp.xlabel('x', fontsize=10)
mp.ylabel('y', fontsize=10)

# 设置刻度标签参数大小
mp.tick_params(labelsize=8)

# 设置网格线
mp.grid(linestyle=':')

# 创建图形 2 对象
mp.figure('Figure Object 2',
          figsize=(4, 3), dpi=120,
          facecolor='lightgray')

# 设置标题
mp.title('Figure Object 2', fontsize=14)

# 设置坐标轴标签
mp.xlabel('x', fontsize=10)
mp.ylabel('y', fontsize=10)

# 设置刻度标签参数大小
mp.tick_params(labelsize=8)

# 设置网格线
mp.grid(linestyle=':')

# 通过图形名获取/激活图形对象设置为当前图形对象
# 获取'Figure Object 1'图形对象
mp.figure('Figure Object 1')
mp.plot(x, cos_y, color='orangered',
        label=r'$y=\frac{1}{2}cos(x)$')
mp.legend()

# 获取/激活图形2对象
mp.figure('Figure Object 2')
mp.plot(x, sin_y,
        color='dodgerblue',
        label=r'$y=sin(x)$')
mp.legend()

mp.show()

运行时会先闪现出Figure Object 1图形,最终出现 Figure Object 2 图形,最终的图形2如下

图形对象函数figure() 及 子图创建函数subplot()

matplotlib figure函数学习笔记该文档也具有一定的参考价值

2 子图创建subplot()

2.1 基本语法

语法 - subplot(*args, **kwargs)

作用 - 在给定的网格位置返回子图

具体形式:

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

当前图中,创建并返回一个Axes,其位置索引位于由nrows和ncols创建的虚拟网格中;索引 从1 到 “ ncows * ncols ”,且以行为主顺序递增。

如果 nrows 、ncols 、index 的值均小于10,可以直接以三位数的形式给出。

例如subplot (233) 是以2行、3列的形式给出图形布局形式,创建的Axes的索引是3。

注:subplot(233)为subplot(2, 3, 3)的简化形式。

另外,在创建子图时,除了共享边界的,在创建新的子图前会删除已存在的子图 delete any pre-existing subplot ,

如果不想删除,可以使用 matplotlib.figure.Figure.add_subplot 方法或 matplotlib.pyplot.axes 函数

kwargs 参数主要有 facecolor(背景颜色)、 polar(极轴坐标,默认False)、 projection 等

简单地说:

mp.subplot(ABC)

A:总行数

B:总列数

C:图形号(从1开始)

[231][232][233]
[234][235][236]

2.2 简单示例

import matplotlib.pyplot as plt

plt.figure('Subplot', facecolor='lightgray')
plt.subplot(231)
plt.text(0.5, 0.5, ', ha='center', va='center', size=36, alpha=0.5)

plt.subplot(232)
plt.xticks(())
plt.yticks(())
plt.text(0.5, 0.5, ', ha='center', va='center', size=36, alpha=0.5)

plt.subplot(233,facecolor = "red")
plt.xticks(())
plt.yticks(())
plt.text(0.5, 0.5, ', ha='center', va='center', size=36, alpha=0.5)

plt.subplot(234)
plt.xticks(())
plt.yticks(())
plt.text(0.5, 0.5, ', ha='center', va='center', size=36, alpha=0.5)

plt.subplot(235)
plt.xticks(())
plt.yticks(())
plt.text(0.5, 0.5, ', ha='center', va='center', size=36, alpha=0.5)

plt.subplot(236)
plt.xticks(())
plt.yticks(())
plt.text(0.5, 0.5, ', ha='center', va='center', size=36, alpha=0.5)

# tight_layout 调整子图之间的间隔来减少堆叠
plt.tight_layout()
plt.show()

图形对象函数figure() 及 子图创建函数subplot()

3 格栅布局

指定放置子图的网格的类,网格的位置通过域subplot params类似的方式确定。

3.1 语法

matplotlib.gridspec.GridSpec(
        self, nrows, ncols, figure=None,
        left=None, bottom=None, right=None, top=None,
        wspace=None, hspace=None,
        width_ratios=None, height_ratios=None
)

可以简化为

import matplotlib.gridspec as mg
gs = mg.GridSpec(行数,列数)
mp.subplot(gs[0,0])
mp.subplot(gs[0,:2])

3.2 示例

import matplotlib.pyplot as plt
import matplotlib.gridspec as mg

plt.figure('Grid', facecolor='lightgray')
gs = mg.GridSpec(3, 3)

# 1号红色
plt.subplot(gs[0, :2], facecolor = 'red')
plt.xticks(())
plt.yticks(())
plt.text(0.5, 0.5, ', ha='center', va='center', size=36, alpha=0.5)

# 2号绿色
plt.subplot(gs[1:, 0], facecolor = 'green')
plt.xticks(())
plt.yticks(())
plt.text(0.5, 0.5, ', ha='center', va='center', size=36, alpha=0.5)

# 3号蓝色
plt.subplot(gs[2, 1:], facecolor = 'blue')
plt.xticks(())
plt.yticks(())
plt.text(0.5, 0.5, ', ha='center', va='center', size=36, alpha=0.5)

# 4号橘色
plt.subplot(gs[:2, 2], facecolor = 'orange')
plt.xticks(())
plt.yticks(())
plt.text(0.5, 0.5, ', ha='center', va='center', size=36, alpha=0.5)

# 5号深红色
plt.subplot(gs[1, 1], facecolor = '#8B0000')
plt.xticks(())
plt.yticks(())
plt.text(0.5, 0.5, ', ha='center', va='center', size=36, alpha=0.5)

plt.tight_layout()
plt.show()

图形对象函数figure() 及 子图创建函数subplot()

附:tight_layout

tight_layout(self, figure, renderer=None, pad=1.08, h_pad=None, w_pad=None, rect=None)
 |      Adjust subplot parameters to give specified padding.
 |
 |      Parameters
 |      ----------
 |
 |      pad : float
 |          Padding between the figure edge and the edges of subplots, as a
 |          fraction of the font-size.
 |      h_pad, w_pad : float, optional
 |          Padding (height/width) between edges of adjacent subplots.
 |          Defaults to ``pad_inches``.
 |      rect : tuple of 4 floats, optional
 |          (left, bottom, right, top) rectangle in normalized figure
 |          coordinates that the whole subplots area (including labels) will
 |          fit into.  Default is (0, 0, 1, 1).
 |
 |  update(self, **kwargs)
 |      Update the current values.  If any kwarg is None, default to
 |      the current value, if set, otherwise to rc.

附 tight_layout

tight_layout命令三个关键字参数:pad、w_pad、h_pad。

pad用于设置绘图区边缘与画布边缘的距离大小

w_pad用于设置绘图区间水平距离的大小

h_pad用于设置绘图区间垂直距离的大小

使用方法及效果如下:

fig2.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0)

详细内容可参考 Matplotlib 中文用户指南 3.4 密致布局指南

4 *布局

*布局是通过 axis 实现的

4.1 语法

axes(arg=None, **kwargs)

将轴 axes 添加当前图中并使其成为当前轴 axes

arg - None or 4-tuple or Axes

(1)None。用 subplot(111, **kwargs) 将创建一个新的full window axes

(2)4-tuple。float,[left(左-距左Axis的比例值), bottom(底-距下Axis的比例值), width(宽), height(高)],元素值(均为比例值)区间 (0, 1),比例值包括区间值0,1

(3)Axes。将当前轴设置为arg,相当于pyplot.sca

4.2 示例

import matplotlib.pyplot as plt

plt.figure('Axes', facecolor='lightgray')

plt.axes([0.03, 0.038, 0.94, 0.924])
plt.xticks(())
plt.yticks(())
plt.text(0.5, 0.5, ', ha='center', va='center', size=36, alpha=0.5)

plt.axes([0.65, 0.076, 0.31, 0.308])
plt.xticks(())
plt.yticks(())
plt.text(0.5, 0.5, ', ha='center', va='center', size=36, alpha=0.5)

plt.show()

图形对象函数figure() 及 子图创建函数subplot()

使用Matplotlib画图系列(一)

matplotlib的基本用法(十三)——figure绘制多图

matplotlib.pyplot.subplot(官方网站)