Pycircosをの紹介
この記事は自分が開発している、pyCircosについての紹介記事である。
開発の背景
派手な円形の図って?
有名なcircos plotだろうか。chord diagramを使って作られる派手なネットワーク図である。
あと、bioinfoの領域だと、こんな感じの系統樹もよく論文とかにはでてくる。
https://yulab-smu.top/treedata-book/chapter10.html
どちらのplotもmatplotlibではない別のライブラリを用いる必要があり、このような図は、matplotlibで作れるわけがないと信じられているようである。事実、stackoverflowでは、この手の質問は明確な答えがないのにcloseされてしまっている。
https://stackoverflow.com/questions/9472070/circos-style-plots-with-matplotlib
matplotlibでpolar plot
ただ、あんまり知られていないかもしれないが、matplotlibにもpolar plot(極座標plot)の機能は存在する。が、これについてはの情報は非常に少ない。「え、公式のドキュメントにはそれなりに書いてあるんじゃないの?」って思うかもしれない。確かに、matplotlib ver3.5.0 になってから、ドキュメントは非常に洗練されたものとなり、polar plotについても必要な情報に簡単にアクセスできるようになった。例えば以下のページである。
うん。無理です。どう頑張っても無理です。こんな各methodとかの細かい仕様だけ書かれて使えるわけがない。example codeとかないのかな、と思って探してみつかるのは以下のような、非常に簡素な例だけである。
こんな例だけで、polar plotを使えるわけないだろ!。
まぁ、そもそも「極座標系は正直見ずらいし、別に直交座標系で表示すればいいじゃん」というツッコミはただしい。でもときには、大した意味はなくてもcircos plotみたいな派手な図を置いといて、なんかかっこいい論文とか申請書とか作りたい時があるわけですな。ということで、気合でライブラリを作ってみた。
使い方
- README (https://github.com/ponnhide/pyCircos)
- tutorial code (https://colab.research.google.com/drive/1xmAnv7AHWUTA2HWfjqV1lFWkFMSLJHG0?usp=sharing)
結果:(きれいなpolar plotだろ。ウソみたいだろ。matplotlibなんだぜ。)
circos plotの例
circular phylogenetic treeの例
おまけ
ライブラリは違うが、pyCircosで培った技術を使ってplasmid mapを円形表示するという、多分一握りの人にしか使い道がないツールも開発している。
https://github.com/ponnhide/plasmidviewer