【单细胞高级绘图】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

相关文章

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

比较学习难度:Adobe Illustrator、Photoshop和新兴在线设计平台

从入门设计开始,几乎没有人不知道 Adobe 公司两大设计软件:Adobe Illustrator和 Photoshop。虽然AI和PS很有名,有一定设计经验的设计师可以在早期探索和使用后大致了解AI和PS的区别,但似乎很少有人会系统地比较AI和PS。目前,设计软件功能多样,轻量级和网页设计软件已成为许多设计师的需求。对于初学者来说,一篇有针对性的AI和PS比较总结文章具有非常重要的指导意义。毕竟

Python几种建表方法运行时间的比较

建立一个表[0,1,2,3.......10n],下面几种方法都能实现,但是运行时间却截然不同哦 import time#方法一def test1(n):list=[]for i in range(n*10):list=list+[i]return list#方法二def test2(n):list=[]for i in range(n*10):list.append(i)#方法三d

哺乳细胞重组表达人鼠嵌合抗体:制备与应用

重组抗体是一类具有广泛应用价值的蛋白质,在药物研发和生物医学研究中发挥着重要作用。本文将介绍重组抗体的表达方式,重点关注嵌合抗体制备和哺乳细胞重组表达人鼠嵌合抗体的技术原理和应用。 重组抗体表达的原理和方法 重组抗体表达是通过将人或动物源的免疫球蛋白基因导入表达宿主细胞,并使其表达出特异性抗体蛋白质。常用的表达系统包括细菌、哺乳细胞和真核微生物等。 嵌合抗体制备的步骤和优势 选择适当的抗原

YTK的高级使用

YTKUrlFilterProtocol 接口 YTKUrlFilterProtocol 接口用于实现对网络请求URL或参数的重写,例如可以统一为网络请求加上一些参数,或者修改一些路径。 例如:在猿题库中,我们需要为每个网络请求加上客户端的版本号作为参数。所以我们实现了如下一个YTKUrlArgumentsFilter 类,实现了 YTKUrlFilterProtocol 接口: //

redis高级用法

redis 慢日志查询 配置参数 slowlog-log-slower-than 10000 #单位微秒 slowlog-max-len 选项指定服务器最多保存多少条慢查询日志 redis-cli slowlog get #获取慢日志1) 1) (integer) 4 # 日志的唯一标识符(uid)2) (integer) 1378781447 # 命令执

Struts2与struts1与springmvc比较

最近做项目用到了struts2,之前一直是用struts1和springMVC。感觉到了struts2从很大程度上和这两个还是有很大区别的,所以今天搜集了些资料,给他们做一下对比。            Struts1官方已经停止更新,现在用的也比较少,这里主要讲一下struts2和struts1比较都有哪些不同和进步。Struts2可以说不是完全从struts1改进来的,因为

算法8—不通过比较,找出两个数的最大值

问题: 比如:给定两个值 5和10,不通过比较,直接找出最大值。 分析: 一旦涉及到不用比较找最大值,想都不用想,一般只能通过位运算来实现。  max = a - ((a-b)&((a-b)>>31)) 或者 max = ((a+b)+|a-b|)/2 如果找最小值,我们只需把两个值相加,减去max即可。

刷题——比较版本号

比较版本号_牛客题霸_牛客网 int compare(string version1, string version2){int len1 = version1.size();int len2 = version2.size();int i=0,j=0;while(i<len1 || j <len2){long num1 =0 ;while(i <len1 && version1.charAt

金蝶KIS商贸高级版4.0汉码盘点机使用说明书-金蝶KIS条码数据采集器,金蝶KIS盘点机PDA

1. 前言 PDA与“金蝶KIS商贸高级版”无缝对接,通过WIFI,3G/4G无线网络连接后台数据库,实时与后台数据库进行数据传输。在PDA上可以通过扫描条码完成采购收货,出库校验,销售出库,仓库盘点,库存查询的功能。扫描条码,录入数量,立即生成后台ERP中的各种单据。能大大提高工作效率,减少人工手工录单出错概率,提高仓库管理软件数据准确性。 1)        盘点机软件操作简单易上手,只要