Matplotlib 库中,可以使用子图(subplots)在多个坐标系下绘制多个图像,绘制多个坐标系下的多个图像可以帮助展示和比较不同数据集之间的关系,或者从多个角度分析同一数据集。非常适合于同时展示多个数据集的比较或者不同视角的数据分析。

1、绘制图像

使用 plt.subplots()可以创建一个图形对象以及一个或多个子图(axes)对象。使得在同一个窗口中绘制多个图像变得非常简单和直观。使用 plt.subplots(),可以轻松地管理多个子图的布局,并且可以对每个子图进行独立的绘图和自定义设置。常用参数如下,

参数

说明

nrows

子图的行数。

ncols

子图的列数。

figsize

图形的物理尺寸(宽度,高度),

单位为英寸。

sharex

若设置为True,

则所有子图共享x轴。

也可以设置为'row'或'col',

表示行或列内子图共享x轴。

sharey

若设置为True,

则所有子图共享y轴。

也可以设置为'row'或'col',

表示行或列内子图共享y轴。

subplot_kw

传递给每个子图(axes)构造器的关键字参数字典。

gridspec_kw

传递给GridSpec构造器以调整子图布局的关键字参数字典。

tight_layout

是否自动调整子图参数,

以避免重叠。设置为

True 时,会自动调整布局。

使用示例:

import matplotlib.pyplot as plt
import numpy as np

# 设置子图的行数和列数
nrows, ncols = 2, 2

# 创建图形和子图对象,指定整体图形大小为10x10英寸
fig, axs = plt.subplots(nrows, ncols, figsize=(10, 10), 
                        tight_layout=True, gridspec_kw={'width_ratios': [3, 1], 'height_ratios': [1, 3]})

# 生成数据
x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 在第一个子图上绘制正弦曲线
axs[0, 0].plot(x, y1, 'tab:blue')
axs[0, 0].set_title('Sine Function')

# 在第二个子图上绘制余弦曲线
axs[0, 1].plot(x, y2, 'tab:orange')
axs[0, 1].set_title('Cosine Function')

# 在第三个子图上绘制正弦曲线的负值
axs[1, 0].plot(x, -y1, 'tab:green')
axs[1, 0].set_title('Negative Sine Function')

# 在第四个子图上绘制余弦曲线的负值
axs[1, 1].plot(x, -y2, 'tab:red')
axs[1, 1].set_title('Negative Cosine Function')

# 自动调整子图间距
plt.tight_layout()

# 使用 plt.draw() 显示画布
plt.draw()

# 显示图形
plt.show()

2、添加网格线

使用 plt.grid() 函数用于向图表中添加网格线,可以显著提高图表的可读性和美观性。在一个图形中绘制多个坐标系(子图)时,可以在每个子图中单独使用 plt.grid() 来控制网格线的显示。常用参数如下,

参数名

说明

b

布尔值,用于开启或关闭网格。例如,True为显示网格,False为隐藏网格。

which

指定显示哪些网格线。可选值有'major'、'minor'、'both'。默认为'major'。

color

设置网格线的颜色。可以是任何Matplotlib识别的颜色格式。例如,'red'、'blue'、'#FF00FF'等。

linestyle

设置网格线的样式。常见样式包括'-'(实线)、'--'(虚线)、'-.'(点划线)等。

linewidth

设置网格线的宽度,为浮点数。

axis

确定网格线应用于哪个轴。可选值有'x'、'y'、'both'。默认为'both'。

使用示例:

import matplotlib.pyplot as plt
import numpy as np

# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 创建子图
fig, ax = plt.subplots()

# 绘制两条曲线
ax.plot(x, y1, label='sin(x)')
ax.plot(x, y2, label='cos(x)')

# 添加网格
# 使用虚线样式,灰色,宽度为0.5
ax.grid(True, which='major', color='gray', linestyle='--', linewidth=0.5)

# 添加次要网格
# 使用点线样式,浅灰色,宽度为0.25
ax.minorticks_on()
ax.grid(True, which='minor', color='red', linestyle=':', linewidth=0.25)

# 添加图例
ax.legend()

# 使用 plt.draw() 显示画布
plt.draw()

# 显示图表
plt.show()

3、绘制多个图像

可以创建一个具有多个子图的图表。每个子图可以有自己的坐标系。绘制多个坐标系下的多个图像是一种常用的方法来展示和比较不同数据集或数据的不同方面。

import matplotlib.pyplot as plt
import numpy as np

# 设置子图的行数和列数
nrows, ncols = 2, 2

# 创建图形和子图对象,指定整体图形大小为10x10英寸
fig, axs = plt.subplots(nrows, ncols, figsize=(10, 10), 
                        tight_layout=True, gridspec_kw={'width_ratios': [3, 1], 'height_ratios': [1, 3]})

# 生成数据
x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 在第一个子图上绘制正弦曲线
axs[0, 0].plot(x, y1, 'tab:blue')
axs[0, 0].set_title('Sine Function')
axs[0, 0].grid(True, which='major', color='gray', linestyle='--', linewidth=0.5)


# 在第二个子图上绘制余弦曲线
axs[0, 1].plot(x, y2, 'tab:orange')
axs[0, 1].set_title('Cosine Function')
axs[0, 1].grid(True, which='major', color='gray', linestyle='--', linewidth=0.5)


# 在第三个子图上绘制正弦曲线的负值
axs[1, 0].plot(x, -y1, 'tab:green')
axs[1, 0].set_title('Negative Sine Function')
axs[1, 0].grid(True, which='major', color='gray', linestyle='--', linewidth=0.5)


# 在第四个子图上绘制余弦曲线的负值
axs[1, 1].plot(x, -y2, 'tab:red')
axs[1, 1].set_title('Negative Cosine Function')
axs[1, 1].grid(True, which='major', color='gray', linestyle='--', linewidth=0.5)


# 使用 plt.draw() 显示画布
plt.draw()

# 显示图形
plt.show()

推荐文档