美文网首页
tidyverse|创建数据框并绘制出4维的点图

tidyverse|创建数据框并绘制出4维的点图

作者: 新欣enjoy | 来源:发表于2020-07-24 15:54 被阅读0次

目标图

scanpy dotplot

最终实现过程

目的:得到一个数据框,第一列为cluster类型,第二列为基因,后面两列为该基因在该cluster的计算值。
思路

  • 第一步,获得初始数据框,行为cluster类别,列为基因,值为其表达量,注意有大量为0.
  • 第二步,分两步对该数据框进行分组汇总,分别计算某一基因在某一特定cluster中的平均表达量,不包括0;再计算在该cluster中,有多少个细胞表达了该基因。
  • 第三步,将以上两个数据框进行轴转换,得到一个nx3列数据框,前两列分别为cluster 类别和基因名,最后一列为对应值。
  • 第四步,将以上两个数据框进行合并,得到最终的数据框。
  • 第五步,根据该数据框,进行点图绘制,设置点的大小和点的颜色。

实现代码

count_n_cell_per_gene <- function(x){
    return(sum(x>0))
}

mean_exp_per_gene <- function(x){
    n_cell <- sum(x>0)
    return(sum(x)/n_cell)
}

dotPlot <- function(df){
    df_sum_exp <- group_by(df,ident) %>% summarise_each(funs(sum))
    df_n_cell <- group_by(df,ident) %>% summarise_each(funs(count_n_cell_per_gene)) %>% 
    pivot_longer(cols = -ident, names_to = "features",values_to = "n_cells_gene")
    df_mean_exp <- group_by(df,ident) %>% summarise_each(funs(mean_exp_per_gene)) %>% 
    pivot_longer(cols = -ident, names_to = "features",values_to = "mean_exp_gene")
    df_mean_exp[is.na(df_mean_exp)] <- 0

    df_sum <- merge(df_mean_exp,df_n_cell,by = c("ident","features"))

    p <- ggplot(df_sum,aes(x = ident,y = features)) + 
        geom_point(aes(size = n_cells_gene, color = mean_exp_gene)) +
        scale_color_gradient(low = "#FFFFFF",high = "#990000") +
        labs(x = '',y = '',color = "mean exp per gene", size = "numbers of cells")+
        theme_classic()
    return(p)
}
最终效果图

小结

一开始,尝试直接用初始数据框获得size,和color 的数值,应该是不行的(至少现在没想通)。回顾看来,其实实现的关键是,依次根据分组得到相应计算值,然后进行轴转换,最后合并得到最终数据框。所以,绘图展示,也是需要前期的数据清洗和整理!整个过程也是各个函数的综合运用了,尤其是tidyverse包!

相关文章

网友评论

      本文标题:tidyverse|创建数据框并绘制出4维的点图

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