LoginSignup
20
14

More than 1 year has passed since last update.

matplotlibで派手な円形の図を作るライブラリを開発してみた。

Last updated at Posted at 2022-04-10

Pycircosをの紹介

この記事は自分が開発している、pyCircosについての紹介記事である。

開発の背景

派手な円形の図って?

有名なcircos plotだろうか。chord diagramを使って作られる派手なネットワーク図である。

http://circos.ca/
circos-sample-panel.png

あと、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みたいな派手な図を置いといて、なんかかっこいい論文とか申請書とか作りたい時があるわけですな。ということで、気合でライブラリを作ってみた。

使い方

結果:(きれいなpolar plotだろ。ウソみたいだろ。matplotlibなんだぜ。)

circos plotの例

circular phylogenetic treeの例

おまけ

ライブラリは違うが、pyCircosで培った技術を使ってplasmid mapを円形表示するという、多分一握りの人にしか使い道がないツールも開発している。
https://github.com/ponnhide/plasmidviewer

これを使うと、こんな感じの図が作れる。apeとかで手作業でプラスミドマップの図を作ってる人がいたら使ってみてほしい。

20
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
14