Python | 如何在Matplotlib中仅绘制热图的上/下三角形
热图是一种强大的可视化工具,用于以矩阵格式表示数据,其中各个值由颜色表示。它们对于可视化相关矩阵特别有用,其中矩阵的对称性质使得显示上下三角形变得多余。本文将指导您使用Matplotlib(Python中流行的绘图库)仅绘制热图的上三角形或下三角形的过程。
为什么只绘制上三角形或下三角形?
热图是数据的图形表示,其中各个值由颜色表示。在许多情况下,例如相关矩阵,数据是关于对角线对称的。这意味着上三角形中的信息是下三角形中信息的镜像。如果同时删除两个三角形,则可能是多余的,并且会使可视化变得混乱。通过只绘制一个三角形,我们可以使热图更清晰,更容易解释。
分步实现绘制
要在Matplotlib中只绘制热图的上三角形或下三角形,我们可以使用NumPy创建一个数组,然后使用Matplotlib的imshow函数显示它。以下是详细步骤:
1.导入所需的库
首先,我们需要导入必要的库:NumPy用于数值运算,Matplotlib用于绘图。
import numpy as np
import matplotlib.pyplot as plt
2.生成随机数据
为了演示的目的,我们将创建一个随机的5×5矩阵。在现实世界的场景中,这可以是相关矩阵或任何其他数据矩阵。
data = np.random.rand(5, 5)
3.为上/下三角形创建掩码
我们可以使用numpy.tri函数来创建一个三角形掩码。此函数生成一个下三角矩阵,对角线下方为1,其他地方为0。为了创建上三角形掩码,我们可以转置下三角形掩码。
# Lower triangle mask
lower_mask = np.tri(data.shape[0], data.shape[1], k=-1)# Upper triangle mask
upper_mask = lower_mask.T
4.将掩码应用于数据
我们使用NumPy的掩码数组功能将掩码应用于我们的数据。这将隐藏上三角形或下三角形中的值。
# Mask the lower triangle
masked_data_lower = np.ma.array(data, mask=lower_mask)# Mask the upper triangle
masked_data_upper = np.ma.array(data, mask=upper_mask)
5.绘制热图
最后,我们使用Matplotlib的imshow函数绘制屏蔽数据。我们可以根据需要自定义色彩映射表和其他绘图设置。
plt.figure(figsize=(8, 6))# Plot lower triangle heatmap
plt.subplot(1, 2, 1)
plt.title("Lower Triangle Heatmap")
plt.imshow(masked_data_lower, interpolation='nearest', cmap='viridis')
plt.colorbar()# Plot upper triangle heatmap
plt.subplot(1, 2, 2)
plt.title("Upper Triangle Heatmap")
plt.imshow(masked_data_upper, interpolation='nearest', cmap='viridis')
plt.colorbar()plt.tight_layout()
plt.show()
仅绘制热图的上三角形:实际示例
1.示例:绘制相关矩阵
让我们考虑一个实际的例子,我们绘制数据集的相关矩阵。我们将使用Pandas库加载数据集并计算相关矩阵。
import pandas as pddf = pd.DataFrame({'A': np.random.rand(10),'B': np.random.rand(10),'C': np.random.rand(10),'D': np.random.rand(10),'E': np.random.rand(10)
})# Calculate correlation matrix
corr_matrix = df.corr()# Create upper triangle mask
mask = np.triu(np.ones_like(corr_matrix, dtype=bool))# Apply mask to the correlation matrix
masked_corr = np.ma.array(corr_matrix, mask=mask)plt.figure(figsize=(8, 6))
plt.title("Upper Triangle Correlation Matrix")
plt.imshow(masked_corr, interpolation='nearest', cmap='coolwarm', vmin=-1, vmax=1)
plt.colorbar()
plt.xticks(range(len(corr_matrix.columns)), corr_matrix.columns, rotation=90)
plt.yticks(range(len(corr_matrix.columns)), corr_matrix.columns)
plt.show()
2.示例:使用Seaborn绘制上三角热图
import seaborn as sns# Generate a mask for the upper triangle
mask = np.triu(np.ones_like(corr_matrix, dtype=bool))
plt.figure(figsize=(10, 8))# Draw the heatmap with the mask and correct aspect ratio
sns.heatmap(corr_matrix, mask=mask, cmap='coolwarm', vmax=1, vmin=-1, center=0,square=True, linewidths=.5, cbar_kws={"shrink": .5})plt.title("Upper Triangle Correlation Matrix")
plt.show()
总结
仅绘制热图的上三角形或下三角形可以使您的可视化更清晰,更易于解释,特别是在处理相关矩阵等对称矩阵时。通过使用NumPy创建掩码,使用Matplotlib或Seaborn绘制热图,您可以轻松实现此效果。
相关文章:

