こちらを読むと
- Pythonのグラフライブラリmatplotlibで複数のグラフを描画する方法が分かります。
- 記事の所要時間は10分です。
記事を書いたきっかけ
Pythonのmatplotlibは、データのグラフを描画するのに便利なのですが、コーディングに少しクセがあり、なかなか覚えられずにいました。
そのため都度調べながら使っていたのですが、描画が思った通りにいかないことが多々あり、トラブルシュートに時間がかかるため、理解したことを残そうと思った次第です。
今回はよく使うけれどもクセがある、複数グラフの描画について書きます。
複数グラフの枠を表示
基本ですが、まずはmatplotlib.pyplotのインポートです。
1 |
import matplotlib.pyplot as plt |
次に、subplots関数を呼び出します。これで、複数グラフ描画の”枠”ができます。
1 |
fig, (ax1, ax2, ax3, ax4) = plt.subplots(4, 1, figsize=(8, 10)) |
subplots関数で複数のグラフを表示できます。この関数を実行しただけだと、グラフの枠のみが表示されるので、中身はこの後で入れていくのです。
subplotsの第1引数と第2引数の4, 1は、縦に4つ、横に1つのグラフを作ることを表します。引数figsize=(8, 8)は、グラフ全体のサイズをインチ単位で指定しています。
グラフの中身を表示
次は実際にグラフの中身を入れていきます。
先ほどのプログラムに、以下を追加します。
1 2 3 4 5 6 7 8 9 10 11 |
# dfにグラフ描画するデータが読み込まれているとします。 # histメソッドでヒストグラムを描画。'ax1'で1つ目のグラフを指定。 df['n_tokens_content'].hist(ax=ax1, bins=100) # グラフの目盛りのサイズを14に指定。 ax1.tick_params(labelsize=14) # グラフのx軸ラベルを指定。 ax1.set_xlabel('Article word count', fontsize=14) # グラフのy軸ラベルを指定。 ax1.set_ylabel('Number of articles', fontsize=14) |
すると、1つ目のグラフ(ax1)に描画されます。
同様に、ax2~ax4に描画していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
df['minmax'].hist(ax=ax2, bins=100) ax2.tick_params(labelsize=14) ax2.set_xlabel('Min-max scaled word count', fontsize=14) ax2.set_ylabel('Number of articles', fontsize=14) df['standardized'].hist(ax=ax3, bins=100) ax3.tick_params(labelsize=14) ax3.set_xlabel('Standardized word count', fontsize=14) ax3.set_ylabel('Number of articles', fontsize=14) df['l2_normalized'].hist(ax=ax4, bins=100) ax4.tick_params(labelsize=14) ax4.set_xlabel('L2-normalized word count', fontsize=14) ax4.set_ylabel('Number of articles', fontsize=14) |
グラフ間隔の調整
複数のグラフ間隔が狭いので、subplots_adjustメソッドで調整します。
1 2 |
# 余白を設定 plt.subplots_adjust(wspace=0.0, hspace=0.6) |
最終的にこのようになりました。
まとめ
- matplotlibで複数のグラフを描画する方法が分かりました。
matplotlibは少しクセがあるのですが、一度使い方をしっかり学んでおけば、データ分析が速くなりそうですね!
Reference
機械学習のための特徴量エンジニアリング ―その原理とPythonによる実践