使用 Matplotlib 绘制非均匀图像

PythonPythonBeginner
立即练习

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

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

简介

本实验提供了一份关于如何在 Python 的 Matplotlib 库中使用 NonUniformImage 类的分步指南。NonUniformImage 允许用户绘制具有非均匀像素位置的图像。

虚拟机使用提示

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

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

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

导入库

在创建 NonUniformImage 之前,我们需要导入必要的库。在本示例中,我们将使用 numpy 和 matplotlib。

import matplotlib.pyplot as plt
import numpy as np

from matplotlib import cm
from matplotlib.image import NonUniformImage

创建线性和非线性数组

我们需要创建两个数组,一个包含线性值,另一个包含非线性值。这些数组将用于创建我们的 NonUniformImage。

## 用于单元格中心的线性 x 数组:
x = np.linspace(-4, 4, 9)

## 高度非线性的 x 数组:
x2 = x**3

y = np.linspace(-4, 4, 9)

z = np.sqrt(x[np.newaxis, :]**2 + y[:, np.newaxis]**2)

创建子图和非均匀图像

现在,我们创建子图并将非均匀图像添加到每个子图中。我们将创建四个子图,其中两个使用“最近邻”插值,另外两个使用“双线性”插值。插值关键字参数定义了用于显示图像的插值类型。

## 创建子图
fig, axs = plt.subplots(nrows=2, ncols=2, layout='constrained')
fig.suptitle('NonUniformImage class', fontsize='large')

## 最近邻插值
ax = axs[0, 0]
im = NonUniformImage(ax, interpolation='nearest', extent=(-4, 4, -4, 4), cmap=cm.Purples)
im.set_data(x, y, z)
ax.add_image(im)
ax.set_xlim(-4, 4)
ax.set_ylim(-4, 4)
ax.set_title('nearest')

ax = axs[0, 1]
im = NonUniformImage(ax, interpolation='nearest', extent=(-64, 64, -4, 4), cmap=cm.Purples)
im.set_data(x2, y, z)
ax.add_image(im)
ax.set_xlim(-64, 64)
ax.set_ylim(-4, 4)
ax.set_title('nearest')

## 双线性插值
ax = axs[1, 0]
im = NonUniformImage(ax, interpolation='bilinear', extent=(-4, 4, -4, 4), cmap=cm.Purples)
im.set_data(x, y, z)
ax.add_image(im)
ax.set_xlim(-4, 4)
ax.set_ylim(-4, 4)
ax.set_title('bilinear')

ax = axs[1, 1]
im = NonUniformImage(ax, interpolation='bilinear', extent=(-64, 64, -4, 4), cmap=cm.Purples)
im.set_data(x2, y, z)
ax.add_image(im)
ax.set_xlim(-64, 64)
ax.set_ylim(-4, 4)
ax.set_title('bilinear')

plt.show()

结果解读

子图将展示两种不同类型的插值:“最近邻”和“双线性”。“最近邻”插值会显示最近邻像素的值,而“双线性”插值会显示四个最近邻像素的加权平均值。

总结

非均匀图像(NonUniformImage)是用于绘制具有非均匀像素位置图像的有用工具。本实验提供了一份关于如何在 Python 的 Matplotlib 库中使用非均匀图像(NonUniformImage)的详细指南,包括导入必要的库、创建线性和非线性数组、创建子图和非均匀图像(NonUniformImage)以及解读结果。