美文网首页单细胞测序生信笔记
单细胞: 将meta.data plot 到UMAP图上的几种方

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

作者: 11的雾 | 来源:发表于2023-02-21 18:01 被阅读0次

    这里准备了一个文件,是要将这个文件中的信息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常见)

    相关文章

      网友评论

        本文标题:单细胞: 将meta.data plot 到UMAP图上的几种方

        本文链接:https://www.haomeiwen.com/subject/buxokdtx.html