23
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

matplotlibのsubplotはもうやめたい その2

Last updated at Posted at 2021-11-17

Matplotlibのsubplotが使いにく過ぎて、はるか昔にこんな記事を書いた。https://qiita.com/ponnhide/items/fb375a610e4a9c0f743a
今回はその記事の続きで、subplot用の新しいツールをつくってみたという話。

Matplotlibのsubplotは使いにくい

正直言って、Matplotlibのsubplotは依然として使いにくい。僕はmatplotlibの自由度の高さが好きで、どれだけggplotを布教されてもmatplotlibを使い続けているのだけど、subplot周りの実装は真面目に微妙だと思う。そして、この点は他の人からも指摘がなされ、改善が求められている。

これらの要望に対する返しとして、最近matplotlibはある機能を実装してくれた。それが subplot_mosaic である。実際、これは素晴らしい機能なので興味を持った人はlinkからdocumentを読んでみてほしい。grid_specよりは断然つかいやすいはずだ。しかし、結局のところgrid_specを使いやすくしてくれただけで、subplotの根本的な使いにくさは依然として何も解決されていない。。。。

matplotlibのsubplotの使いにくさ、それは、「複数グラフのレイアウト最初に決めなければならないところ」 だ。そして残念なことに、matplotlibの開発者達はこの問題に気付いていないように思う。。。。だから、先のdocumentにも以下の様なことを書いてしまうのだ。

This interface naturally supports naming your axes. Figure.subplot_mosaic returns a dictionary keyed on the labels used to layout the Figure. By returning data structures with names, it is easier to write plotting code that is independent of the Figure layout.
This is inspired by a proposed MEP and the patchwork library for R.

これ書いた人、patchwork使ったことないのかな。。。。ggplotのライブラリであるpatchworkcowplotの良いところはFigureのレイアウトを簡単に定義できるところではなくて、個別のグラフを作った後に、レイアウトを自由に決められるところなのに、、、
せっかくJupyter notebookを使ってinteractiveな解析ができるのに、何が楽しくして、最初にFigureのレイアウトを決めるなんていう縛りプレイをさせられなきゃならないんだ?。もし、個別のグラフを作ったあとにレイアウト変えたいなって思ったらどうすんだし!!!。最初からやり直すのか?。 Jupyter上で色々なレイアウトを逐次的に試せたほうが良くない?

ということで、matplotlibのためのpatchworkっぽいツール、patchworklibを作ってみた。4年前の記事で紹介したものよりは遥かに実用的なものになったように思う。

patchworklib

以下のような感じ図のが簡単に作れるようになっているはず。。。
download.png

インストール

installは
git clone https://github.com/ponnhide/patchworklib.git
でgithubのレポジトリをクローンしてもらって、
python setup.py install
できるず。

使い方

利用法は至ってシンプル。matplotlibのmatplotlib.axes.Axes classのsubclassとして実装されたBrick classのobjectを'|''/'演算子でくっつけてやれば、簡単に様々なレイアウトを試すことができる。
当然、matplotlib.axes.Axes classで使えるmethodは全て使うことができる。また、より柔軟なレイアウトを可能にするためにグラフの大きさ (厳密にはアスペクト比) を変更する change_aspectratio() と legendの位置を後から変更できる move_legend() が Brick classの固有のmethodとして実装されている。
詳細な使い方は後日に追記予定。 こちらの記事を見てください-> https://qiita.com/ponnhide/items/e288a46f4ee669c25a02
一応、以下のjupyter notebookの中のExample codesを見てもらえれば使い方は分かるようになっていると思う。

以下のGoogle colabのlinkから実際に実行して試してみることも可能。

23
22
2

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
23
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?