エイエイレトリック

なぐりがき

Pythonでヒストグラムを描く方法まとめ

文字数などの数値の分布をみたいときにヒストグラムをよく使うのですが、 Matplotlib・Seaborn・Plotlyの関数名・引数の互換性がないため *1 何度もググってしまい時間を浪費しがちでした。

そこでpythonの可視化モジュールでのヒストグラムを描き方を調べてまとめたjupyter notebookを作成し、gistにアップロードしました。

少し重いですが、下記に埋め込みしておきます。

また、Plotlyはjupyter notebookに埋め込めないので、出力結果がみれるようにhtmlに変換したものをgithub pagesにアップロードしています。→ https://shihono.github.io/pages/python_histgram.html

(アップロードしてからSeabornの箇所のミスを発見して、gistの方は修正したので、基本的にgistを参考にしてください。。)

gist.github.com

個人的な結論

手軽にヒストグラムをみたいときは、Pandasから df.hist()df.plot.hist() を使うのが一番。

Seaborn表示の方がシャレオツなので、設定を読み込んで(sns.set())からPandasのプロットを実行すると簡単にそれっぽくなります。*2

f:id:sh111h:20200412163851p:plain
ちょいダサデフォルト

f:id:sh111h:20200412163911p:plain
シャレオツSeaborn

また、実際にbinごとの数値を見たいときはDataFrameを直接渡せるPlotly-expressを使う (px.histogram() ) のが良いかなと思います。

Plotly-expressだと細かい表示を変更できないので、こだわる場合は必然的にPlotlyを使う羽目になります。 (個人的にPlotlyの書き方は結構面倒なので) Plotly-expressの今後のアップデートに期待です。

*1:例えば透明度は Matplotlib系はalphaだが、Plotlyはopacity

*2:Seabornにもいくつかテーマが用意されている。詳細は https://seaborn.pydata.org/tutorial/aesthetics.html