📅  最后修改于: 2023-12-03 15:34:22.898000             🧑  作者: Mango
在 Matplotlib 中,有时候我们需要在同一张图中同时展示多条不同的数据线,但是它们具有不同的纵坐标范围。此时,使用 twinx()
方法可以帮助我们在同一张图中展示两个 Y 轴的数据,并且它们不会相互影响。本文将介绍 twinx()
方法的使用方法和示例。
Axes.twinx()
方法是 matplotlib.axes.Axes 类的一个方法,因此我们需要先创建 Axes 对象。
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
接着,我们可以使用 ax.twinx()
方法来创建一个与主 Y 轴对应的辅助 Y 轴。
ax2 = ax.twinx()
此时,我们就已经创建了两个 Y 轴。如果我们分别在它们上面绘制数据,我们会发现它们会覆盖在一起。
我们可以通过设置数据线的颜色、线型等来区分它们。
ax.plot(x, y1, 'r-', label='Line 1')
ax2.plot(x, y2, 'g--', label='Line 2')
下面的示例展示了如何使用 twinx()
方法来显示不同范围的两个数据集。
import numpy as np
import matplotlib.pyplot as plt
# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.exp(x/10)
# 创建图形和主轴
fig, ax = plt.subplots()
# 创建辅助轴
ax2 = ax.twinx()
# 绘制主轴
ax.plot(x, y1, 'r-', label='Sine')
ax.set_xlabel('X data')
ax.set_ylabel('Sine data')
ax.tick_params(axis='y', labelcolor='r')
# 绘制辅助轴
ax2.plot(x, y2, 'g--', label='Exponential')
ax2.set_ylabel('Exponential data')
ax2.tick_params(axis='y', labelcolor='g')
# 添加图例
ax.legend(loc='upper left')
ax2.legend(loc='upper right')
# 展示图形
plt.show()
我们可以看到,左侧 Y 轴对应的是红色数据线,范围为 -1 到 1(正弦函数的取值范围),右侧 Y 轴对应的是绿色数据线,范围是从较小的指数函数开始逐渐增长。两个 Y 轴之间没有任何干扰,数据线完全清晰可见。