單細(xì)胞: 將meta.data plot 到UMAP圖上的幾種方法

這里準(zhǔn)備了一個(gè)文件,是要將這個(gè)文件中的信息plot到umap圖上,文件有3列

image-20230222064141508.png

今天的目標(biāo)就是:

  1. 將第一列barcode plot到umap上
  2. 將第二列clonotype id plot到UMAP上
  3. 將第三列counts plot 到umap上
  4. 用count的大小表示clonotype的大小,且每個(gè)clonotype分別用不同的顏色。

首先要有一個(gè)seurat obj, 通常情況下做了Run_UMAP,cluster,數(shù)據(jù)整合,等上游步驟。

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上

思路是根據(jù)表格中的對(duì)應(yīng)關(guān)系,把clonotype信息添加到meta.data中,這樣就可以用以下兩種方法:

方法1:用group.by方法畫(huà)圖

# 如果barcode中有重復(fù),去重
 if (any(duplicated(df[,"barcode"]))){
   df <- df[!duplicated(df[,"barcode"]),]
 }
 # df不能有rownames
 rownames(df) <- NULL
 # 將column轉(zhuǎn)換成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

這個(gè)圖的缺點(diǎn)是,圖上有顏色的點(diǎn)和灰色的點(diǎn)大小都是一樣的,沒(méi)有體現(xiàn)highlight功能。那么就可以采用下面的方法2

方法2:ggplot2

思路是將數(shù)據(jù)提出來(lái),把灰色的點(diǎn)和需要highlight的點(diǎn)也單獨(dú)提取出來(lái),這樣就有兩份數(shù)據(jù),把兩份數(shù)據(jù)用圖層的方式分別畫(huà)在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. 將數(shù)值型的數(shù)據(jù)plot到umap上:

用count的大小表示clonotype的大小,且每個(gè)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處理一下,不然會(huì)很大。

image-20230222071903526.png

進(jìn)階方法:按樣本拆分后畫(huà)圖

數(shù)據(jù)本身是多個(gè)樣本的整合,我們可以通過(guò)“orig.ident”來(lái)識(shí)別樣本,

上文提到的將barcode plot 到umap上用cells.highlight方法,只需要split.by參數(shù)即可:

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來(lái)做思路也是一樣的,就是要拆分成不同的樣本,再拆分成不同的數(shù)據(jù)。

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)
    )
    
})
# 組合起來(lái)
combine_plot <- Reduce(`+`, plot_list)
combine_plot
image-20230222074204612.png

如果這段代碼看起來(lái)吃力,請(qǐng)看我解釋的視頻 單細(xì)胞: (https://www.bilibili.com/video/BV1jT411S7v3/)

關(guān)注我,下一篇帶你看看數(shù)值型的數(shù)據(jù),其實(shí)還可以用另一種進(jìn)階畫(huà)法(CNS常見(jiàn))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容