Pythonのmatplotlibを使った棒グラフの作成方法

プログラミング

Pythonのmatplotlibを使うと様々なグラフを作成することができます。

本記事では、棒グラフの作成方法について解説します。

記事内に記載しているプログラムは、Python3.6.8を使って動作確認をしています。

Pythonのmatplotlibを使った棒グラフの作成方法

棒グラフの作成方法について、以下の内容を解説します。

  • matplotlibライブラリの準備
  • シンプルな棒グラフの作成方法
  • 棒グラフの幅を設定する方法
  • 棒の色、枠線の色、太さを設定する方法
  • 棒の位置を設定する方法
  • 横軸ラベルを設定する方法
  • グラフのタイトル、縦軸、横軸のタイトル、グリッドを設定する方法
  • エラーバーを設定する方法
  • ログスケールでの表示方法
  • 棒グラフの上部に数値を表示する方法
  • ハッチングを設定する方法
  • 横棒グラフを表示する方法
  • 複数の棒グラフを表示する方法
  • 積み上げ棒グラフを作成する方法
  • 凡例を表示する方法

matplotlibライブラリの準備

matplotlibは、NumFOCUSプロジェクトによって作成されているオープンソースのライブラリです。
グラフの他にもアニメーションなどの様々な視覚化するための機能が提供されています。

matplotlibライブラリを使うには、pipで事前にインストールしておきます。

pip install matplotlib

プログラム内で使用するには、以下のようにimportします。

import matplotlib.pyplot as plt

また、実行する環境に合わせて、以下のようにプログラムに追記します。

ターミナルなどのコマンドで実行する場合

作成したグラフをファイルに保存します。
以下のプログラム構成となります。

import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('agg')

# グラフの作成処理

plt.savefig("figure01.png")
plt.clf()
plt.close()

ターミナルなどのコマンドで実行する場合

先頭に「% matplotlib inline」を記述します。

% matplotlib inline
import matplotlib.pyplot as plt

# グラフの作成処理

シンプルな棒グラフの作成方法

棒グラフを作成する基本となるプログラムは以下のようになります。
(上記の実行環境に合わせたプログラムの部分は割愛しています)

left = [1, 2, 3]
height = [100, 200, 300]
plt.bar(left, height)

上記のプログラムを実行して作成される棒グラフは以下のようになります。

グラフを作るbarメソッドには、以下の様々なパラメータを指定することができます。

引数 意味
left(必須)
各棒の横軸の値
height(必須)
各棒の縦軸の値
width
棒の幅(デフォルト0.8)
bottom
棒の下側の余白(積み上げ棒グラフで利用)
color
棒の色
edgecolor
棒の枠の色
linewidth
棒の枠の太さ
tick_label
横軸のラベル
xerr
横軸方向のエラーバーを出力
yerr
縦軸方向のエラーバーを出力
ecolor
エラーバーの色
capsize
エラーバーの傘のサイズ
error_kw
エラーバーに渡すkwargsの辞書
align
棒の位置(デフォルトedge)
・edge:左端または下端
・center:中央
orientation
棒の向き
log
Trueを指定すると軸を対数スケールにする(デフォルトFalse)

棒グラフの幅を設定する方法

widthに1.0を指定すると隙間がなくなります。

left = [1, 2, 3]
height = [100, 200, 300]
plt.bar(left, height, width=1.0)

棒の色、枠線の色、太さを設定する方法

棒の色と枠線の色は16進数表記で指定します。

left = [1, 2, 3]
height = [100, 200, 300]
plt.bar(left, height, color="#00FF00", edgecolor="#FF0000", linewidth=3)

棒の位置を設定する方法

デフォルトはedgeで縦棒グラフの場合は左端、横棒グラフの場合は下端となります。
centerを指定すると、中央にすることができます。

left = [1, 2, 3]
height = [100, 200, 300]
plt.bar(left, height, align="center")

横軸ラベルを設定する方法

横軸の数に応じたリストをtick_labelに設定します。

