【单细胞高级绘图】09.细胞通讯_两组比较_连线图

2024-01-11 07:30

本文主要是介绍【单细胞高级绘图】09.细胞通讯_两组比较_连线图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上周一位读者联系我,让我帮忙发一个绘图的单子。在朋友圈发单后,感兴趣的朋友很多,有十几位还私聊我让我分享一下代码,可见大家还是很感兴趣的。不过等了两天,依旧没有勇士接单,可能是因为这种图比较少见,大家画得少。

先来理解一下这张图,在b图中:

  • 左边是EC细胞表达的ligand,右边是mNEUR细胞表达的receptor
  • ligand这一列对应的基因会排序,依据是两个group(比如young和old两组)在EC细胞中找完差异基因后,能知道这些基因的log(FC_young_to_old),从大到小依次往下排,并涂色。同时,找差异基因也能知道p值,原文表示显著性用的是圆环的颜色,越显著,圆环颜色越深。
  • receptor这一列类似ligand列,不过是在mNEUR细胞中,两组之间找差异基因。
  • 图中的线段,表示ligand-receptor对,而这个信息(谁和谁构成受配体)是已知的,数据库可以下载到(也就是说,这个图即便不做细胞通讯分析,只要能下载到ligand-receptor信息,也能画)。cellphonedb的输出结果也间接含有这个信息,我的代码基于这个。
  • 至于连线的颜色,我看了一下,没怎么变化,所以我推测线段的颜色取决于线段两侧ligand-receptor是高表达还是低表达,高表达时线段用浅红色,低表达时线段用浅蓝色。

以上解读均为我的理解,我没有看原文。我的图会略作更改,下文会说。

另外,因为一些互作关系没法用一个ligand一个receptor去表示,这样的pair不适合用这个图展示。


此篇推文的代码一共有3个:CCC_compare2.RCCC_line.RCCC_line2.R。每个代码都能出一张有意义的图。

准备数据

source("CCC_compare2.R")
CCC_compare2(group1.name = "Old",group2.name = "Young",group1.pfile = "cellphonedb/Old/pvalues.txt",group1.mfile="cellphonedb/Old/means.txt",group2.pfile="cellphonedb/Young/pvalues.txt",group2.mfile="cellphonedb/Young/means.txt",p.threshold = 0.05,thre=0.5,cell.pair="EC|APC", #指定ligand产生的细胞|receptor产生的细胞plot.width=15,plot.height=30,filename = "test3_"
)

前几行代码跟上一节是类似的,也能输出一个表格(test3_Old2Young.xlsx)和对应的气泡图
后续的连线图基于这个表格的数据。

连线图有个特点,就是"谁是ligand,谁是receptor,ligand和receptor分别由什么细胞产生"非常明确,CCC_compare2.R这个代码比CCC_compare.R (在上一节)增加一百多行去理清这个事情,输出的图和表格pair左边的就是ligand(产生的细胞),右边的就是receptor(产生的细胞)

连线图的绘制 第1种方法

source("CCC_line.R")
CCC_line(table.path="test3_Old2Young.xlsx",ligand.cell="EC",receptor.cell="APC",group1.name = "Old",group2.name = "Young",#这五个参数和上一步对应ligand.color="#4dbbd6",receptor.color="#90d1c1",pt.size=6,line.thre1=0.5,line.thre2=6,#line.thre1和上一步的"thre"参数一致,line.thre2可以用来调整线的粗细,值越大,线越细file.name="test3_",plot.width=25,plot.height=20)

第一种方法不涉及差异基因,因此左右两列是统一的圆点。线段粗颜色红,表示(相较于group2)group1的互作强;线段粗颜色蓝,表示(相较于group2)group1的互作弱。

连线图的绘制 第2种方法

library(Seurat)
testseu=readRDS("testseu.rds")
# 此次演示为了加快运行速度,人为减少了数据量,实际分析中找差异基因不建议这么做
selectedCB=sample(testseu@meta.data$CB,1000)
testseu=testseu%>%subset(CB %in% selectedCB)# 基于分组找差异基因
marker_group=data.frame()
Idents(testseu)="celltype_age"
for ( ci in c("EC","APC") ) {tmp.marker <- FindMarkers(testseu, logfc.threshold = 0, min.pct = 0.01,only.pos = F, test.use = "wilcox",ident.1=paste0(ci,"_Old"),ident.2=paste0(ci,"_Young"))tmp.marker$gene=rownames(tmp.marker)tmp.marker$cluster_group=ifelse(tmp.marker$avg_log2FC > 0,paste0(ci,"_Old"),paste0(ci,"_Young"))tmp.marker$cluster=citmp.marker=tmp.marker%>%arrange(desc(avg_log2FC))marker_group=marker_group%>%rbind(tmp.marker)
}
#本次演示的数据集为小鼠数据集,在运行cellphonedb时,进行了基因symbol的转换。
#此处找差异基因得到的symbol为真实基因名,为了让两个分析匹配,DEG表格也应该做基因名转换。
#但是为了简化,此处只是简单地将小鼠基因名转为大写,不是很精确。大家在分析的时候建议严格一点。
marker_group$gene=marker_group$gene %>% toupper()

第二种方法需要不设置筛选条件去找差异基因,然后用CCC_line2函数就可以了

source("CCC_line2.R")
CCC_line2(cpdb.table.path = "test3_Old2Young.xlsx",marker_group = marker_group,ligand.cell = "EC",receptor.cell = "APC",group1.name = "Old",group2.name = "Young",line.size = 2,file.name = "test3_",plot.width = 25,plot.height = 20)

这种方法得到的图,左右两列添加了差异基因相关的信息,p值、log2FC。线段的粗细固定了,线段的颜色表示(相较于group2)group1的互作强弱。


本文代码编写(3个函数)花费大量时间,故不无偿提供,有需要的朋友可以公粽号后台回复2022B

这篇关于【单细胞高级绘图】09.细胞通讯_两组比较_连线图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/593589

相关文章

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

Java第二阶段---09类和对象---第三节 构造方法

第三节 构造方法 1.概念 构造方法是一种特殊的方法,主要用于创建对象以及完成对象的属性初始化操作。构造方法不能被对象调用。 2.语法 //[]中内容可有可无 访问修饰符 类名([参数列表]){ } 3.示例 public class Car {     //车特征(属性)     public String name;//车名   可以直接拿来用 说明它有初始值     pu

Java Websocket实例【服务端与客户端实现全双工通讯】

Java Websocket实例【服务端与客户端实现全双工通讯】 现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏 览器需要不断的向服务器发出请求,然而HTTP

关键字synchronized、volatile的比较

关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,并且volatile只能修饰于变量,而synchronized可以修饰方法,以及代码块。随着JDK新版本的发布,synchronized关键字的执行效率上得到很大提升,在开发中使用synchronized关键字的比率还是比较大的。多线程访问volatile不会发生阻塞,而synchronize

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma

Science|癌症中三级淋巴结构的免疫调节作用与治疗潜力|顶刊精析·24-09-08

小罗碎碎念 Science文献精析 今天精析的这一篇综述,于2022-01-07发表于Science,主要讨论了癌症中的三级淋巴结构(Tertiary Lymphoid Structures, TLS)及其在肿瘤免疫反应中的作用。 作者类型作者姓名单位名称(中文)通讯作者介绍第一作者Ton N. Schumacher荷兰癌症研究所通讯作者之一通讯作者Daniela S. Thomm