この記事の目的/概要
上記の記事で、Pandasのplotの簡単なまとめをしました。見栄えの工夫やより高度な可視化にはいろいろ探求の道があると思いますが、私の場合、見栄えよりも次に必要になったのは、折れ線グラフ版、棒グラフ版などといった複数グラフバリエーションを一枚画像への配置したいということでした。
例えば次のようなものです。
一枚画像への配置なんて、必要ならそれぞれのグラフをコピペしたりすれば良いのでは?、少なくともPandasのplotの学習の中で後回しで良さそう...なんですが、個人的には違いました。
実際に高度かプリミティブか、派手か地味かはともかく、グラフによる可視化は、同じ可視化でもフェーズによって多少位置付けが異なるのではないでしょうか。
実のところ私の場合は、EDAの高尚なことには関わっていない(苦笑)ので、手軽に1ができれば良いということが一番多く、複数グラフへの一枚画像への簡単にプロットする方法が必要(世間の人もそうなのでは?)と思って、せっかくなので、先の記事の続編としてこの記事をまとめました。
Pandas.DataFrame.plotでの複数グラフまとめて表示
...と前置きが長いですが、簡単にいうと
- matplotlib.pyplot.plt のsubplots関数を使う
- matplotlib.plyplotにおける、Figure、Axesの概念
- plot関数のaxパラメータを指定
あたりがポイントになっており、深い理解や使いこなしはともかく、一旦これらのポイントをうっすら意識して次を写経いただければ、複数グラフを1枚画像にまとめて表示できます。
コード例を見てもらう方が早いので、Pythonプログラムの具体例です。
import pandas as pd import matplotlib.pyplot as plt import io # 可視化には必要ないが、この例を簡潔にしめすため、StringIOを利用 pesedo_csv = io.StringIO(""" val1,val2,str 4,25,あああ 5,20,いいい 6,15,ううう 7,10,えええ 8,5,おおお """ ) df = pd.read_csv(pesedo_csv) _, axes = plt.subplots(4, 3,figsize=(20,15)) # 論理サイズ縦20 x 横15のマンションに、縦4 x 横3枠の部屋を確保 df.plot.line(ax=axes[3, 1]) plt.show()
これで、次のグラフが表示されます。
解説
subplots関数は、グラフの描画領域を確保していると理解すれば良いでしょう。
おおよそ次のように理解すれば良いと思います。
ここで、axesは、Numpyのndarrayらしいのですが、それはひとまずおいておいて、確保したグラフ領域の表示したい番地を「 [3,1] 」などのように指定できると理解しておけば、とりあえずも目的は果たせそうです。
また、番地自体は、plot関数のaxキーワード引数に渡してやれば、plot関数がよろしくやってくれるので、df.plot(kind='line', ax=axes[3,1])などとしてやれば良いでしょう。
この関係のイメージは次の図のようになります。
以上です。
ちょっとだけ続きあり↓