今回は、Pythonで棒グラフを描く方法を紹介していきます。
色々とカスタマイズできるので、そういった方法も併せて紹介していきます。
使用するライブラリ
棒グラフの描画には、”matplotlib”というライブラリを用います。
“matplotlib”はグラフ描画用ライブラリで、多彩なグラフを描画することができます。
matplotlibのインストール
matplotlibはcondaまたはpipを使ってインストールできます。
conda install matplotlib
pip install matplotlib
参考にどうぞ
棒グラフを描く
それでは、早速棒グラフを描いていきましょう。
今回使用するデータは、アヤメのデータセットです。
from sklearn.datasets import load_iris
data = load_iris()
name = pd.DataFrame(data.target).rename(columns={0:"name"})
df = pd.DataFrame(data.data, columns=data.feature_names).merge(name, left_index=True, right_index=True)
今回は分類できるように、”name”列を追加しています。
まずは棒グラフを描くだけ
まずはシンプルに棒グラフを描いてみましょう。
各列の平均値を比較する棒グラフを描きます。
棒グラフの描画には”plt.bar()”を用います。第一引数に横軸の値(ラベル)を、第二引数に縦軸の値を指定します。
import matplotlib.pyplot as plt
plt.bar(df.columns, df.mean())
たったこれだけで、棒グラフを描くことができます。しかし、見てのとおり、きれいなグラフとは言えませんよね。
そこでもう少し手を加えて、カスタマイズしていきましょう。
横軸ラベルを回転させる
デフォルトのままでは、横軸のラベルが被ってしまって見づらいです。
そこで、ラベルを回転させて、見やすくします。
plt.xticks(rotation=45)
この場合、45°回転させる設定になっています。任意の数値にすることで、角度をアレンジすることができます。
縦軸のラベルを付ける
縦軸がどういう値(単位)なのかがわかるように、軸ラベルをつけます。
plt.ylabel("value")
横向きの棒グラフを描画する
横向きの棒グラフを描画するときは、”barh()”を使います。
plt.barh(df.columns, df.mean())
複数の棒グラフを横に並べる
複数のグループでの差を見せたいときに、グラフを横に並べたい場合があります。
この例を紹介するために、データ(df)を”name”列の値ごとに分けます。(df0は作ったものの使っていません^^;)
df0 = df[df["name"] == 0]
df1 = df[df["name"] == 1]
df2 = df[df["name"] == 2]
少しややこしいので、とりあえず描いてみます。
import numpy as np
x = np.arange(len(df.columns))
width = 0.3
plt.bar(x, df1.mean(), width=width)
plt.bar(x + width, df2.mean(), width=width)
plt.xticks(x + width/2, df.columns, rotation=45)
いきなり複雑そうで「???」となった方もいるのではないでしょうか。描画の原理を説明すると、1つ目のグラフからいい感じに横にずらして2つ目のグラフを描いているといった感じです。
順に解説していきます。
横軸にはnumpy配列を使う
横軸(x)にはnumpy配列を使用します。この配列の中身は
[0,1 ,2, 3, 4]というようになっており、表示するデータの種類の数だけ要素数があります。numpy配列を使用するのは、グラフを横にずらすときに計算がしやすいからです。
グラフの幅を調節する
widthは棒の幅です。上記のように2本並んだ棒では0.3で転用できると思いますが、3つ以上並べる場合には試しながら調整する必要があります。
2つのグラフをずらして描画する
1つ目のグラフではdf1のデータを描画します。そして2つ目のグラフでdf2のデータを描画します。注目すべきは2つ目のグラフ描画です。
第一引数が x + width となっていますが、ここがポイントです。widthは棒の幅なので、棒の幅だけ横にずらすように指定しているのです。これによって、2つ並べたグラフを描画することができます。
横軸ラベルを2つのグラフの中心に置く
最後は横軸の軸ラベルです。軸ラベルを青と橙のグラフの真ん中に置きたいときは、
x + width/2
とすることで実現できます。この時、widthを2で割らないと、橙のグラフの真下に軸ラベルが来てしまいます。
Pythonでデータサイエンスするなら
Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。
ややお値段高めですが、これ1冊で十分という内容・ボリュームなので、損はしないと思います^^
まとめ
いかがだったでしょうか。
最後は超簡単というわけにはいかないかもしれません。今回のサンプルコードを使って、色々数値を変えて試してみると理解が進むと思います。^^
いろいろ試して、グラフをカスタマイズしてください!
ではでは👋