【问题标题】:alluvial plot not showing flux冲积地块未显示通量
【发布时间】:2022-12-19 20:56:55
【问题描述】:

我想创建一个冲积层图,显示两种条件之间的细胞通量。我正在使用来自元数据 seurat 对象的数据。

我的数据:

 meta= data.frame(cell= rownames(seurat@meta.data), geno= seurat$genotype, cluster= seurat$seurat_cluster, num= 1:length(rownames(seurat@meta.data)))


head(meta)
                                                   cell  geno cluster num
KO_d8_r1_AAACAGCCAACCCTAA-1 KO_d8_r1_AAACAGCCAACCCTAA-1 KO_d8       6   1
KO_d8_r1_AAACAGCCAGGAACAT-1 KO_d8_r1_AAACAGCCAGGAACAT-1 KO_d8       1   2
KO_d8_r1_AAACAGCCATGTTGCA-1 KO_d8_r1_AAACAGCCATGTTGCA-1 KO_d8       1   3
KO_d8_r1_AAACATGCATAGCGGA-1 KO_d8_r1_AAACATGCATAGCGGA-1 KO_d8       1   4
KO_d8_r1_AAACCAACATGGCCTG-1 KO_d8_r1_AAACCAACATGGCCTG-1 KO_d8       3   5
KO_d8_r1_AAACCGAAGGGCTTAT-1 KO_d8_r1_AAACCGAAGGGCTTAT-1 KO_d8       5   6
 
tail(meta)
                                                       cell  geno cluster  num
    WT_d8_r2_TTTGTCCCAATCCCTT-1 WT_d8_r2_TTTGTCCCAATCCCTT-1 WT_d8       4 6598
    WT_d8_r2_TTTGTCTAGGATCACT-1 WT_d8_r2_TTTGTCTAGGATCACT-1 WT_d8       5 6599
    WT_d8_r2_TTTGTGAAGTTAGAGG-1 WT_d8_r2_TTTGTGAAGTTAGAGG-1 WT_d8       1 6600
    WT_d8_r2_TTTGTGGCACAACCTA-1 WT_d8_r2_TTTGTGGCACAACCTA-1 WT_d8       6 6601
    WT_d8_r2_TTTGTGTTCCTTGAGG-1 WT_d8_r2_TTTGTGTTCCTTGAGG-1 WT_d8       0 6602
    WT_d8_r2_TTTGTTGGTAGCCTAA-1 WT_d8_r2_TTTGTTGGTAGCCTAA-1 WT_d8       4 6603

我的代码:

ggplot(meta,
       aes(x = geno, stratum = cluster, alluvium = num, y = cluster,
           fill = num, label = cluster)) +
  scale_x_discrete(expand = c(.1, 0)) +
  geom_flow(width = 1/4) +
  geom_stratum(alpha = .5, width = 1/4) +
  geom_text(stat = "stratum", size = 4) +
  theme(legend.position = "none") +
  ggtitle("flux of cells")

我的输出:

但是,如您所见,冲积地块并未显示细胞的通量。有什么建议么?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    介绍

    我认为您面临的问题更多是关于如何定义 alluvium 参数。该参数应该与左右层之间的信息流有关。因此,它应该为每一行数据定义冲积层类别。 例如,一个类别可能是“KO_d8”中的集群 0 和“WT_d8”中的集群 1 之间的冲积(流)。这里好像num列(用来定义冲积层)并不代表冲积层。

    在表示的数据中,我看不到两个层之间的联系是什么,即属于“KO_d8”基因型和“WT_d8”基因型的线(或细胞;))有什么关联。

    知道这一点,只能有两种情况:

    1. “KO_d8”中的单元格与“WT_d8”中的单元格之间确实存在链接
    2. “KO_d8”中的单元格与“WT_d8”中的单元格之间没有链接

      案例一:

      在这种情况下,您必须找到定义两个类别中单元格之间链接的列。然后,您可以复制长形冲积层,如 ggalluvial vignette (link) 中所述。

      案例二:

      在那种情况下,我想您只想可视化集群的内部比例在两个层条件下如何变化。

      在这里,冲积层仅将层“KO_d8”中的集群 n°x 链接到层“WT_d8”中的同一集群 n°x。对于 x,范围从 013

      为此,您需要以正确的格式处理数据。

      # Count the number of cells per `geno`
      geno.smry <- table(meta$geno)
      
      # Get the number of cells per `cluster` and per `geno`
      meta.2.plot <- meta %>% 
        dplyr::group_by(cluster, geno) %>%
        summarise(n_cells = n())
      
      # Get the fraction of cells per `cluster` for each `geno`
      meta.2.plot$n_cells_tot_per_geno <- as.numeric(geno.smry[meta.2.plot$geno])
      meta.2.plot$fraction_cells <- meta.2.plot$n_cells / meta.2.plot$n_cells_per_geno
      

      这样您就可以将冲积层绘制为:

      # Plot the alluvial
      ggplot(meta.2.plot,
             aes(x = geno, y = fraction_cells,
                 stratum = cluster, alluvium = cluster,
                 fill = cluster, label = cluster)) +
        scale_x_discrete(expand = c(.1, 0)) +
        geom_flow(width = 1/4) +
        geom_stratum(alpha = .5, width = 1/4) +
        geom_text(stat = "stratum", size = 4) +
        theme(legend.position = "none") +
        ggtitle("flux of cells")
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 2021-12-28
      • 2021-07-10
      • 2020-06-10
      • 2022-11-16
      • 1970-01-01
      • 2018-06-11
      相关资源
      最近更新 更多