目录

      • Matplotlib 可视化大师系列博客总览
  • Matplotlib 可视化大师系列(六):plt.imshow() - 绘制矩阵与图像的强大工具
    • 一、 plt.imshow() 是什么?何时使用?
    • 二、 函数原型与核心参数
    • 三、 从入门到精通:代码示例
      • 示例 1:基础矩阵可视化
      • 示例 2:图像处理与显示
      • 示例 3:相关性矩阵热力图
      • 示例 4:高级应用 - 自定义颜色映射和规范化
    • 四、 最佳实践与常见陷阱
    • 五、 总结

Matplotlib 可视化大师系列博客总览

本系列旨在提供一份系统、全面、深入的 Matplotlib 学习指南。以下是博客列表:

  1. 基础篇plt.plot() - 绘制折线图的利刃
  2. 分布篇plt.scatter() - 探索变量关系的散点图
  3. 比较篇plt.bar()plt.barh() - 清晰对比的柱状图
  4. 统计篇plt.hist()plt.boxplot() - 洞察数据分布
  5. 占比篇plt.pie() - 展示组成部分的饼图
  6. 高级篇plt.imshow() - 绘制矩阵与图像的强大工具
  7. 专属篇: 绘制误差线 (plt.errorbar())、等高线 (plt.contour()) 等特殊图表
  8. 综合篇: 在一张图中组合多种图表类型

Matplotlib 可视化大师系列(六):plt.imshow() - 绘制矩阵与图像的强大工具

在数据科学和机器学习中,我们经常需要可视化二维矩阵数据,如图像、相关性矩阵、热力图或任何网格结构的数据。Matplotlib 的 plt.imshow() 函数是完成这些任务的瑞士军刀。它不仅仅用于显示图像,更是一个强大的矩阵可视化工具。本文将深入解析 plt.imshow(),帮助你掌握这项高级可视化技能。

一、 plt.imshow() 是什么?何时使用?

plt.imshow() 函数主要用于在二维常规栅格上显示数据。它将二维数据数组(矩阵)渲染为图像,其中数组中的每个值对应图像中的一个像素颜色。

主要用途:

  1. 图像显示:显示实际图像(JPEG、PNG等加载后的数组)
  2. 矩阵可视化:可视化任何二维数据矩阵,如:
    • 相关性矩阵
    • 混淆矩阵(机器学习)
    • 热力图
    • 二维函数的值
    • 神经网络的激活映射
  3. 地形和科学数据:显示海拔、温度等地理或科学数据

与 plt.plot() 和 plt.scatter() 的区别:

  • plt.plot()plt.scatter() 用于显示点、线或离散数据
  • plt.imshow() 用于显示连续的、网格化的二维数据

二、 函数原型与核心参数

plt.imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, filternorm=True, filterrad=4.0, resample=None, url=None, **kwargs)

核心参数详解:

  1. 数据参数:

    • X: 要显示的图像数据。支持多种格式:
      • 形如 (M, N) 的数组:使用标量数据,通过colormap映射到颜色
      • 形如 (M, N, 3) 的数组:RGB值(0-1的float或0-255的int)
      • 形如 (M, N, 4) 的数组:RGBA值(带透明度)
  2. 颜色映射:

    • cmap: 颜色映射实例或注册的颜色映射名称。这是最重要的参数之一
      • 常用colormap: 'viridis'(默认), 'plasma', 'inferno', 'magma', 'coolwarm', 'RdYlGn', 'hot', 'gray', 'binary'
      • 使用plt.cm.get_cmap('name')获取colormap对象
  3. 数据规范化:

    • vmin, vmax: 定义颜色映射的数据范围,数据中小于vmin的将被映射为colormap的最低值,大于vmax的将被映射为colormap的最高值
    • norm: 更高级的规范化方法(如LogNorm, PowerNorm等)
  4. 显示属性:

    • aspect: 控制轴的纵横比,'auto'(默认)或'equal'(保持像素为方形)
    • interpolation: 插值方法,控制像素之间的显示方式
      • 'none', 'nearest': 不插值,显示原始像素
      • 'bilinear', 'bicubic': 平滑插值
      • 'hanning', 'hamming', 'spline16'等: 各种插值算法
    • alpha: 透明度(0-1)
    • origin: 数组原点位置,'upper'(左上角)或'lower'(左下角)
  5. 坐标系统:

    • extent: 定义图像在数据坐标中的边界 [left, right, bottom, top]

三、 从入门到精通:代码示例

示例 1:基础矩阵可视化

