使用 Matplotlib 绘制多个 Y 轴

PythonPythonBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在数据可视化中,经常需要在同一图表上绘制多个具有不同计量单位的变量。实现这一点的一种常见方法是使用多个 y 轴,其中每个 y 轴对应一个不同的变量。在本实验中,我们将学习如何使用 Matplotlib 创建具有多个 y 轴的图表。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

导入必要的库

我们首先导入所需的库,即 Matplotlib 和 NumPy。Matplotlib 是一个数据可视化库,而 NumPy 是 Python 中用于数值计算的库。

import matplotlib.pyplot as plt
import numpy as np

创建一个图形和轴对象

我们创建一个图形和轴对象,它在 Matplotlib 中表示一个单独的绘图。

fig, ax = plt.subplots()

添加一个双 y 轴

我们使用 twinx 方法为绘图添加一个双 y 轴。这将在绘图的右侧创建一个新的 y 轴。

twin1 = ax.twinx()

设置双 y 轴的位置

我们使用 set_position 方法来设置双 y 轴的位置。这会将双 y 轴移动到原始 y 轴的右侧。

twin1.spines.right.set_position(("axes", 1.2))

向绘图中添加数据

我们使用 plot 方法向绘图中添加数据。我们向绘图中添加三条线,每条线使用不同的 y 轴。

p1, = ax.plot([0, 1, 2], [0, 1, 2], "C0", label="Density")
p2, = twin1.plot([0, 1, 2], [0, 3, 2], "C1", label="Temperature")
p3, = twin2.plot([0, 1, 2], [50, 30, 15], "C2", label="Velocity")

设置轴的范围和标签

我们使用 set 方法为每个 y 轴设置范围和标签。我们还使用 set_color 方法将标签的颜色设置为与线条颜色匹配。

ax.set(xlim=(0, 2), ylim=(0, 2), xlabel="Distance", ylabel="Density")
twin1.set(ylim=(0, 4), ylabel="Temperature")
twin2.set(ylim=(1, 65), ylabel="Velocity")

ax.yaxis.label.set_color(p1.get_color())
twin1.yaxis.label.set_color(p2.get_color())
twin2.yaxis.label.set_color(p3.get_color())

设置刻度颜色

我们将每个 y 轴的刻度颜色设置为与标签颜色匹配。

ax.tick_params(axis='y', colors=p1.get_color())
twin1.tick_params(axis='y', colors=p2.get_color())
twin2.tick_params(axis='y', colors=p3.get_color())

给绘图添加图例

我们使用 legend 方法给绘图添加图例。我们将线条对象列表作为 handles 参数传入。

ax.legend(handles=[p1, p2, p3])

显示绘图

我们使用 show 方法显示绘图。

plt.show()

总结

在本实验中,我们学习了如何使用Matplotlib创建具有多个y轴的图表。我们创建了一个图形和轴对象,添加了一个孪生y轴,设置了孪生y轴的位置,向绘图中添加了数据,设置了轴的范围和标签,设置了刻度颜色,为绘图添加了图例,并显示了绘图。当在同一图表上比较具有不同测量单位的变量时,这种技术可能会很有用。