使用 Matplotlib 创建放大插入图

PythonPythonBeginner
立即练习

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

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

简介

Matplotlib 是 Python 中一个流行的数据可视化库。它提供了许多工具来创建不同类型的图表和图形。Matplotlib 的一个有用功能是能够放大图表的特定区域,这有助于更仔细地分析数据。在本实验中,我们将学习如何使用 Matplotlib 创建一个放大的插入图。

虚拟机使用提示

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

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

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

导入必要的库

在开始创建放大的插入图之前,我们需要导入必要的库。在本实验中,我们将使用 matplotlib.pyplotnumpy

import matplotlib.pyplot as plt
import numpy as np

创建一个图形和子图

接下来,我们将创建一个图形和子图来显示我们的数据。我们将并排创建两个子图,以展示两个不同的放大插入图示例。

fig, (ax, ax2) = plt.subplots(ncols=2, figsize=[6, 3])

创建一个带有尺寸条的放大插入图

在第一个子图中,我们将创建一个带有尺寸条的放大插入图。这将展示如何使用 .zoomed_inset_axes 方法来创建一个放大插入图。

## 将绘图的纵横比设置为 1
ax.set_aspect(1)

## 在绘图的右上角创建一个放大插入图
axins = zoomed_inset_axes(ax, zoom=0.5, loc='upper right')

## 设置插入图坐标轴上的刻度数量
axins.yaxis.get_major_locator().set_params(nbins=7)
axins.xaxis.get_major_locator().set_params(nbins=7)

## 隐藏插入图坐标轴上的刻度标签
axins.tick_params(labelleft=False, labelbottom=False)

## 定义一个函数,用于向绘图中添加尺寸条
def add_sizebar(ax, size):
    asb = AnchoredSizeBar(ax.transData,
                          size,
                          str(size),
                          loc=8,
                          pad=0.1, borderpad=0.5, sep=5,
                          frameon=False)
    ax.add_artist(asb)

## 向主图和插入图中添加尺寸条
add_sizebar(ax, 0.5)
add_sizebar(axins, 0.5)

创建一个带有插入图缩放和标记插入区域的图像

在第二个子图中,我们将创建一个带有插入图缩放和标记插入区域的图像。这将展示如何使用 .mark_inset 方法来标记感兴趣的区域并将其连接到插入图坐标轴。

## 加载图像的示例数据
Z = cbook.get_sample_data("axes_grid/bivariate_normal.npy")  ## 15x15 数组
extent = (-3, 4, -4, 3)
Z2 = np.zeros((150, 150))
ny, nx = Z.shape
Z2[30:30+ny, 30:30+nx] = Z

## 在子图中显示图像
ax2.imshow(Z2, extent=extent, origin="lower")

## 在绘图的左上角创建一个放大插入图
axins2 = zoomed_inset_axes(ax2, zoom=6, loc=1)

## 在插入图中显示图像
axins2.imshow(Z2, extent=extent, origin="lower")

## 设置插入图的 x 和 y 轴范围以显示感兴趣的区域
x1, x2, y1, y2 = -1.5, -0.9, -2.5, -1.9
axins2.set_xlim(x1, x2)
axins2.set_ylim(y1, y2)

## 设置插入图坐标轴上的刻度数量
axins2.yaxis.get_major_locator().set_params(nbins=7)
axins2.xaxis.get_major_locator().set_params(nbins=7)

## 隐藏插入图坐标轴上的刻度标签
axins2.tick_params(labelleft=False, labelbottom=False)

## 标记感兴趣的区域并将其连接到插入图坐标轴
mark_inset(ax2, axins2, loc1=2, loc2=4, fc="none", ec="0.5")

显示绘图

最后,我们将使用 plt.show() 方法显示绘图。

plt.show()

总结

在这个实验中,我们学习了如何使用 Matplotlib 创建一个放大的插入图。我们使用了 .zoomed_inset_axes.mark_inset 方法来创建两个不同的放大插入图示例。通过使用这些方法,我们可以更仔细地分析数据,并获得在原始图中可能看不到的见解。