简介
Matplotlib 是 Python 中一个流行的数据可视化库。它提供了许多工具来创建不同类型的图表和图形。Matplotlib 的一个有用功能是能够放大图表的特定区域,这有助于更仔细地分析数据。在本实验中,我们将学习如何使用 Matplotlib 创建一个放大的插入图。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。
导入必要的库
在开始创建放大的插入图之前,我们需要导入必要的库。在本实验中,我们将使用 matplotlib.pyplot 和 numpy。
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 方法来创建两个不同的放大插入图示例。通过使用这些方法,我们可以更仔细地分析数据,并获得在原始图中可能看不到的见解。