の続きといいますか、「別紙」です。
先の記事では、matplotlib.pyplot.subplotsで複数グラフを一枚におさめる例を紹介しました。
しかし、ものぐさな私は、pandas.DataFrame.plotのaxパラメータにいちいち番地を指定するのはめんどくさいという気持ちになります。
よって、次のような関数というかオレオレscaffoldを定義して、グラフ描画で遊んでいます。
import pandas as pd import matplotlib.pyplot as plt # 複数グラフの枠を指定 _, axes = plt.subplots(4, 3,figsize=(20,15)) # 論理サイズ縦20 x 横15のマンションに、縦4 x 横3枠の部屋を確保 # デコレーター def auto_ax(f): from functools import wraps # pandas.DataFrame.plot用には必要ないが、グラフ描画のちょいDSLを定義するためのデコレータに利用 import numpy as np cnt = 0 @wraps(f) def _(*args, **kwargs): nonlocal cnt f(*args, ax=axes.reshape(-1)[cnt], **kwargs) cnt = cnt + 1 return cnt # cntをreturnすることはグラフを描画する上では必須ではない。 return _ # plot関数のオレオレラッパー @auto_ax def myplot(df, kind, **kwargs): if kind : banchi_tsuuban = df.plot(kind=kind, **kwargs) # EDAで遊ぶ部分 ------------ df = pd.read_csv('iris.csv').head(10) # irisのデータ myplot(df,'line') myplot(df,'line',secondary_y=['SepalWidth']) myplot(df,'bar') myplot(df,'area') myplot(df,'') myplot(df,'bar', stacked=True) myplot(df,'box') myplot(df,'kde') myplot(df,'scatter',x='SepalLength', y='SepalWidth') myplot(df,'hist') plt.show() # ------------
irisのcsvファイルが必要ですが、それさえあれば、上記のコピペでこんなグラフが表示されます。