Python | 如何在Matplotlib中仅绘制热图的上/下三角形
热图是一种强大的可视化工具,用于以矩阵格式表示数据,其中各个值由颜色表示。它们对于可视化相关矩阵特别有用,其中矩阵的对称性质使得显示上下三角形变得多余。本文将指导您使用Matplotlib(Python中流行的绘图库)仅绘…...

Leetcode经典题20--长度最小的子数组
题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 输入输出示例 输入&…...

【计算机视觉】超简单!维纳滤波的经典案例
Hey小伙伴们!今天来给大家分享一个 计算机视觉 中非常经典且实用的技术——维纳滤波(Wiener Filter)。维纳滤波是一种基于最小均方误差准则的滤波方法,广泛应用于图像去噪、模糊恢复等领域。它不仅可以有效去除图像中的噪声&#…...

【closerAI ComfyUI】快速洗图!高效快速的提示词反推节点——cliption,让洗图出图快人一步不爆显存!
添加图片注释,不超过 140 字(可选) 【closerAI ComfyUI】快速洗图!高效快速的提示词反推节点——cliption,让洗图出图快人一步不爆显存! 大家好,我是Jimmy。反推提示词的节点有很多,像Florence2 、Joycaption2、喵手等。都是非常优秀的。但是呢,就是占用设备资源,加…...

AE Dressler CESAR 1312 Generator Model User Manual
AE Dressler CESAR 1312 Generator Model User Manual...

【513. 找树左下角的值 中等】
题目: 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7 提示: 二叉树的节点个数的范围是 …...

