简介
本教程将指导你如何使用 matplotlib 创建缩放效果。缩放效果将允许你在两个不同的轴上进行连接和缩放。
虚拟机提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。
本教程将指导你如何使用 matplotlib 创建缩放效果。缩放效果将允许你在两个不同的轴上进行连接和缩放。
虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。
在这一步中,我们将导入本教程所需的必要库。我们将导入 matplotlib 以及 mpl_toolkits.axes_grid1 中的相关库。
import matplotlib.pyplot as plt
from matplotlib.transforms import (Bbox, TransformedBbox,
blended_transform_factory)
from mpl_toolkits.axes_grid1.inset_locator import (BboxConnector,
BboxConnectorPatch,
BboxPatch)
在这一步中,我们将定义两个轴之间的连接。此函数将两个轴作为输入,以及 x 轴的最小值和最大值。然后它创建一个边界框并连接这两个轴。
def zoom_effect01(ax1, ax2, xmin, xmax, **kwargs):
bbox = Bbox.from_extents(xmin, 0, xmax, 1)
mybbox1 = TransformedBbox(bbox, ax1.get_xaxis_transform())
mybbox2 = TransformedBbox(bbox, ax2.get_xaxis_transform())
prop_patches = {**kwargs, "ec": "none", "alpha": 0.2}
c1, c2, bbox_patch1, bbox_patch2, p = connect_bbox(
mybbox1, mybbox2,
loc1a=3, loc2a=2, loc1b=4, loc2b=1,
prop_lines=kwargs, prop_patches=prop_patches)
ax1.add_patch(bbox_patch1)
ax2.add_patch(bbox_patch2)
ax2.add_patch(c1)
ax2.add_patch(c2)
ax2.add_patch(p)
return c1, c2, bbox_patch1, bbox_patch2, p
在这一步中,我们将创建第二个缩放轴。此函数将两个轴作为输入。然后它为第二个轴创建一个边界框,并将其连接到第一个轴。
def zoom_effect02(ax1, ax2, **kwargs):
tt = ax1.transScale + (ax1.transLimits + ax2.transAxes)
trans = blended_transform_factory(ax2.transData, tt)
mybbox1 = ax1.bbox
mybbox2 = TransformedBbox(ax1.viewLim, trans)
prop_patches = {**kwargs, "ec": "none", "alpha": 0.2}
c1, c2, bbox_patch1, bbox_patch2, p = connect_bbox(
mybbox1, mybbox2,
loc1a=3, loc2a=2, loc1b=4, loc2b=1,
prop_lines=kwargs, prop_patches=prop_patches)
ax1.add_patch(bbox_patch1)
ax2.add_patch(bbox_patch2)
ax2.add_patch(c1)
ax2.add_patch(c2)
ax2.add_patch(p)
return c1, c2, bbox_patch1, bbox_patch2, p
在这一步中,我们将连接轴并创建缩放效果。我们将创建一个包含四个轴的图形,并使用 zoom_effect01 和 zoom_effect02 函数将它们连接起来。
axs = plt.figure().subplot_mosaic([
["zoom1", "zoom2"],
["main", "main"],
])
axs["main"].set(xlim=(0, 5))
zoom_effect01(axs["zoom1"], axs["main"], 0.2, 0.8)
axs["zoom2"].set(xlim=(2, 3))
zoom_effect02(axs["zoom2"], axs["main"])
plt.show()
在本教程中,我们学习了如何使用 matplotlib 创建缩放效果。我们首先定义了一个连接轴的函数,然后创建了第二个函数来创建第二个缩放轴。最后,我们连接了轴并创建了缩放效果。