单细胞: 将meta.data plot 到UMAP图上的几种方法

这里准备了一个文件,是要将这个文件中的信息plot到umap图上,文件有3列

image-20230222064141508.png

今天的目标就是:

  1. 将第一列barcode plot到umap上
  2. 将第二列clonotype id plot到UMAP上
  3. 将第三列counts plot 到umap上
  4. 用count的大小表示clonotype的大小,且每个clonotype分别用不同的颜色。

首先要有一个seurat obj, 通常情况下做了Run_UMAP,cluster,数据整合,等上游步骤。

library(Seurat)
library(ggplot2)
library(magrittr)
library(tidyr)
# 读取文件
srt_obj <- readRDS("integrated_seurat.rds")
df <- read.table("endoTCR.bc.counts.txt", header = T)
head(df)

1. 将barcode plot 到umap上

用seurat自带的DimPlot cells.highlight, 再稍微修改一下labels就行

highlighted_barcode <- df$barcode
DimPlot(srt_obj, cells.highlight = highlighted_barcode)+ 
  scale_color_manual(
    values = c("grey","red"),
    breaks = c("Unselected","Group_1"),
    labels = c("Others","Selected")
  )
image-20230222064934567.png

2. 将clonotype plot到umap上

思路是根据表格中的对应关系,把clonotype信息添加到meta.data中,这样就可以用以下两种方法:

方法1:用group.by方法画图

# 如果barcode中有重复,去重
 if (any(duplicated(df[,"barcode"]))){
   df <- df[!duplicated(df[,"barcode"]),]
 }
 # df不能有rownames
 rownames(df) <- NULL
 # 将column转换成rownames
 df <- df %>% tibble::column_to_rownames("barcode")
 srt_obj <-  AddMetaData(srt_obj, df)

 # method 1 : group.by
 DimPlot(srt_obj, group.by = "clonotype_ID")</pre>
image-20230222065245834.png

这个图的缺点是,图上有颜色的点和灰色的点大小都是一样的,没有体现highlight功能。那么就可以采用下面的方法2

方法2:ggplot2

思路是将数据提出来,把灰色的点和需要highlight的点也单独提取出来,这样就有两份数据,把两份数据用图层的方式分别画在umap上。

data <- FetchData(srt_obj, vars = c("UMAP_1","UMAP_2","clonotype_ID"))
data$plot <- ifelse(is.na(data$clonotype_ID),"others", data$clonotype_ID)

data_grey <- data %>% subset(plot == "others")
data_selected = data %>% subset(plot != "others")

ggplot(data_grey, aes(UMAP_1,UMAP_2)) +
  geom_point(color="grey",size=0.5) + 
  geom_point(data = data_selected,aes(UMAP_1,UMAP_2,color=clonotype_ID),
             size = 2) + theme_classic() +
  theme(
    legend.title = element_blank()
  )
image-20230222070636012.png

3. 将数值型的数据plot到umap上:

用count的大小表示clonotype的大小,且每个clonotype分别用不同的颜色。

data <- FetchData(srt_obj, vars = c("UMAP_1","UMAP_2","clonotype_ID", "counts"))
data_list <- split(data, is.na(data$clonotype_ID))
head(data_list$`TRUE`)
ggplot(data_list$`TRUE`, aes(UMAP_1,UMAP_2)) +
  geom_point(color="grey",size=0.5) + 
  geom_point(data = data_list$`FALSE`,
        aes(UMAP_1,UMAP_2,color=clonotype_ID),
        size=log(data_list$`FALSE`$counts)) + 
  theme_classic() +
  theme(
    legend.title = element_blank()
  )

需要注意的是,size需要用log处理一下,不然会很大。

image-20230222071903526.png

进阶方法:按样本拆分后画图

数据本身是多个样本的整合,我们可以通过“orig.ident”来识别样本,

上文提到的将barcode plot 到umap上用cells.highlight方法,只需要split.by参数即可:

DimPlot(srt_obj, cells.highlight = highlighted_barcode, 
        split.by = "orig.ident") +
  scale_color_manual(
          values = c("grey","red"),
          breaks = c("Unselected","Group_1"),
          labels = c("Others","Selected")
        )
image-20230222072549265.png

那么用ggplot2来做思路也是一样的,就是要拆分成不同的样本,再拆分成不同的数据。

data <- FetchData(srt_obj, vars = c("UMAP_1","UMAP_2",
                                    "orig.ident","clonotype_ID", "counts"))
head(data)
df_list <- split(data, data$orig.ident)
plot_list <- lapply(seq_along(df_list), function(i){
  name = names(df_list[i])
  x <- df_list[[i]]
  data_list <- split(x, is.na(x$clonotype_ID))
  ggplot(data_list$`TRUE`, aes(UMAP_1,UMAP_2))+ 
    geom_point(size=0.5,color="grey")+
    geom_point(data = data_list$`FALSE`, aes(UMAP_1,UMAP_2,color=clonotype_ID),
               size=log(data_list$`FALSE`$counts))+
    theme_classic() +
    theme(
      legend.title = element_blank()
    ) + ggtitle(name) +theme(
      plot.title = element_text(hjust=0.5)
    )
    
})
# 组合起来
combine_plot <- Reduce(`+`, plot_list)
combine_plot
image-20230222074204612.png

如果这段代码看起来吃力,请看我解释的视频 单细胞: (https://www.bilibili.com/video/BV1jT411S7v3/)

关注我,下一篇带你看看数值型的数据,其实还可以用另一种进阶画法(CNS常见)

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

推荐阅读更多精彩内容