优雅地展示20w单细胞热图|非Doheatmap 超大数据集 细胞数太多

单细胞超大数据集的热图怎么画?昨天刚做完展示20万单细胞的热图要这么画吗? 今天就有人发消息问我为啥他画出来的热图有问题。

问题起源

昨天分享完  20万单细胞的热图要这么画吗?,就有人问为啥他的数据会出错。我们先来看下他的数据

  • 数据输入部分

cluster_gene_stat=FindAllMarkers(d.all,only.pos = TRUE,logfc.threshold = 0.4)head(cluster_gene_stat)table(cluster_gene_stat$cluster)DimPlot(d.all)d.all$orig.ident=Idents(d.all)table(d.all$orig.ident)Idents(d.all)=paste0('cluster',d.all$orig.ident)a=AverageExpression(d.all,return.seurat = TRUE)a$orig.ident=rownames(a@meta.data)head(a@meta.data)head(markers)markers=cluster_gene_statDoHeatmap(a,draw.lines = FALSE, slot = 'scale.data',assay = 'SCT',          features = markers %>%group_by(cluster) %>%dplyr::slice_max(avg_log2FC,n = 5) %>% .$gene )
  • 画图所需数据

他画出来的图是这样:

markers$cluster=paste0("cluster",markers$cluster)markers$cluster=factor(markers$cluster,levels = unique(markers$cluster))DoHeatmap(a,draw.lines = FALSE, slot = 'scale.data',assay = 'SCT',          features = markers %>%group_by(cluster) %>%dplyr::slice_max(avg_log2FC,n = 5) %>% .$gene )

  • 和我的图20万单细胞的热图要这么画吗? 区别在于没有列名,图注也不完整,且热图色块是乱序的


解决方法

  • 1. 方倒是简单,重新添加列名即可添加即可

Idents(d.all)=paste0('cluster',d.all$orig.ident)a=AverageExpression(d.all,return.seurat = TRUE)a$orig.ident=rownames(a@meta.data)DoHeatmap(a,draw.lines = FALSE, slot = 'scale.data',      assay = 'SCT',group.by = 'orig.ident',          features = markers %>%group_by(cluster) %>%dplyr::slice_max(avg_log2FC,n = 5) %>% .$gene )

  • 2. 调整因子顺序,让热图中的色块更好看些

markers$cluster=factor(markers$cluster,levels = paste0('cluster',seq(0,8,1)) )head(markers)head(a@meta.data)DoHeatmap(a,draw.lines = FALSE, slot = 'scale.data',assay = 'SCT',group.by = 'orig.ident',          features = markers %>%group_by(cluster) %>%dplyr::slice_max(avg_log2FC,n = 5) %>% .$gene )

但是你会发现 右边地图注少了cluster8。

为什么cluster8会缺失?我觉得这是bug,盲猜可能由于markers内的cluster8对应地基因在a里是na


  • 3. 自己手动添加图注cluster8即可

DoHeatmap(a,features =  markers %>%group_by(cluster) %>%dplyr::slice_max(avg_log2FC,n = 5) %>% .$gene,          draw.lines = FALSE,group.by = 'orig.ident') +  ggplot2:: scale_color_discrete(name = "Identity", labels =  paste0('cluster',seq(0,8,1))  )

  • 3. 如果热图中想多加几个基因的话 

DoHeatmap(a,features =  markers %>%group_by(cluster) %>%dplyr::slice_max(avg_log2FC,n = 15) %>% .$gene,          draw.lines = FALSE,group.by = 'orig.ident') +  ggplot2:: scale_color_discrete(name = "Identity", labels =  paste0('cluster',seq(0,8,1))  )

只能这样了,这里所有热图都挺丑的,瘸子里面选巧匠吧


画外音:

这种热图不好看的根本原因在于数据的问题。提示我们需要合并、删除某些cluster,然后再来画热图会更好看。

如果你不会合并、删除某些cluster。可以先看看我之前的直播:

直播四-单细胞个性化注释、细分亚群并把细分亚群放回总群

如果还是不懂,找机会再直播一次~


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

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

相关文章

imgaug库指南(一):从入门到精通的【图像增强】之旅

文章目录 引言imgaug简介安装和导入imgaug代码示例imgaug的强大之处和用途小结结尾 引言 在深度学习和计算机视觉的世界里,数据是模型训练的基石,其质量与数量直接影响着模型的性能。然而,获取大量高质量的标注数据往往需要耗费大量的时间和…

(JAVA)-反射

什么是反射? 反射允许对成员变量,成员方法和构造方法的信息进行编程访问。 说简单点就是反射能将类里面的构造方法,成员变量,修饰符,返回值,注解,类型,甚至异常等类里面的所有东西都能够获取出来。 关于C…

团子杂记:SAP PS or 项目管理软件(PMIS )? PPM/P6

众所周知SAP的PS模块在项目型企业的SAP应用中扮演着核心角色,整个项目端到端的业务执行、财务核算、控制及分析都是通过PS作为主线,依赖于PS中的项目对象(如WBS元素、网络活动等)实现的。 在实施SAP的过程中,可以看到…

