Matplotlib 颜色映射图像生成

PythonPythonBeginner
立即练习

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

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

简介

本教程将指导你使用 Python 的 Matplotlib 库制作一组具有单一颜色映射、规范和颜色条的图像。你将学习如何生成数据、设置颜色比例以及更新图像以响应其他图像规范的变化。

虚拟机提示

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

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

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

导入库

首先,我们需要导入必要的库:numpy 和 matplotlib。我们还将设置一个随机种子以确保可重复性。

import matplotlib.pyplot as plt
import numpy as np

生成数据并创建子图

接下来,我们将为图像生成数据。我们将创建一个 3x2 的子图网格,每个子图包含一个随机生成的数值数组。

np.random.seed(19680801)
Nr = 3
Nc = 2

fig, axs = plt.subplots(Nr, Nc)
fig.suptitle('Multiple images')

images = []
for i in range(Nr):
    for j in range(Nc):
        ## Generate data with a range that varies from one plot to the next.
        data = ((1 + i + j) / 10) * np.random.rand(10, 20)
        images.append(axs[i, j].imshow(data))
        axs[i, j].label_outer()

设置颜色比例并创建颜色条

现在,我们将为图像设置颜色比例,并创建一个颜色条来显示数值范围。我们将找到所有图像的最小值和最大值,并相应地对颜色比例进行归一化。

vmin = min(image.get_array().min() for image in images)
vmax = max(image.get_array().max() for image in images)
norm = colors.Normalize(vmin=vmin, vmax=vmax)
for im in images:
    im.set_norm(norm)

fig.colorbar(images[0], ax=axs, orientation='horizontal', fraction=.1)

更新图像

最后,我们将更新图像以响应其他图像规范的变化。这将使我们能够更改一张图像的颜色映射和颜色比例,并让所有其他图像相应地更新。

def update(changed_image):
    for im in images:
        if (changed_image.get_cmap()!= im.get_cmap()
                or changed_image.get_clim()!= im.get_clim()):
            im.set_cmap(changed_image.get_cmap())
            im.set_clim(changed_image.get_clim())

for im in images:
    im.callbacks.connect('changed', update)

总结

在本实验中,我们学习了如何在 Python 的 Matplotlib 库中使用单一的颜色映射、规范和颜色条来创建一组图像。我们生成了数据,设置了颜色比例,并更新图像以响应其他图像规范的变化。这是一种使用相同颜色比例和颜色映射来可视化多组数据的有用技术。