单细胞多组差异基因上下调统计热图展示代码示例

    这样的图是不是很炫酷,网上的代码动不动就几十块钱一个函数,这里给大家分享一个自力更生版的画法。

    首先介绍一下这个图的意思。这个图将不同细胞类型的差异基因分上调与下调的展示,每个细胞类型共有的和特异的分开展示并展示数目。一般认为满足p<0.05 & log2FC > 0.25 为上调,p<0.05 & log2FC < -0.25为下调。如果我们有两组数据,为得到两组比较的差异基因表,我们需要循环取出每一种细胞类型,分别利用FindMarkers函数来寻找差异基因并整合成一个dataframe。

    接下来进入代码环节。

    首先加载R包与数据。

```swift

library(pheatmap)

library(ComplexHeatmap)

library(ggplot2)

library(dplyr)

data <- read.csv("P0_VS_AD.csv",sep = ",",row.names = 1) %>% .[.$p_val_adj < 0.05,]   ###P0与AD是两个时期

data_up <- data[data$avg_log2FC > 0.25,]

data_down <-data[data$avg_log2FC <= -0.25,]

```

得到这样的数据格式:

data_up & data_down


    我的思路是将数据构建成一个table,行是基因,列是细胞类型,如果该基因在该细胞类型中出现,就计数1,这样就生成了一个0 1的列表。每一行就是一个基因,新建一个sum列统计每一行的数目,如果sum为1,则是unique的,剩下的就是共表达的(指该基因只要在两个以上细胞类型出现就是共表达)。

    构建dataframe过程如下:

```

up <- as.data.frame.array(table(data_up$gene,data_up$cluster))

up$sum <- apply(up,1,sum)

uniq <- up[up$sum ==1,c(-12)]

same <- up[up$sum !=1,c(-12)]

```


up 数据结构

    接下来,我们对unique和same分别绘制热图,并利用complexheatmap整合成一张图。

```

p1 <- Heatmap(same,cluster_columns = F,show_row_names = F,border = T,col = c("#ffffff","#e41a1c"),show_row_dend = F,show_heatmap_legend = F)

p2 <- Heatmap(uniq,cluster_columns = F,show_row_names = F,border =  T,col = c("#ffffff","#e41a1c"),show_row_dend = F,show_heatmap_legend = F)

p1_p2 = p1 %v% p2

draw(p1_p2)

pdf("P0_CV_UP_num.pdf",width = 6,height = 6)

```

    就得到了这样的一张图。


原始图

    随后,我们来统计信息来用ai等绘图软件加上label。

```

uniq_up <- colSums(uniq) #上调的基因中每个细胞类型中特有的总数

total_uniq_up <- sum(unlist(uniq))  #上调的基因中每个细胞类型特有的基因数目

same_up <- colSums(same)    #上调的基因中每个细胞类型中共有的总数

total_same_up <- sum(unlist(same))  #上调的基因中每个细胞类型中共有的基因数目

```

   之后添加到图的对应位置即可。这里如果可以直接代码添加上最好,但是懒得搞了~~~


成图

    同理,下调的也一样的做法。

```

down <- as.data.frame.array(table(data_down$gene,data_down$cluster))

down$sum <- apply(down,1,sum)

uniq2 <- down[down$sum ==1,c(-12)]

same2 <- down[down$sum !=1,c(-12)]

p1 <- Heatmap(same2,cluster_columns = F,show_row_names = F,border =  T,col = c("#ffffff","#0000FF"),show_row_dend = F,show_heatmap_legend = F)

p2 <- Heatmap(uniq2,cluster_columns = F,show_row_names = F,border =  T,col = c("#ffffff","#0000FF"),show_row_dend = F,show_heatmap_legend = F)

p1_p2 = p1 %v% p2

draw(p1_p2)

pdf("P0_CV_DOWN_num.pdf",width = 6,height = 6)

draw(p1_p2)

dev.off()

####统计

uniq_down <- colSums(uniq2)

total_uniq_down <- sum(unlist(uniq2))

same_down <- colSums(same2)

total_same_down <- sum(unlist(same2))

```

    最后附上成图:


    总结:其实就是很简单的热图的利用,没有那么高深莫测~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容