关键词

python 用Matplotlib作图中有多个Y轴

当需要在一个图中,将两个或以上的不同的 Y 轴进行同步展示时,可以借助 Matplotlib 库实现。以下是实现方法的完整攻略。

1. 导入 Matplotlib 库

import matplotlib.pyplot as plt

2. 新建画布和子图

  • figsize 参数用于设置画布的大小
  • constrained_layout 参数可以使图表自动调整大小,防止子图间互相重叠
fig, ax1 = plt.subplots(figsize=(8,6),constrained_layout=True)

3. 添加第一个 Y 轴

ax1.set_ylabel('y1', fontsize=16)

4. 添加第二个 Y 轴

ax2 = ax1.twinx()
ax2.set_ylabel('y2', fontsize=16)

5. 绘制第一个 Y 轴对应的曲线

ax1.plot(x, y1, label='y1_label')

6. 绘制第二个 Y 轴对应的曲线

ax2.plot(x, y2, label='y2_label')

7. 添加图例

ax1.legend(loc='upper left')
ax2.legend(loc='upper right')

下面是两条具体示例:

示例1:双 Y 轴同步显示

import numpy as np

#生成数据
x = np.linspace(0, 10, 1000)
y1 = np.sin(x)
y2 = np.exp(x/10)

#新建画布
fig, ax1 = plt.subplots(figsize=(8,6),constrained_layout=True)

#添加第一个 Y 轴
ax1.set_ylabel('y1', fontsize=16)

#添加第二个 Y 轴
ax2 = ax1.twinx()
ax2.set_ylabel('y2', fontsize=16)

#绘制第一个 Y 轴对应的曲线
ax1.plot(x, y1, label='y1_label')

#绘制第二个 Y 轴对应的曲线
ax2.plot(x, y2, label='y2_label')

#添加图例
ax1.legend(loc='upper left')
ax2.legend(loc='upper right')

#显示图表
plt.show()

示例2:三 Y 轴同步显示

import numpy as np

#生成数据
x = np.linspace(0, 10, 1000)
y1 = np.sin(x)
y2 = np.exp(x/10)
y3 = np.log(x)

#新建画布
fig, ax1 = plt.subplots(figsize=(8,6),constrained_layout=True)

#添加第一个 Y 轴
ax1.set_ylabel('y1', fontsize=16)

#添加第二个 Y 轴
ax2 = ax1.twinx()
ax2.set_ylabel('y2', fontsize=16)

#添加第三个 Y 轴
ax3 = ax1.twinx()
ax3.spines['right'].set_position(('axes', 1.2))
ax3.set_ylabel('y3', fontsize=16)

#绘制第一个 Y 轴对应的曲线
ax1.plot(x, y1, label='y1_label')

#绘制第二个 Y 轴对应的曲线
ax2.plot(x, y2, label='y2_label')

#绘制第三个 Y 轴对应的曲线
ax3.plot(x, y3, label='y3_label', color='green')

#添加图例
ax1.legend(loc='upper left')
ax2.legend(loc='upper right')
ax3.legend(loc='lower right')

#显示图表
plt.show()

本文链接:http://task.lmcjl.com/news/3447.html

展开阅读全文