left = [1, 2, 3]
height = [100, 200, 300]
label = ["one", "two", "three"]
plt.bar(left, height, tick_label=label)

グラフのタイトル、縦軸、横軸のタイトル、グリッドを設定する方法

それぞれtitle、xlabel、ylabel、gridで設定します。

left = [1, 2, 3]
height = [100, 200, 300]
plt.bar(left, height)
plt.title("Title sample")
plt.xlabel("x axis sample")
plt.ylabel("y axis sample")
plt.grid(True)

エラーバーを設定する方法

棒グラフでは、データの誤差範囲をエラーバーとして表します。
データ分析では標準偏差などを誤差範囲として設定します。

matplotlibでは、xerrに横軸の範囲、yerrに縦軸の範囲を指定します。

left = [1, 2, 3]
height = [100, 200, 300]
plt.bar(left, height, xerr=0.5, yerr=50, ecolor="red", capsize=10)

ログスケールでの表示方法

縦軸を対数表示にするには、logにTrueを設定します。

left = [1, 2, 3]
height = [100, 200, 300]
plt.bar(left, height, log=True)

棒グラフの上部に数値を表示する方法

各棒の上部に値を表示するには、少し複雑な設定が必要になります。

left = [1, 2, 3]
height = [100, 200, 300]
graph = plt.bar(left, height)

def autolabel(graph):
    for rect in graph:
        height = rect.get_height()
        plt.annotate('{}'.format(height),
            xy=(rect.get_x() + rect.get_width() / 2, height),
            xytext=(0, 3),
            textcoords="offset points",
            ha='center', va='bottom')
autolabel(graph)

ハッチングを設定する方法

棒に対してハッチングを設定するには、hatchに指定可能な文字を設定します。
指定可能な文字は、[‘/’ | ‘\’ | ‘|’ | ‘-‘ | ‘+’ | ‘x’ | ‘o’ | ‘O’ | ‘.’ | ‘*’] になります。

left = [1, 2, 3]
height = [100, 200, 300]
graph = plt.bar(left, height, hatch="+")

横棒グラフを表示する方法

棒グラフを横で表示するには、barhを使います。

left = [1, 2, 3]
height = [100, 200, 300]
plt.barh(left, height)

複数の棒グラフを表示する方法

1つの横軸に対して、複数の棒グラフを表示するには、棒グラフの数に応じてbarを呼び出します。
横軸の幅を計算するために、numpyのarangeを使っています。

left = np.arange(3)
height1 = [100, 200, 300]
height2 = [200, 400, 600]
plt.bar(left - 0.35/2, height1, width=0.35)
plt.bar(left + 0.35/2, height2, width=0.35)

積み上げ棒グラフを作成する方法

積み上げ棒グラフを作成するには、bottomに積み上げの下側に表示するグラフを設定します。

left = [1, 2, 3]
height1 = [100, 200, 300]
height2 = [200, 400, 600]
plt.bar(left, height1)
plt.bar(left, height2, bottom=height1)

凡例を表示する方法

グラフの凡例を表示するには、各barのlabelに設定し、legendを呼び出します。

left = [1, 2, 3]
height1 = [100, 200, 300]
height2 = [200, 400, 600]
plt.bar(left, height1, label="Num1")
plt.bar(left, height2, bottom=height1, label="Num2")
plt.legend()

まとめ

matplotlibを使った棒グラフの作成方法をまとめると以下となります。

  • 棒グラフの作成はbarメソッドで作成する。
  • barメソッドの引数や、pyplotの各メソッドに様々な値を設定することで、棒グラフを装飾することができる。
  • 複数の棒グラフを扱うには、barメソッドを複数回呼び出す。

matplotlibライブラリは手軽にグラフを作ることが出来ますので、データの可視化をプログラムで行いたい場合にはぜひ使ってみてはいかがでしょうか。

 

今回は、Pythonのmatplotlibを使った棒グラフの作成方法について解説しました。

以上、参考になれば幸いです。

コメント

タイトルとURLをコピーしました