演示寄生轴

PythonPythonBeginner
立即练习

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

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

简介

在本实验中,你将学习如何使用 Matplotlib 中的mpl_toolkits.axes_grid1.parasite_axes.HostAxesmpl_toolkits.axes_grid1.parasite_axes.ParasiteAxes模块创建寄生轴。寄生轴与宿主轴共享 x 轴刻度,但在 y 方向上显示不同的刻度。

虚拟机使用提示

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

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

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

导入必要的库

首先,我们需要导入必要的库。在本实验中,我们将使用matplotlib.pyplot进行绘图,使用mpl_toolkits.axes_grid1.parasite_axes.HostAxesmpl_toolkits.axes_grid1.parasite_axes.ParasiteAxes来创建寄生轴。

import matplotlib.pyplot as plt
from mpl_toolkits.axisartist.parasite_axes import HostAxes

创建一个图形并添加宿主轴

我们使用plt.figure()方法创建一个图形,并使用fig.add_axes()方法添加一个宿主轴。宿主轴与寄生轴共享 x 轴刻度。

fig = plt.figure()
host = fig.add_axes([0.15, 0.1, 0.65, 0.8], axes_class=HostAxes)

创建寄生轴

我们使用host.get_aux_axes()方法创建两个寄生轴。我们将viewlim_mode=None设置为确保寄生轴与宿主轴共享相同的 x 轴刻度。我们还设置sharex=host以确保共享 x 轴刻度。

par1 = host.get_aux_axes(viewlim_mode=None, sharex=host)
par2 = host.get_aux_axes(viewlim_mode=None, sharex=host)

隐藏宿主轴的右 y 轴

我们使用host.axis["right"].set_visible(False)方法隐藏宿主轴的右 y 轴。

host.axis["right"].set_visible(False)

显示寄生轴 1 的右 y 轴

我们使用par1.axis["right"].set_visible(True)方法显示第一个寄生轴的右 y 轴。我们还设置par1.axis["right"].major_ticklabels.set_visible(True)par1.axis["right"].label.set_visible(True)来显示右 y 轴的刻度标签和标签。

par1.axis["right"].set_visible(True)
par1.axis["right"].major_ticklabels.set_visible(True)
par1.axis["right"].label.set_visible(True)

为寄生轴 2 添加右 y 轴

我们使用par2.axis["right2"] = par2.new_fixed_axis(loc="right", offset=(60, 0))方法为第二个寄生轴添加一个右 y 轴。

par2.axis["right2"] = par2.new_fixed_axis(loc="right", offset=(60, 0))

在所有轴上绘制数据

我们使用plot()方法在所有轴上绘制数据。我们还使用set()方法为所有轴设置标签和范围。

p1, = host.plot([0, 1, 2], [0, 1, 2], label="Density")
p2, = par1.plot([0, 1, 2], [0, 3, 2], label="Temperature")
p3, = par2.plot([0, 1, 2], [50, 30, 15], label="Velocity")

host.set(xlim=(0, 2), ylim=(0, 2), xlabel="Distance", ylabel="Density")
par1.set(ylim=(0, 4), ylabel="Temperature")
par2.set(ylim=(1, 65), ylabel="Velocity")

添加图例和轴颜色

我们使用host.legend()方法为主轴添加一个图例。我们还使用host.axis["left"].label.set_color(p1.get_color())par1.axis["right"].label.set_color(p2.get_color())par2.axis["right2"].label.set_color(p3.get_color())方法,将主轴的左 y 轴标签、第一个寄生轴的右 y 轴标签以及第二个寄生轴的右 y 轴标签的颜色设置为与它们各自的线条颜色相匹配。

host.legend()

host.axis["left"].label.set_color(p1.get_color())
par1.axis["right"].label.set_color(p2.get_color())
par2.axis["right2"].label.set_color(p3.get_color())

显示图表

我们使用plt.show()方法显示图表。

plt.show()

总结

在本实验中,我们学习了如何使用 Matplotlib 中的mpl_toolkits.axes_grid1.parasite_axes.HostAxesmpl_toolkits.axes_grid1.parasite_axes.ParasiteAxes模块创建寄生轴。我们还学习了如何在寄生轴上绘制数据,并与主轴共享 x 轴刻度。