import matplotlib.pyplot as plt
import numpy as np# 创建一个简单的二维数组(矩阵)
matrix = np.random.rand(10, 10)fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))# 1. 使用默认参数显示矩阵
im1 = ax1.imshow(matrix)
ax1.set_title('Default imshow()')
plt.colorbar(im1, ax=ax1)  # 添加颜色条# 2. 使用不同的colormap和插值
im2 = ax2.imshow(matrix, cmap='hot', interpolation='bicubic')
ax2.set_title('With Hot Colormap & Bicubic Interpolation')
plt.colorbar(im2, ax=ax2)plt.tight_layout()
plt.show()

示例 2:图像处理与显示

from matplotlib import image as mpimg
from scipy import misc# 方法1: 使用matplotlib的imread
# image = mpimg.imread('path/to/your/image.jpg')# 方法2: 使用scipy的face图像(内置示例)
image = misc.face()fig, axes = plt.subplots(2, 2, figsize=(10, 10))# 原始图像
axes[0, 0].imshow(image)
axes[0, 0].set_title('Original Image')
axes[0, 0].axis('off')  # 隐藏坐标轴# 灰度图像
gray_image = np.mean(image, axis=2)  # 简单的RGB转灰度
axes[0, 1].imshow(gray_image, cmap='gray')
axes[0, 1].set_title('Grayscale Image')
axes[0, 1].axis('off')# 使用不同的colormap
axes[1, 0].imshow(gray_image, cmap='viridis')
axes[1, 0].set_title('Viridis Colormap')
axes[1, 0].axis('off')# 使用插值放大查看细节
axes[1, 1].imshow(image[200:400, 300:500])  # 裁剪部分图像
axes[1, 1].set_title('Cropped Region (Nearest Interpolation)')
axes[1, 1].axis('off')plt.tight_layout()
plt.show()

示例 3:相关性矩阵热力图

import pandas as pd# 创建一个示例数据集
np.random.seed(42)
data = pd.DataFrame(np.random.randn(100, 5), columns=['A', 'B', 'C', 'D', 'E'])
# 添加一些相关性
data['B'] = data['A'] * 0.7 + np.random.randn(100) * 0.3
data['D'] = -data['C'] * 0.6 + np.random.randn(100) * 0.4# 计算相关性矩阵
corr_matrix = data.corr()fig, ax = plt.subplots(figsize=(8, 6))# 绘制相关性矩阵热力图
im = ax.imshow(corr_matrix, cmap='coolwarm', vmin=-1, vmax=1)# 添加颜色条
cbar = plt.colorbar(im, ax=ax)
cbar.set_label('Correlation Coefficient')# 设置刻度标签
ax.set_xticks(np.arange(len(corr_matrix.columns)))
ax.set_yticks(np.arange(len(corr_matrix.columns)))
ax.set_xticklabels(corr_matrix.columns)
ax.set_yticklabels(corr_matrix.columns)# 在每个单元格中添加数值
for i in range(len(corr_matrix.columns)):for j in range(len(corr_matrix.columns)):text = ax.text(j, i, f'{corr_matrix.iloc[i, j]:.2f}',ha="center", va="center", color="black")ax.set_title('Correlation Matrix Heatmap')
plt.tight_layout()
plt.show()

示例 4:高级应用 - 自定义颜色映射和规范化

from matplotlib.colors import LogNorm, PowerNorm# 创建一些特殊分布的数据
x = y = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(x, y)
Z = np.exp(-X**2 - Y**2) + 0.1 * np.exp(-(X-2)**2 - (Y-2)**2)  # 两个高斯分布的和fig, axes = plt.subplots(2, 2, figsize=(12, 10))# 1. 线性尺度
im1 = axes[0, 0].imshow(Z, cmap='viridis', extent=[-3, 3, -3, 3])
axes[0, 0].set_title('Linear Scale')
plt.colorbar(im1, ax=axes[0, 0])# 2. 对数尺度 - 适合显示指数变化的数据
im2 = axes[0, 1].imshow(Z, cmap='viridis', norm=LogNorm(vmin=0.01, vmax=1), extent=[-3, 3, -3, 3])
axes[0, 1].set_title('Logarithmic Scale')
plt.colorbar(im2, ax=axes[0, 1])# 3. 幂律尺度
im3 = axes[1, 0].imshow(Z, cmap='plasma', norm=PowerNorm(gamma=0.5), extent=[-3, 3, -3, 3])
axes[1, 0].set_title('Power Law Scale (gamma=0.5)')
plt.colorbar(im3, ax=axes[1, 0])# 4. 自定义数据范围
im4 = axes[1, 1].imshow(Z, cmap='hot', vmin=0.2, vmax=0.8, extent=[-3, 3, -3, 3])
axes[1, 1].set_title('Custom Data Range (vmin=0.2, vmax=0.8)')
plt.colorbar(im4, ax=axes[1, 1])for ax in axes.flat:ax.set_xlabel('X')ax.set_ylabel('Y')plt.tight_layout()
plt.show()

