Translate

【超初心者向け】pythonで簡単なグラフを作る方法③ 棒グラフ【matplotlib】

pythonのグラフシリーズもようやく三つ目になります。今回はmatplotlibを使った棒グラフの方に挑戦していこうと思います。

pythonとmatplotlibを使ったグラフの描画の中でも棒グラフは主に定量的なデータを扱うことが多く、平均値とか分散とかそういった値をうまくエラーバーとか色分けを使って表現したいところですね。ここではそういった細かい棒グラフの編集とかについてもやっていこうと思います。



あくまでも初心者の甘味が試行錯誤したり、ググっていろいろ調べてたどり着いた描画の結果なので、いろいろ誤りとかはあると思いますが、スクリプトの一部でも役に立つところがあれば幸いです。

pythonとmatplotlibを使った棒グラフを描画する



では早速コードを書いてみましょう。今回はnumpyで適当に配列を作ったサンプルデータなので、コードをそのまま使う場合には、ご自身のデータに置き換えてください。

#必要なパッケージのインポート
import numpy as np
import matplotlib.pyplot as plt

#今回用にnumpyで作ったサンプルデータ(このaとかbの部分を自身のデータに置き換える)
a = np.array ([1,3,6,2,5,5,3,4,5,10])
b = np.array([2,5,4,6,3,6,8,10,11,14])

#平均値を出す
a_m = np.mean(a)
b_m = np.mean(b)

#標準偏差(データのばらつき)を出す
a_std = np.std(a)
b_std = np.std(b)

#グラフ描画用の設定など
fig = plt.figure(figsize = (5,5))#グラフのウィンドウの大きさ
ax = fig.add_subplot(1, 1, 1)#グラフの縦横のサブプロットの位置など。

#棒グラフ描画用にデータをまとめる
m_data = np.array([a_m,b_m])
err = np.array([a_std,b_std])

#エラーバー用の設定(後で使う)
error_bar_set = dict(lw = 1, capthick = 1, capsize = 5)

#各データのタイトル名とその位置の設定
x = np.array(['data1', 'data2'])
x_position = np.arange(len(x))
ax.set_xticks(x_position)
ax.set_xticklabels(x)
ax.set_xlim(-1,2)#横軸の範囲設定(エラーバーの幅とかいじるときに使う)
ax.grid(alpha = 0.5)#グリッド線を入れたいときに使う

#グラフの描画
b_list = ax.bar(x_position, m_data, yerr = err, width=0.8,\
                color = 'navy',error_kw=error_bar_set,alpha = 0.5)


#二色の棒グラフにする場合に使う処理
b_list[1].set_color("coral")


それなりにコメントも入れて丁寧に描いてみました。このコードで実際に出力されるグラフがこちらになります。



グリッド線を入れたり、エラーバーを入れたり、透過度をいじったり、いろんな処理を行っていますが、このあたりは必要に応じてご自身でカスタムするところになると思います。

よく使うのが、二色の棒グラフをmatplotlibで描画する部分

個人的にpythonでnumpyとmatplotlibを使ってデータをグラフとして出力する場合にかなりてこずった部分として、二色の棒グラフを作る点にありました。調べてもなかなかうまく出ないことが多いんですよね(調べ方が悪いのはご愛敬)。

今回のコードでは、b_list以下の部分でそれをやっています。やっている処理としてはわりと簡単です。

この部分のコードの意味合いとしては、b_listという定義の部分にmatplotlibで作った棒グラフの設定情報がぶち込まれていると思ってください。

b_list[1]とは、そのぶち込まれた棒グラフの二つ目のデータの領域(さっきのグラフでいうところのbのデータが入っているところ)になります。

b_list[1].set_color('coral')というのはすなわち、「bのデータを使ってmatplotlibで描画している領域の部分に対して、違う色(ここではcoral)を適用させる」という意味合いになります。