機械学習などの多くのデータを扱う際に避けては通れないデータビジュアライズですが、Pythonで行うにはどうすればいいのか。ということで、matplotlibというライブラリを用いて棒グラフの描き方について解説していきます。
matplotlibとは
プログラミング言語Pythonおよびその科学計算用ライブラリNumPyのためのグラフ描画ライブラリである。オブジェクト指向のAPIを提供しており、様々な種類のグラフを描画する能力を持つ。描画できるのは主に2次元のプロットだが、3次元プロットの機能も追加されてきている。描画したグラフを各種形式の画像(各種ベクトル画像形式も含む)として保存することもできる(Wiki参照)
ということで、2次元及び3次元のグラフをさくっとプロットできる非常にありがたいライブラリです。ちなみに、このロゴもmatplotlibで描いているものです。
基本ソース
import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [1, 8, 3, 6, 5] plt.bar(x, y) plt.show()
いつも通り特に見た目の設定が不要であれば、これだけでプロットできます。プロットした結果は以下の通りで、xとyは配列になっていて同じ数であれば、x[0]とy[0]の場所にプロットしてくれるため(1,1)となり、そのあとも同じインデックス同士の(2,8)、(3,3)、(4,6)、(5,5)とプロットされていきます。
問題なくプロットされてます。では、次項で見た目をカスタマイズしていきます。
プロットの見た目をいじる
import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [1, 8, 3, 6, 5] plt.bar(x,y,label='test',width=0.4) plt.legend() plt.show()
以下の選択状態にしている箇所を基本ソースに追加すると表示が変化します。今回は、棒自体の太さの変更と凡例を付加しています。その他、棒グラフに対する主要なカスタマイズキーワードを表形式でグラフの後に載せておきます。
次は目盛線をつけてみます。さらに、グラフタイトルとX軸Y軸のラベルを入れましょう。
Tips:主要なカスタマイズキーワード
主要と書いている通り、今回もたくさんキーワードはあります。より細かい指定で様々な棒グラフが描けますが、最低限これだけおさえてれいれば、普通のグラフは書けるかなという範囲のみ記載しておきます。
kywd | 入力例 | 備考 |
---|---|---|
x,y | [1,2,3,4,5] または 事前に定義したlistなど | array形式のもの ※必須 |
linewidth | linewidth=5 | 枠線の太さ |
edgecolor | edgecolor=”r” | 枠線の色 色名や16進数、RGBでの指定が可能 |
color | color=”red” または color=”#FFFF00″ または color=(1.0,0,1.0) | 棒の色 色名や16進数、RGBでの指定が可能 |
width | width=”s” | 棒の太さ |
xerr | xerr=0.5 | X方向エラーバーの範囲 |
yerr | yerr=0.5 | Y方向エラーバーの範囲 |
bottom | bottom=積み上げるデータ | 積み上げ用データ |
label | label=”label1″ | 凡例名 |
色については、リファレンスを見ると以下のものが用意されています。
色見本
color example code: named_colors.py — Matplotlib 2.0.2 documentation
グラフの見た目をいじる
import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [1, 8, 3, 6, 5] plt.bar(x,y,label='test',width=0.4) plt.legend() plt.grid(True) #目盛り線 plt.title("TEST GRAPH") #グラフタイトル plt.xlabel("X-label") #X軸ラベル plt.ylabel("Y-label") #Y軸ラベル plt.show()
先ほど同様、赤文字部を追加することで見た目のカスタマイズを行いました。実際のグラフが以下のものです。
では、ちょっとだけテクニカルに今回は棒グラフの積み上げと折れ線グラフを重ねて、縦に二つグラフを並列で描いてみましょう。
いろいろカスタマイズする
import/ matplotlib.pyplot as/ plt x = [1, 2, 3, 4, 5] y = [1, 8, 3, 6, 5] y2 = [8, 2, 4, 3, 7] plt.subplot(2,1,1) plt.bar(x,y,label='test',width=0.4,align="center") plt.bar(x,y2,label='test2',bottom=y,width=0.4,color="green") plt.plot(x,y,label='test3') plt.title("TEST GRAPH") #グラフタイトル plt.xlabel("X-label") #X軸ラベル plt.ylabel("Y-label") #Y軸ラベル plt.legend() plt.subplot(2,1,2) plt.scatter(x,y,label='test4',s=30) plt.grid(True) #目盛線 plt.title("TEST GRAPH2") #グラフタイトル plt.xlabel("X-label2") #X軸ラベル plt.ylabel("Y-label2") #Y軸ラベル plt.legend() plt.tight_layout() plt.show()
コメントをつけて追記したものが、グラフを重ねるためのコードです。そのあと必要なコードをそれぞれに書き加えれば簡単に二つのグラフを下のように並べられます。