四、 最佳实践与常见陷阱

  1. 最佳实践:
    • 选择合适的colormap
      • sequential(顺序):用于表示有序数据(如viridis, plasma
      • diverging(发散):用于有中间值的数据(如coolwarm, RdYlGn
      • qualitative(定性):用于分类数据(如tab10, Set3
    • 始终添加颜色条:使用plt.colorbar()帮助读者理解数值与颜色的映射关系
    • 考虑数据分布:对于跨度大的数据,考虑使用对数标准化(LogNorm
    • 注意坐标原点:默认是origin='upper'(左上角),但科学数据常用origin='lower'(左下角)
    • 使用插值提高可读性:对于小图像或需要放大查看时,使用适当的插值方法
  2. 常见陷阱:
    • 使用彩虹colormap:避免使用jet等彩虹colormap,它们可能扭曲数据感知,不利于色盲读者,且不是感知均匀的
    • 忽略数据范围:不使用vmin/vmax可能导致极端值主导颜色映射,掩盖数据细节
    • 忘记颜色条:没有颜色条的伪彩色图几乎无法解读
    • 错误处理图像通道:RGB图像需要是0-1的float或0-255的int,且通道顺序需正确

五、 总结

plt.imshow() 是一个极其强大的函数,远不止是显示图像那么简单:

  • 核心功能:将二维数组可视化为伪彩色图像
  • 关键参数cmap(颜色映射), vmin/vmax(数据范围), interpolation(插值), norm(标准化)
  • 高级应用:热力图、科学数据可视化、矩阵分析
  • 最佳搭档plt.colorbar()(颜色条), matplotlib.colors模块中的各种标准化类

掌握 plt.imshow() 意味着你可以有效地可视化任何二维结构化数据,从简单的矩阵到复杂的科学测量,这是数据科学和机器学习中不可或缺的技能。在下一篇文章中,我们将探讨一些特殊用途的图表,包括误差线和等高线图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94260.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94260.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/94260.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小游戏AssetBundle加密方案解析

据游戏工委数据统计,2025年1-6月,国内小程序游戏市场实际销售收入232.76亿元,同比增长40.2%。其中内购产生收入153.03亿元,占比65.7%,呈逐年提升趋势。爆款频出的小游戏,已经成为当下游戏行业的重要增长点。…

linux编程----网络通信(TCP)

1.TCP特点1.面向数据流;2.有连接通信;3.安全可靠的通信方式;4.机制复杂,网络资源开销大;5.本质只能实现一对一的通信(可使用TCP的并发方式实现一对多通信);2.TCP的三次握手与四次挥手…

HTTP请求的执行流程

HTTP请求的执行流程是一个系统化的过程,涉及多个网络协议和交互步骤。以下是完整的流程分解,结合关键技术和逻辑顺序:🌐 一、连接准备阶段​​URL解析与初始化​​客户端(浏览器/应用)解析目标URL&#xff…

联想win11笔记本音频失效,显示差号(x)

该博客可以解答 常见问题详情 Win10系统安装更新后右下角声音出现红叉,电脑也没有声音, 通过设备管理器查看“系统设备”发现“音频部分“出现黄色感叹号, 更新驱动、卸载驱动与第三方工具检测安装后重启都不行。 故障原因 应该是用户曾经…

elasticsearch 7.x elasticsearch 使用scroll滚动查询中超时问题案例

一 问题 1.1 问题描述 2025-08-21 16:57:53.646 | WARN ||||||||||||| scheduling-1 | ElasticsearchRestTemplate | Could not clear scroll: Unable to parse response body; nested exception is ElasticsearchStatusException [Unable to parse response body]; nested: …

高并发内存池(1)-定长内存池

高并发内存池&#xff08;1&#xff09;-定长内存池 可以采用两种方式&#xff1a; 方式1&#xff1a; template <size_t N>方式2&#xff1a; template <class T>获取到T对象大小的内存池&#xff0c;更推荐使用方式二&#xff0c;因为可以动态灵活调整类型 需要的…

第三阶段sql server数据-4:数据库脚本生成,备份与还原,分离与附加操作的图文步骤

1_生成数据库脚本&#xff08;1&#xff09;在数据库上右键选择任务&#xff08;2&#xff09;选择生成脚本&#xff08;3&#xff09;选择下一步&#xff0c;如果下次不想显示此页面&#xff0c;可勾选不再显示此页&#xff08;4&#xff09;如果导出全部数据&#xff0c;选择…

【C++闯关笔记】STL:string的学习和使用(万字精讲)

​系列文章目录 第零篇&#xff1a;从C到C入门&#xff1a;C有而C语言没有的基础知识总结-CSDN博客 第一篇&#xff1a;【C闯关笔记】封装①&#xff1a;类与对象-CSDN博客 第二篇&#xff1a;【C闯关笔记】封装②&#xff1a;友元与模板-CSDN博客 第三篇&#xff1a;【C闯…

06 - spring security角色和权限设置

spring security角色和权限设置 文档 00 - spring security框架使用01 - spring security自定义登录页面02 - spring security基于配置文件及内存的账号密码03 - spring security自定义登出页面04 - spring security关闭csrf攻击防御05 - spring security权限控制 角色和权限…

如何实现文档处理全流程自动化?

在处理文本文档、电子邮件、视频音频、社媒帖子等非结构化数据时&#xff0c;我们经常发现这些数据难以用传统的数据库表格进行存储和管理&#xff0c;因为其没有明确的结构和标准化的格式&#xff0c;因此&#xff0c;这类数据处理难度较大&#xff0c;当传统“人眼Excel”模式…

Java Main无法初始化主类的原因与解决方法(VsCode工具)

个人操作 由于上传git将target目录也上传了所以在本地删除target之后再重新同步更新动作然后直接在vscode工具上run本地项目运行报错&#xff0c;报错信息如下 报错信息分析原因1. 工具配置 用 VS Code 的“Run”运行按钮时&#xff0c;是否会自动编译&#xff0c;取决于你的 V…

Azure Kubernetes Service (AKS)

Overview AKS&#xff08;Azure Kubernetes Service&#xff09; 是 Microsoft Azure 提供的一种托管Kubernetes 服务&#xff0c;旨在简化 Kubernetes 集群的部署、管理和操作。轻松运行和扩展基于容器的应用程序&#xff0c;而无需管理 Kubernetes 本身的基础设施。 AKS与 …

基于SpringBoot的校园信息共享系统【2026最新】

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

PyTorch API 3 - distributed

文章目录分布式通信包 - torch.distributed后端支持PyTorch 内置的后端选择哪个后端&#xff1f;常见环境变量选择使用的网络接口其他NCCL环境变量基础概念初始化返回类型&#xff1a;boolTCP初始化共享文件系统初始化环境变量初始化方法初始化后操作关闭处理重新初始化组Devic…

【K8s】整体认识K8s之Docker篇

首先认识几个名词&#xff0c;Docker-ce是docker的社区版本&#xff0c;提供给各种构建、发布、运行容器的工具&#xff1b;docker-ce-cli是社区版本的命令行工具&#xff0c;与docker守护进程进行交互&#xff1b;containerd.io是docker运行时&#xff08;containerd&#xff…

【机器学习】7 Linear regression

本章目录 7 Linear regression 217 7.1 Introduction 217 7.2 Model specification 217 7.3 Maximum likelihood estimation (least squares) 217 7.3.1 Derivation of the MLE 219 7.3.2 Geometric interpretation 220 7.3.3 Convexity 221 7.4 Robust linear regression * 2…

【卫星通信】超低码率语音编码ULBC:EnCodec神经音频编解码器架构深度解析

引言 EnCodec是由Meta AI提出的一种端到端神经音频编解码器架构&#xff0c;其核心目标是在保证音频质量的前提下实现高压缩比和低带宽传输。该模型通过结合卷积神经网络、残差矢量量化&#xff08;Residual Vector Quantization, RVQ&#xff09;、多尺度对抗训练以及Transfor…

08_正则表达式

第8课:正则表达式 课程目标 理解正则表达式的基本概念 掌握常用的正则表达式模式 学习Python中re模块的使用 能够编写简单的正则表达式 1. 正则表达式基础 1.1 什么是正则表达式 正则表达式是一种用于匹配字符串模式的工具,可以用于搜索、替换和验证文本。 1.2 基本语法 …

小迪安全v2023学习笔记(七十一讲)—— Python安全反序列化反编译格式化字符串安全

文章目录前记WEB攻防——第七十一天Python安全&反序列化利用链&PYC文件反编译&格式化字符串安全Python - PYC-反编译文件出源码介绍演示Python - 反序列化-调用链&魔术方法各类语言序列化和反序列化函数序列化和反序列化含义Python中常用的序列化/反序列化函数…

Linux->多线程2

目录 本文说明&#xff1a; 一&#xff1a;线程互斥 1&#xff1a;缺乏互斥的抢票系统 2&#xff1a;抢票系统分析及概念回顾 3&#xff1a;互斥锁 ①&#xff1a;相关接口 a&#xff1a;定义锁 b&#xff1a;初始化锁 c&#xff1a;加锁 d&#xff1a;解锁 e&#x…