查看原文
其他

生信工程师的自我修养

Editor's Note

乐于分享,利用自己的技能带给自己和别人一点点便利,是每一个生信工程师自我修养的一部分

The following article is from seqyuan Author ahworld

To be or not to be,这么着还是那么着,这是莎士比亚的问题呀!等我们开始做单细胞生信分析,To be or not to be,又变成了大家伙儿的问题了,当下最火的技术嘛!

像我这么个好人,可以这么着也可以那么着,这 “To be or not to be”,什么时候儿?它又变成了我自个儿的问题了呢?

咱们这故事啊,得从《僵小鱼的故事》开始说起,她遇见了个顶大的麻烦,在微信群找人帮忙,哎还真有人支招给帮成了,那么这件事和我有什么关系?我是谁呀?我就是讲述僵小鱼的故事,并成为故事一部分的一名普通生信工程师。

在“僵小鱼的故事”开头我们说道:“许多年之后,面对同一个作图需求,僵小鱼将会回想起,在微信群里提出相同问题的那个遥远的上午”。

时间过的并不慢,回想也没有等到很多年之后才来,就在我写完“僵小鱼的故事”第二天,在同一个微信群又有朋友提出了同一类的问题:单细胞marker基因小提琴图横着堆叠在一起的图有没有现成的代码可以实现?

人们给出了和僵小鱼问的问题一样的建议:AI(Adobe Illustrator);我拿出了前一天刚写好的僵小鱼的故事初版给那位群友看。出人意料的是群里众人的目光投向了我的写作文风以及我的博客[1]屈指可数的文章数,那位朋友问题的话题就这样被忽略了。

最终那位朋友做了和僵小鱼一样的选择:AI

虽然我没有帮到他,但是有一点我可以更肯定,僵小鱼看到群里的消息一定会像“僵小鱼的故事”开头写的那样:

许多年之后,面对同一个作图需求,僵小鱼将会回想起,在微信群里提出相同问题的那个遥远的上午

而我则想起了在“僵小鱼的故事”中一个未了的心愿,一个吹过的牛皮:

于是查看了scanpy的源代码,发现是一个叫stacked_violin的函数调用的seaborn.violinplot实现的这个小提琴图,那我就copy一下这个函数,修改一些设置,让它默认出来就是XY转制的小提琴图不就行了。转念又一想还是不浪费时间了。

回头再来看,故事是好故事,解决了:

seurat[2]对象到scanpy[3]对象的转换问题,可以应用scanpy丰富的画图函数对seurat的结果画图

但是scanpy中却没有方法能直接能产出僵小鱼和那位朋友需要的图,而我用图片旋转的解决方法,实现过程不够优雅,最终效果与原图相比也有些差距。

所以“To be or not to be”它变成了我自个儿的问题,我得把这个事弄圆了。

我先从scanpy源码中找到画堆叠小提琴图的函数stacked_violin,然后拷贝出来重构,命名为stacked_violin_t。


最后做成一个python包 命名为scanyuan[4],上传到github和PYPI,可以用 pip install scanyuan安装这个包。

下面所谓现成的代码就是:读入数据,并用scanyuan中的stacked_violin_t方法实现文章堆叠小提琴图

import scanpy as scimport scanyuan as scy
# 此处示例为读取loom文件,也可以是其他scanpy支持的数据格式adata = sc.read_loom("/Users/yuanzan/Desktop/tmp/sdata.loom", sparse=True, cleanup=False, X_name='spliced', obs_names='CellID', var_names='Gene', dtype='float32')marker_genes = ['Stfa1', 'Ngp', 'Ccl5', 'Ccl4', 'BC100530', 'Gzma', 'Gata2', 'Cd74']
ax = scy.stacked_violin_t(adata, marker_genes, figsize=[8,4], groupby='ClusterName')

以下两张图是最终成图的效果展示

这篇文章其实早已写就,故事到这里也本该就结束了,但是在僵小鱼的故事文章发出之后,有一位朋友留言说他开发了一个R包MySeuratWrappers[5]实现了我们这次这介绍的scanyuan同样的功能。

殊途同归,能遇到同道是我们的幸运。我想,乐于分享,利用自己的技能带给自己和别人一点点便利,是每一个生信工程师自我修养的一部分。

References

[1] 我的博客: www.seqyuan.com
[2] seurat: https://satijalab.org/seurat/
[3] scanpy: https://scanpy-tutorials.readthedocs.io/en/latest/pbmc3k.html
[4] scanyuan: https://github.com/seqyuan/scanyuan
[5] MySeuratWrappers: https://github.com/lyc-1995/MySeuratWrappers


相关阅读

僵小鱼的故事

打造轮子上传到PYPI


往期回顾

如果你的单细胞转录组数据处理困难 给了你一大波代码仍然是bugs频现,考虑一下,是不是该先打基础?

单细胞测序基础知识

头颈癌免疫状况研究

不同批次矫正方法的比较分析

你想了解的国家自然基金单细胞项目统计分析

单细胞项目有哪些--2019

单细胞项目有哪些--2018

单细胞项目有哪些 — 2017

单细胞项目有哪些






如果你对单细胞转录组研究感兴趣,但又不知道如何入门,也许你可以关注一下下面的课程



看完记得顺手点个“在看”哦!


生物 | 单细胞 | 转录组丨资料每天都精彩

长按扫码可关注


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存