网络通信的瑞士军刀:Python socket库全解析
文章目录 网络通信的瑞士军刀:Python socket库全解析背景库介绍安装与重要性简单库函数使用方法场景应用常见Bug及解决方案总结 网络通信的瑞士军刀:Python socket库全解析 背景 在现代编程中,网络通信是不可或缺的一部分。无论是构建客户端…...
【笔记️】魔爪 Mini mx 使用快捷键
B站教程地址:MOZA魔爪的个人空间-MOZA魔爪个人主页-哔哩哔哩视频 1、开关键: 单击 → 开启录制/拍照 → 再次单击结束;休眠时,单击晚醒 双击 → 切换拍照/录制模式 三击 → 切换横竖拍 长按 → 关机 2、变焦键: 单击 → 切换航向俯仰跟随模式 ( 开机默…...

去除 el-input 输入框的边框(element-ui@2.15.13)
dgqdgqdeMac-mini spid-admin % yarn list --pattern element-ui yarn list v1.22.22 └─ element-ui2.15.13 ✨ Done in 0.23s.dgqdgqdeMac-mini spid-admin % yarn list vue yarn list v1.22.22 warning Filtering by arguments is deprecated. Please use the pattern opt…...

Vue中的一些用法
一、验证规则: 身份证的验证规则: 电话号码的验证规则: 二、选中一项后禁用其他选项: data(){ return{ dataForm{ medicalHistory:[] } }, 三、多选框选择后页面中不显示数据: 在表单提交时加 .join(",&…...
异步爬虫之协程的基本原理
我们知道爬虫是 IO 密集型任务,例如使用 requests 库来爬取某个站点,当发出一个请求后,程序必须等待网站返回响应,才能接着运行,而在等待响应的过程中,整个爬虫程序是一直在等待的,实际上没有做…...

Diffusion Transformer(DiT)——将扩散过程中的U-Net换成ViT:近频繁用于视频生成与机器人动作预测(含清华PAD详解)
前言 本文最开始属于此文《视频生成Sora的全面解析:从AI绘画、ViT到ViViT、TECO、DiT、VDT、NaViT等》 但考虑到DiT除了广泛应用于视频生成领域中,在机器人动作预测也被运用的越来越多,加之DiT确实是一个比较大的创新,影响力大&…...

CPT203 Software Engineering 软件工程 Pt.2 敏捷方法和需求工程(中英双语)
文章目录 3. Aglie methods(敏捷方法)3.1 Aglie methods(敏捷方法)3.1.1 特点3.1.2 优点3.1.3 缺点3.1.4 原则3.1.5 计划驱动与敏捷方法的对比 3.2 Scrum3.2.1 Scrum roles3.2.2 Scrum Activities and Artifacts3.2.2.1 Product B…...
【Git】-- 在本地执行 git fetch 发生异常
目录 1、现象 2、解决参考 2.1 检查网络连接 2.2 更新 Git 客户端 2.3 更改 GitHub URL 的访问协议 2.4 禁用 SSL 验证(临时解决) 2.5 检查系统的 CA 证书 2.6 重新克隆仓库 1、现象 在本地执行 $ git fetch upstream 时,抛出以下…...

Apache Doris 创始人:何为“现代化”的数据仓库?
在 12 月 14 日的 Doris Summit Asia 2024 上,Apache Doris 创始人 & PMC 成员马如悦在开场演讲中,围绕“现代化数据仓库”这一主题,指出 3.0 版本是 Apache Doris 研发路程中的重要里程碑,他将这一进展总结为“实时之路”、“…...
高校网络安全存在的问题与对策研究
目 录 摘 要1 第1章 引言2 1.1研究背景2 1.2研究意义2 第2章系统开发的相关技术简介3 2.1 Spring boot框架3 2.2 MySQL简介3 2.3 Vue框架3 2.4 JAVA简介3 第3章 系统需求分析4 3.1可行性分析4 3.1.1技术可行性4 3.1.2运行可行性4 3.1.3经济可行性5 3.2功能需求…...
Redis的数据类型,线程,持久化机制
1. Redis是单线程还是多线程的,为什么? Redis是单线程的(传统实现) Redis在传统的实现中是单线程的。尽管它处理的任务很多,但它使用单线程来处理所有客户端的请求。这个设计决策有几个关键原因: 简化模型…...
什么是ondelete cascade以及使用sqlite演示ondelete cascade使用案例
什么是ondelete cascade ON DELETE CASCADE是数据库中的一种约束,用于自动删除相关的记录。具体来说,当一个表中的记录(父表)被删除时,与其相关的其他表(子表)中的记录也会被自动删除&…...

Java设计模式 —— 【结构型模式】享元模式(Flyweight Pattern) 详解
文章目录 概述结构案例实现优缺点及使用场景 概述 享元模式也叫蝇量模式:运用共享技术有效地支持大量细粒度的对象; 常用于系统底层开发,解决系统的性能问题。像数据库连接池,里面都是创建好的连接对象,在这些连接对象…...
数据的简单处理——pandas模块——选择数据
要对读取的数据进行编辑,需要先学会选择数据的操作,如果选择行数据、列数据或者同时选择行列数据。 ############################## ##作者:白雪公主的后妈 ##时间:2024年12月29日 ##主题:数据的简单处理——pandas模…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...