单细胞差异基因展示图

最近看到一个公众号,分享了一个图片,公众号的名字为西红柿的空间转录组,代码均来着这个公众号,废话不多说,先看看图长什么样


71a9e7f00eb2aa6653909278b1aeddb.png

直接上代码

加载数据与包

library(ggplot2)
library(ggrepel)
library(tidyverse)
library(Seurat)
library(SeuratData)

#载入示例数据
scRNA_harmony <- readRDS("scRNAsub.rds")

再看一下图片,我们要构建一个怎么样的数据 数据里得有什么
在我看来这个图是三个数据的体现
1.图上的点点 这需要一个数据 数据1
2.图上的中间为label的celltype需要一个数据 数据2
3.图上那些note出来的基因需要一个数据 数据3
而他们之间为什么能相互归属,是因为他们之间有相互联系

#开始作图,
#先创建数据2  先得到celltype的label的数据
#由于我们的label是celltype  所以我们要先ident为celltype
Idents(scRNA_harmony) <- "celltype"
levels(scRNA_harmony)    #查看celltype的排列顺序  后面创建的向量要与这个排列顺序对应      
data <- data.frame(x=0:6,  #这里需要根据celltype的类型多少进行改变
                   y=0,
                   label=c(
                     "Macrophages","epithelial cells","Fibroblast",
                     "T cells","Endothelial cells","B cells","Smooth muscle"))   #数据2创建完成


#创建数据1  点点代表基因 高低代表logFC的大小  所以这个表格大致就是FindAllMarkers生成的表格
marker<-FindAllMarkers(scRNA_harmony)

#再观察图片,发现点点(基因)是随机排列的,所以我们要给每一个基因弄一个随机数,好让他们随机排列
#第一步 在marker这个表格中给每一种celltype按照排序给他们定义一个数字0-....
for(i in 1:nrow(data)){
  marker[which(marker$cluster == data$label[i]),'id'] <- data$x[i]
}
marker$id=as.numeric(marker$id)
#第二步  #根据这个数字来创建随机数
marker$x=0
for (i in 0:9) {
  marker[which(marker$id == i),"x"]= i+runif(nrow(marker[which(marker$id == i),]), 
                                             min = -0.4, #为啥0.4,因为1/2=0.5
                                             max = 0.4)
}  #这样数据1就创建好了

#创建数据3  创建这个表格的目的就是显示top基因的名字
#所以是基因marker这个数据 来得到top基因的
marker$p=ifelse(marker$p_val_adj<0.01,"a","b")#设置一个p值的颜色label
top = marker %>% group_by(cluster) %>% top_n(n = 5, wt = avg_log2FC)#前5
bt= marker %>% group_by(cluster) %>% top_n(n = 5, wt = -avg_log2FC)#后5
xx=rbind(top,bt)  #这样数据3就创建好了

#数据1-marker
#数据2-data
#数据3-xx

数据已经创建好了 现在开始画图

#首先,设置颜色,该颜色的排列顺序就是下面label celltype的颜色  所以可以把这个排列顺序调成跟seurat中的celltype的颜色一样
mycol<-c("#223D6C","#D20A13","#FFD121","#088247",
         "#11AA4D","#58CDD9","#7A142C","#5D90BA",
         "#431A3D","#91612D","#6E568C","#E0367A",
         "#D8D155","#64495D","#7CC767")

#画图  先画数据1-marker  主图
p<-ggplot(data = marker, mapping = aes(x = x, 
                                       y = avg_log2FC)) + 
  geom_point(aes(colour = p),size=0.4) +
  scale_color_manual(values = c("red","black"), 
                     labels = c(paste('Adjusted P-val <',0.01),
                                paste('Adjusted P-val >=',0.01)))+
  xlab("") + ylab("average logFC") +
  geom_tile(data = data.frame(x=(0:6),
                              y=0,
                              label=(0:6)),
            aes(x=x,y=y,fill=factor(label),
                height = 0.4))+
  scale_fill_manual(values = mycol)
p

#加上数据2的label 
p2=p+geom_text(data=data ,
               aes(x=x,y=y,label=label),
               color="white")+      #改细胞名字体的颜色  想一下该字体的大小呢   #足以见系统学习gglot有多么重要
  geom_text_repel(data=xx,
                  aes(x = x, 
                      y = avg_log2FC,
                      label=gene),
                  size=3)
p2

#加上数据3的top基因
p2+theme_classic()+
  guides(fill = FALSE,size=FALSE)+
  theme(legend.position = "top",
        axis.text.x = element_blank(),
        axis.line.x = element_blank(),
        axis.ticks.x = element_blank())

马上要放五一了,如坐针毡,心早就飞了,所以来写两篇文章消耗一下时间,放假前的打算(系统的学一下ggplot),我觉得是不可能的........我........

References:跟着Cell学画图~ (qq.com)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容