それでは、今回は「【Jupyter Notebook】Matplotlibで2次元グラフを描こう【その3:ヒストグラム基礎編】」の続編として【その4:ヒストグラム応用編】として複数のグループの値を一つのヒストグラムに表示する方法と、近似曲線をヒストグラムに追加する方法を説明します。
Matplotlibの初心者の方は、Matplotlibで2次元グラフを描こう【その3:ヒストグラム基礎編】とこの記事にあるリンク先の記事に目を通していただけると、理解が早くできると思います。
複数のグループの値をヒストグラムに表示する。

それでは、有名なsklearnのトイデータセットであるアヤメの花のサイズに関するデータセットを使って、ヒストグラムに複数のグループを表示する方法を説明していきます。複数グループの表示方法は、半透明にして重ねる方法、横に並べる方法、上に積み上げる方法の3つの方法を説明します。
sklearnのトイデータセットについては、ぼくの別記事、Python sklearnのデータセット【datasets】について(その1:トイデータセット)を参照してください。
まずは、アヤメの花のサイズに関するデータセットを使って、花の萼片(がくへん)(sepal)の長さに関するヒストグラムを作成します。取り敢えずは、アヤメの品種に関しては区別せず、150個のサンプル全てに関するヒストグラムの描写を復習を兼ねて行います。


それでは簡単に上記のコードを説明します。基本的にはヒストグラムの基礎編で説明した内容を理解されていれば、問題ないはずですが、一つだけ、pandasというライブラリーからDataFrameという機能を新しく使っています。このpandasについては、まだぼくのブログでは解説していないので、ネットで調べていただきたいのですが、(すいません。)この機能は、pandasというよりは、Pythonの機能としてかなり重要ですので、ゆくゆくは記事にしたいと思っています。これでは、以下でここのコードを解説します。
- ライン1:matplotlib.pyplotをpltとして呼び込む。
- ライン2:マジックコマンドにてコードの後にブラフを表示させる。
- ライン3:グラフのスタイルを指定。(目盛線を書かせる。)
- ライン5:アヤメのデータセットを読み込む。
- ライン6:読み込んだデータセットを"s_l"に代入。
- ライン8:pandasをpdとして呼び込む。
- ライン9:pd.DataFrameクラスを使ってiris.dataをiris_dfに代入。
- ライン10:iris.dfから”sepal length (cm)"だけを取り出し、s_lに代入。
これ以降は、ヒストグラムの基礎編で解説した通りに単純にヒストグラムを描いているだけです。いかがでしょうか。それとライン15の縦線は、カーソルが写っているだけですので、無視して下さい。(ごめんなさい。)
複数のグループの値を重ねて表示する
それでは、本題の複数のグループの値を重ねて表示する方法の説明に入ります。


コードの解説は以下の通りです。
- ライン1:numpyをnpとして読み込む。
- ライン2〜11:上記の復習コードと同じ。
- ライン13:iris.dataをリストに変換しlist_typeに代入。
- ライン15:list_typeの0, 1, 2を本来のアヤメの品種名に置換。
- ライン17:ライン15で作ったlist_typeを”type”という(列の)名前をつけて列としてiris_dfに追加。
- ライン19:iris_dfの"type"列のユニークをtypesに代入。([1, 2, 3, 1, 5, 2, 3]のユニーク値は[1, 2, 3, 5])
- ライン22,23:上記の復習コードと同じ。
- ライン25:ヒストグラムの表示位置を指定。(英語のarrangeではなくarangeなのでスペル注意。)
- ライン27:tの値をアヤメの品種に変えながら3回まわす。
- ライン28:tと同じ品種のみのヒストグラくを描写。
- ライン29:ヒストグラムを描く位置(x値)指定。
- ライン30:ヒストグラムの幅指定。
- ライン31:ヒストグラムの透明度指定。(重ねても、下のヒストグラムが見えるように。)
- ライン32:変数labelにtを代入。
- ライン34:凡例を表示。
- ライン35:横軸のラベルを指定。
- ライン36:縦軸のラベルを指定。
- ライン38:表を表示。
複数のグループの値を並べて表示する
複数のグループの値を横に並べて表示する方法をご説明いたします。


それでは、コードの解説を行います。
- ライン1〜20:重ね表示のコードと同じ。
- ライン22:データセットの並びをアヤメの品種別に3つのリストに分解。
- ライン27〜31:アヤメの品種別の3つのリストをもとにヒストグラムを描写。
- ライン33〜37:重ね表示のコードと同じ。
複数のグループの値を積み上げて表示する
それでは複数のグループの値を上に積み上げて表示する方法をご説明いたします。


- ライン32:stackedパラメーターをTrueに設定。
- ライン32以外:横に並べるコードと同じ。
ヒストグラムに近似曲線を追加する



それでは近似曲線に関するコードを解説していきます。
- ライン13:花の萼片の最小ひをdfminに代入。
- ライン14:花の萼片の最大値をdfmaxに代入。
- ライン22:平均値と標準偏差をmuとsigmaに代入。
- ライン24:x値を設定。
- ライン26:y値を近似的な確率密度関数を使用して生成。
- ライン28:近似曲線を描写。
まとめ

その1から今回のその4とMatplotlibを使っての2次元グラフの描写方法を説明してきました。一応このシリーズはこれで終了にします。今後はpandasに関する説明を予定しています。
それでは、最後までお付き合いありがとうございました。さようなら。
コメント