【Python】棒グラフでデータを可視化する方法を解説

今回は、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冊で十分という内容・ボリュームなので、損はしないと思います^^

まとめ

いかがだったでしょうか。

最後は超簡単というわけにはいかないかもしれません。今回のサンプルコードを使って、色々数値を変えて試してみると理解が進むと思います。^^

いろいろ試して、グラフをカスタマイズしてください!

ではでは👋