当前位置: 首页 > news >正文

R语言 | 使用 ComplexHeatmap 绘制热图,分区并给对角线分区加黑边框

目的:画热图,分区,给对角线分区添加黑色边框
建议直接看0和4。

0. 准备数据

# 安装并加载必要的包
#install.packages("ComplexHeatmap")  # 如果尚未安装
library(ComplexHeatmap)# 使用 iris 数据集 #data(iris)# 选择数值列(去掉物种列)
data0 <- iris
rownames(data0)=paste0(iris$Species, 1:nrow(data0))# data0 <- mtcars 分类效果不好# 随机抽取30个
set.seed(42)
dat=data0[sample(nrow(data0), 30), 1:4]
#dat=data0# 计算余弦距离
#install.packages("proxy")      # 如果尚未安装
library("proxy")
distance_matrix <- as.matrix(dist(dat, method = "cosine"))
# 如果不想安装新包,也可以使用默认的欧氏距离:
#distance_matrix <- as.matrix(dist(iris_data, method = "euclidean"))# 使用相似性绘图 simi=1-dist
similarity=1-distance_matrixdim(similarity)
[1] 30 30

1. Heatmap 全部分块加黑框

library(circlize)
col_fun = colorRamp2(c(-2, 0, 2), c("green", "white", "red"))
col_fun(seq(-3, 3))Heatmap(similarity, name = "mat", #col = col_fun,row_km = 3, column_km = 3,)
# 每个分块绘制黑边框
# When the heatmap is split, layer_fun is applied in every slice.
Heatmap(similarity, name = "mat", #col = col_fun,row_km = 3, column_km = 3,layer_fun = function(j, i, x, y, width, height, fill) {# 全部分块都加黑框v = pindex(similarity, i, j)#grid.text(sprintf("%.1f", v), x, y, gp = gpar(fontsize = 10))str(v)grid.rect(gp = gpar(lwd = 2, fill = "transparent"))if(sum(v > 0)/length(v) > 0.75) {}})

在这里插入图片描述

2. 为对角线分块添加黑边框

Heatmap(similarity, name = "mat",#col = c("white", "yellow", "red3"),#col = col_fun,col =  colorRamp2(c(0.5, 0.75, 1), c("white", "yellow", "red3")),row_km = 3, column_km = 3,layer_fun = function(j, i, x, y, width, height, fill, slice_r, slice_c) {v = pindex(similarity, i, j)#grid.text(sprintf("%.1f", v), x, y, gp = gpar(fontsize = 10))if(slice_r == slice_c) {grid.rect(gp = gpar(lwd = 4, fill = "transparent", col="black"))}})

在这里插入图片描述

3. 添加列注释

还有一个与 pheatmap 包同名的函数:


annotation_col = data.frame(type = data0$Species,row.names = rownames(data0)
)[rownames(dat), ,drop=F]
# set colors
ann_colors = list(#type = c('setosa'="#ed553b", 'versicolor'="#99b433", 'virginica'="orange")type = c('setosa'="violetred1", 'versicolor'="turquoise2", 'virginica'="blueviolet")
)
# "#ed553b", "#99b433"
#violetred1,turquoise2,pheatmap(similarity,name = "Cosine\nsimilarity",main="xx", border_color = NA,clustering_method = "ward.D2",annotation_col = annotation_col, #set anno for columnannotation_colors = ann_colors, #set colors#col = c("white", "yellow", "red3"),#col = col_fun,col =  colorRamp2(c(0.8, 0.9, 1), c("white", "yellow", "red3")),row_km = 3, column_km = 3,layer_fun = function(j, i, x, y, width, height, fill, slice_r, slice_c) {v = pindex(similarity, i, j)#grid.text(sprintf("%.1f", v), x, y, gp = gpar(fontsize = 10))if(slice_r == slice_c) {grid.rect(gp = gpar(lwd = 4, fill = "transparent", col="black"))}})

在这里插入图片描述

Bug:

有一个问题:不同次执行,图竟然是不同的,不仅仅是分类的排列顺序问题,而是分类本身也不同了。搜了一下, 竟然受到随机数种子的影响?!固定的数据,固定的参数,每次聚类为什么还要受到随机数影响?不理解!难道非监督的聚类还要人工判断对不对?

比如,对以上最后一个聚类函数,设置不同的随机数种子,结果分别是:

# set.seed(45) #这个随机数竟然影响分类位置?!比如修改随机数种子,图分别为
pheatmap(similarity,name = "Cosine\nsimilarity",main="xx", border_color = NA,clustering_method = "ward.D2",annotation_col = annotation_col, #set anno for columnannotation_colors = ann_colors, #set colors#col = c("white", "yellow", "red3"),#col = col_fun,col =  colorRamp2(c(0.8, 0.9, 1), c("white", "yellow", "red3")),row_km = 3, column_km = 3,layer_fun = function(j, i, x, y, width, height, fill, slice_r, slice_c) {v = pindex(similarity, i, j)#grid.text(sprintf("%.1f", v), x, y, gp = gpar(fontsize = 10))if(slice_r == slice_c) {grid.rect(gp = gpar(lwd = 4, fill = "transparent", col="black"))}})

在这里插入图片描述

原因:使用kmeans聚类,确实是随机数确定初始中心的。不使用kmeans聚类,就不会受到随机数的影响。

4. 层次聚类,对结果分群

  • 原来:row_km = 3, column_km = 3, #kmeans确实是种子确定初始中心,结果会随随机数而变化
  • 现在:cutree_row=3, cutree_cols=3, #层次聚类是稳定的
pheatmap(similarity,name = "Cosine\nsimilarity",main="Hierarchical cluster", border_color = NA,clustering_method = "ward.D2",annotation_col = annotation_col, #set anno for columnannotation_colors = ann_colors, #set colors#col = c("white", "yellow", "red3"),#col = col_fun,col =  colorRamp2(c(0.8, 0.9, 1), c("white", "yellow", "red3")),#row_km = 3, column_km = 3, #kmeans确实是种子确定初始中心cutree_row=3, cutree_cols=3, #层次聚类是稳定的layer_fun = function(j, i, x, y, width, height, fill, slice_r, slice_c) {v = pindex(similarity, i, j)#grid.text(sprintf("%.1f", v), x, y, gp = gpar(fontsize = 10))if(slice_r == slice_c) {grid.rect(gp = gpar(lwd = 4, fill = "transparent", col="black"))}})

在这里插入图片描述

Ref

相关文章:

R语言 | 使用 ComplexHeatmap 绘制热图,分区并给对角线分区加黑边框

目的&#xff1a;画热图&#xff0c;分区&#xff0c;给对角线分区添加黑色边框 建议直接看0和4。 0. 准备数据 # 安装并加载必要的包 #install.packages("ComplexHeatmap") # 如果尚未安装 library(ComplexHeatmap)# 使用 iris 数据集 #data(iris)# 选择数值列&a…...

React图标库: 使用React Icons实现定制化图标效果

React图标库: 使用React Icons实现定制化图标效果 图标库介绍 是一个专门为React应用设计的图标库&#xff0c;它包含了丰富的图标集合&#xff0c;覆盖了常用的图标类型&#xff0c;如FontAwesome、Material Design等。React Icons可以让开发者在React应用中轻松地添加、定制各…...

Python sider-ai-api库 — 访问Claude、llama、ChatGPT、gemini、o1等大模型API

目前国内少有调用ChatGPT、Claude、Gemini等国外大模型API的库。 Python库sider_ai_api 提供了调用这些大模型的一个完整解决方案&#xff0c; 使得开发者能调用 sider.ai 的API&#xff0c;实现大模型的访问。 Sider是谷歌浏览器和Edge的插件&#xff0c;能调用ChatGPT、Clau…...

DeepSeek、哪吒和数据库:厚积薄发的力量

以下有部分来源于AI&#xff0c;毕竟我认为AI还不能替代&#xff0c;他只能是辅助 快速迭代是应用程序不是工程 在这个追求快速迭代、小步快跑的时代&#xff0c;我们似乎总是被 “快” 的节奏裹挟着前进。但当我们静下心来&#xff0c;审视 DeepSeek 的发展、饺子导演创作哪吒…...

DDD - 微服务架构模型_领域驱动设计(DDD)分层架构 vs 整洁架构(洋葱架构) vs 六边形架构(端口-适配器架构)

文章目录 引言1. 概述2. 领域驱动设计&#xff08;DDD&#xff09;分层架构模型2.1 DDD的核心概念2.2 DDD架构分层解析 3. 整洁架构&#xff1a;洋葱架构与依赖倒置3.1 整洁架构的核心思想3.2 整洁架构的层次结构 4. 六边形架构&#xff1a;解耦核心业务与外部系统4.1 六边形架…...

第 1 天:UE5 C++ 开发环境搭建,全流程指南

&#x1f3af; 目标&#xff1a;搭建 Unreal Engine 5&#xff08;UE5&#xff09;C 开发环境&#xff0c;配置 Visual Studio 并成功运行 C 代码&#xff01; 1️⃣ Unreal Engine 5 安装 &#x1f539; 下载与安装 Unreal Engine 5 步骤&#xff1a; 注册并安装 Epic Game…...

【华为OD-E卷 - 109 磁盘容量排序 100分(python、java、c++、js、c)】

【华为OD-E卷 - 磁盘容量排序 100分&#xff08;python、java、c、js、c&#xff09;】 题目 磁盘的容量单位常用的有M&#xff0c;G&#xff0c;T这三个等级&#xff0c; 它们之间的换算关系为1T 1024G&#xff0c;1G 1024M&#xff0c; 现在给定n块磁盘的容量&#xff0c…...

【大数据技术】编写Python代码实现词频统计(python+hadoop+mapreduce+yarn)

编写Python代码实现词频统计(python+hadoop+mapreduce+yarn) 搭建完全分布式高可用大数据集群(VMware+CentOS+FinalShell) 搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn) 本机PyCharm连接CentOS虚拟机 在阅读本文前,请确保已经阅读过以上三篇文章,成功搭建了…...

5-Scene层级关系

Fiber里有个scene是只读属性&#xff0c;能从fiber中获取它属于哪个场景&#xff0c;scene实体中又声明了fiber&#xff0c;fiber与scene是互相引用的关系。 scene层级关系 举例 在unity.core中的EntityHelper中&#xff0c;可以通过entity获取对应的scene root fiber等属性…...

JVM执行流程与架构(对应不同版本JDK)

直接上图&#xff08;对应JDK8以及以后的HotSpot&#xff09; 这里主要区分说明一下 方法区于 字符串常量池 的位置更迭&#xff1a; 方法区 JDK7 以及之前的版本将方法区存放在堆区域中的 永久代空间&#xff0c;堆的大小由虚拟机参数来控制。 JDK8 以及之后的版本将方法…...

本地部署 DeepSeek-R1:简单易上手,AI 随时可用!

&#x1f3af; 先看看本地部署的运行效果 为了测试本地部署的 DeepSeek-R1 是否真的够强&#xff0c;我们随便问了一道经典的“鸡兔同笼”问题&#xff0c;考察它的推理能力。 &#x1f4cc; 问题示例&#xff1a; 笼子里有鸡和兔&#xff0c;总共有 35 只头&#xff0c;94 只…...

请求响应(接上篇)

请求 日期参数 需要在前面加上一个注解DateTimeFormat来接收传入的参数的值 Json参数 JSON参数&#xff1a;JSON数据键名与形参对象属性名相同&#xff0c;定义POJO类型形参即可接收参数&#xff0c;需要使用 RequestBody 标识 通过RequestBody将JSON格式的数据封装到实体类…...

数组排序算法

数组排序算法 用C语言实现的数组排序算法。 排序算法平均时间复杂度最坏时间复杂度最好时间复杂度空间复杂度是否稳定适用场景QuickO(n log n)O(n)O(n log n)O(log n)不稳定大规模数据&#xff0c;通用排序BubbleO(n)O(n)O(n)O(1)稳定小规模数据&#xff0c;教学用途InsertO(n)…...

防火墙的安全策略

1.VLAN 2属于办公区;VLAN 3属于生产区&#xff0c;创建时间段 [FW]ip address-set BG type object [FW-object-address-set-BG]address 192.168.1.0 mask 25 [FW]ip address-set SC type object [FW-object-address-set-SC]address 192.168.1.129 mask 25 [FW]ip address-se…...

2025Java面试题超详细整理《微服务篇》

什么是微服务架构&#xff1f; 微服务框架是将某个应用程序开发划分为许多独立小型服务&#xff0c;实现敏捷开发和部署&#xff0c;这些服务一般围绕业务规则进行构建&#xff0c;可以用不同的语言开发&#xff0c;使用不同的数据存储&#xff0c;最终使得每个服务运行在自己…...

中位数定理:小试牛刀> _ <2025牛客寒假1

给定数轴上的n个点&#xff0c;找出一个到它们的距离之和尽量小的点&#xff08;即使我们可以选择不是这些点里的点&#xff0c;我们还是选择中位数的那个点最优&#xff09; 结论:这些点的中位数就是目标点。可以自己枚举推导&#xff08;很好想&#xff09; (对于 点的数量为…...

(2025,LLM,下一 token 预测,扩散微调,L2D,推理增强,可扩展计算)从大语言模型到扩散微调

Large Language Models to Diffusion Finetuning 目录 1. 概述 2. 研究背景 3. 方法 3.1 用于 LM 微调的高斯扩散 3.2 架构 4. 主要实验结果 5. 结论 1. 概述 本文提出了一种新的微调方法——LM to Diffusion (L2D)&#xff0c;旨在赋予预训练的大语言模型&#xff08;…...

如何开发一个大语言模型,开发流程及需要的专业知识

开发大型语言模型&#xff08;LLM&#xff09;是一个复杂且资源密集的过程&#xff0c;涉及多个阶段和跨学科知识。以下是详细的开发流程和所需专业知识指南&#xff1a; 一、开发流程 1. 需求分析与规划 目标定义&#xff1a;明确模型用途&#xff08;如对话、翻译、代码生成…...

【数据采集】基于Selenium采集豆瓣电影Top250的详细数据

基于Selenium采集豆瓣电影Top250的详细数据 Selenium官网:https://www.selenium.dev/blog/ 豆瓣电影Top250官网:https://movie.douban.com/top250 写在前面 实验目标:基于Selenium框架采集豆瓣电影Top250的详细数据。 电脑系统:Windows 使用软件:PyCharm、Navicat 技术需求…...

neo4j-在Linux中安装neo4j

目录 切换jdk 安装neo4j 配置neo4j以便其他电脑可以访问 切换jdk 因为我安装的jdk是1.8版本的&#xff0c;而我安装的neo4j版本为5.15,Neo4j Community 5.15.0 不支持 Java 1.8&#xff0c;它要求 Java 17 或更高版本。 所以我需要升级Java到17 安装 OpenJDK 17 sudo yu…...

Win11Debloat:让Windows系统重获新生的一站式自动化优化方案

Win11Debloat&#xff1a;让Windows系统重获新生的一站式自动化优化方案 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter …...

Postman团队版协作踩坑实录:我们是如何被‘英文界面’拖慢项目进度的

Postman团队协作中的语言障碍&#xff1a;从踩坑到高效协同的实战指南 当敏捷开发团队遭遇API协作瓶颈&#xff0c;语言差异往往成为最隐蔽的效率杀手。某金融科技团队在季度冲刺阶段&#xff0c;因Postman英文界面导致的接口理解偏差&#xff0c;直接造成核心支付模块延期两周…...

瑞芯微RK3588/RK356X混合量化实战:手把手教你用rknn-toolkit2优化模型精度

瑞芯微RK3588/RK356X混合量化实战&#xff1a;手把手教你用rknn-toolkit2优化模型精度 在嵌入式AI开发中&#xff0c;模型量化是提升推理效率的关键技术&#xff0c;但传统的全INT8量化往往会导致精度损失&#xff0c;影响最终应用效果。瑞芯微的rknn-toolkit2工具链提供了混合…...

Graphormer效果展示:PCQM4M榜单SOTA级分子属性预测结果集

Graphormer效果展示&#xff1a;PCQM4M榜单SOTA级分子属性预测结果集 1. 模型概述 Graphormer是一种基于纯Transformer架构的图神经网络&#xff0c;专门为分子图&#xff08;原子-键结构&#xff09;的全局结构建模与属性预测而设计。该模型在OGB、PCQM4M等分子基准测试中表…...

3分钟掌握:如何在Windows上直接安装Android应用的终极方案

3分钟掌握&#xff1a;如何在Windows上直接安装Android应用的终极方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经遇到过这样的情况&#xff1a;手机上有…...

【PCIE系列】深入解析接收端检测:从电路原理到实战验证

1. PCIE接收端检测机制的核心原理 当你把一根USB线插入电脑时&#xff0c;系统瞬间就能识别到设备连接——这种看似简单的操作背后&#xff0c;隐藏着PCIE接收端检测的精妙机制。作为硬件工程师&#xff0c;我经常需要调试这种看似简单实则复杂的链路检测问题。接收端检测本质上…...

wordpress数据迁移---没有验证

迁移 WordPress 完整数据&#xff08;文章、页面、媒体、主题、插件、设置、评论、用户&#xff09;&#xff0c;核心是 备份旧站文件 数据库 → 新服务器配置环境 → 上传文件 导入数据库 → 修改配置 替换域名 / URL → 测试。下面分 插件一键迁移&#xff08;新手推荐&am…...

2024数学建模实战解析:多模型融合的农作物种植策略优化

1. 农作物种植策略优化的核心挑战 农业种植规划从来都不是简单的选择题。记得去年帮一个乡村做种植方案时&#xff0c;村长拿着往年的收成数据一脸愁容&#xff1a;"明明去年种辣椒赚了钱&#xff0c;怎么今年大家都种就亏本了&#xff1f;"这个问题恰恰揭示了农作物…...

TDEngine-OSS-3.3.7.5开源版高可用部署实战(单节点快速入门与三副本集群搭建详解)

1. TDEngine开源版入门&#xff1a;为什么选择它&#xff1f; 如果你正在寻找一个高性能、开源的时序数据库&#xff0c;TDEngine绝对值得考虑。这个由涛思数据推出的产品&#xff0c;专门为物联网、工业互联网等场景设计&#xff0c;能够轻松处理海量时间序列数据。我最近在实…...

2025届必备的AI学术方案实际效果

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在当下的学术写作情形里&#xff0c;免费的人工智能论文工具达成了从文献查找、大纲制作直至…...