Nest 框架:解锁企业级 Web 应用开发的秘密武器(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

RKE安装k8s及部署高可用rancher之证书私有证书但是内置的ssl不放到外置的LB中 4层负载均衡

先决条件# Kubernetes 集群 参考RKE安装k8s及部署高可用rancher之证书在外面的LB(nginx中)-CSDN博客CLI 工具Ingress Controller(仅适用于托管 Kubernetes) 创建集群k8s [rootnginx locale]# cat rancher-cluster.yml nodes:- …

网络安全—模拟ARP欺骗

文章目录 网络拓扑安装使用编辑数据包客户机攻击机验证 仅做实验用途,禁止做违法犯罪的事情,后果自负。当然现在的计算机多无法被欺骗了,开了防火墙ARP欺骗根本无效。 网络拓扑 均使用Windows Server 2003系统 相关配置可以点击观看这篇文章…

【iOS安全】JS 调用Objective-C中WKWebview Handler的三种方式

有三种实现途径 1. WKScriptMessageHandler OC部分:注册并实现Handler 将OC中的方法"nativeMethod"注册为JavaScript Message Handler,从而WebView中的JavaScript代码可以调用该方法 // Register in Objective-C code - (void)setupWKWebVi…

算法通关村番外篇-数组实现队列

大家好我是苏麟 , 今天来用数组实现一下队列 . 数组实现队列 顺序存储结构存储的队列称为顺序队列,内部使用一个一维数组存储,用一个队头指针 front 指向队列头部节点(即使用int类型front来表示队头元素的下标),用一个队尾指针rear(有的地方…

vue3中pdf打印问题处理

1 get请求参数问题 之前的请求是post得不到参数,今天发现的问题很奇怪,从前端进入网关,网关居然得不到参数。 前端代码 const print () > {let linkUrlStr proxy.$tool.getUrlStr(proxy.$api.invOrder.psiInvOrder.printSalOutstock,{a…

【Java】面向对象程序设计 期末复习总结

语法基础 数组自带长度属性 length&#xff0c;可以在遍历的时候使用&#xff1a; int []ages new int[10];for (int i 0; i < ages.length; i)System.out.println(ages[i]); 数组可以使用增强式for语句进行只读式遍历&#xff1a; int[] years new int[10];for (int ye…

Git(3):Git环境常用命令

1 获取本地仓库 要使用Git对我们的代码进行版本控制&#xff0c;首先需要获得本地仓库 &#xff08;1&#xff09;在电脑的任意位置创建一个空目录&#xff08;例如test&#xff09;作为我们的本地Git仓库 &#xff08;2&#xff09;进入这个目录中&#xff0c;点击右键打开…

ElasticSearch数据同步

文章目录 ElasticSearch数据同步1. 同步调用2. 异步通知3. 监听binlog4. 工作中处理同步的问题 ElasticSearch数据同步 ElasticSearch中酒店数据来自于mysql数据库&#xff0c;因此MySQL数据发生改变时&#xff0c;ElasticSearch也必须跟着改变&#xff0c;这个就是ElasticSear…

一个基于SpringBoot+Thymeleaf渲染的图书管理系统

功能: 用户: a.预约图书 b.查看预约记录 c.还书 管理员: a.添加图书 b.处理预约(借书) c.查看借阅记录 另: 1.当用户过了还书日期仍旧未还书时会发邮件通知 2.当有书被还时发邮件通知预约书的用户到图书馆进行借书

八大算法排序@冒泡排序(C语言版本)

冒泡排序 概念 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单直观的排序算法&#xff0c;它重复地遍历待排序序列&#xff0c;一次比较两个相邻的元素&#xff0c;如果它们的顺序错误就将它们交换过来。通过多次的遍历&#xff0c;使得最大的元素逐渐移动到待排序序…

【人工智能】百度智能云千帆AppBuilder,快速构建您的专属AI原生应用

大家好&#xff0c;我是全栈小5&#xff0c;欢迎来到《小5讲堂》&#xff0c;此序列是《人工智能》专栏文章。 这是2024年第5篇文章&#xff0c;此篇文章是进行人工智能相关的实践序列文章&#xff0c;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&…

docker小白第十一天

docker小白第十一天 dockerfile分析 Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。即构建新镜像时会用到。 构建三步骤&#xff1a;编写dockerfile文件-docker build命令构建镜像-docker run镜像 运行容器实例。即一…

气缸功能块(SMART PLC梯形图代码)

有关气缸功能块的更多介绍,可以参考下面链接文章: https://rxxw-control.blog.csdn.net/article/details/125459568https://rxxw-control.blog.csdn.net/article/details/125459568CODESYS平台双通气缸功能块 https://rxxw-control.blog.csdn.net/article/details/12544822…

Linux 进程(七) 进程地址空间

虚拟地址/线性地址 学习c语言的时候我们经常会用到 “&” 符号&#xff0c;以及下面这张表&#xff0c;那么取出来的地址是否对应的是真实的物理地址呢&#xff1f;下面我们来写代码一步一步的验证。 从上面这张图不难看出&#xff0c;从正文代码&#xff0c;到命令行参数环…

Django Web 开发实战-实现用户管理系统(部门管理、用户管理、注册登录、文件上传)

简介 基于Django Python Web框架 MySQL Bootstrap 开发的用户管理系统。支持增删改查、模糊搜索、分页。 功能介绍 部门管理---》已完成 用户管理---》已完成 认证&#xff08;注册/登录&#xff09;---》开发中 数据统计---》待开发 文件上传---》待开发 效果图 部门…

Rust圣经 阅读 数值类型

基本类型 Rust 每个值都有其确切的数据类型&#xff0c;分为两类&#xff1a;基本类型和复合类型。 基本类型往往是一个最小化原子类型&#xff0c;无法解构为其它类型&#xff08;一般意义上来说&#xff09;&#xff0c;由以下组成&#xff1a; 数值类型&#xff1a;有符号…