機械学習などの多くのデータを扱う際に避けては通れないデータビジュアライズですが、Pythonで行うにはどうすればいいのか。ということで、matplotlibというライブラリを用いてヒストグラムの描き方について解説していきます。
3次元で散布図を描きたい方はこちら
matplotlibとは
プログラミング言語Pythonおよびその科学計算用ライブラリNumPyのためのグラフ描画ライブラリである。オブジェクト指向のAPIを提供しており、様々な種類のグラフを描画する能力を持つ。描画できるのは主に2次元のプロットだが、3次元プロットの機能も追加されてきている。描画したグラフを各種形式の画像(各種ベクトル画像形式も含む)として保存することもできる(Wiki参照)
ということで、2次元及び3次元のグラフをさくっとプロットできる非常にありがたいライブラリです。ちなみに、このロゴもmatplotlibで描いているものです。
ヒストグラムとは
基本的には横軸は階級,縦軸は度数(その階級に属するデータ数)を表したもの。分布の全体的な様子を見ることができるため、実際にデータの全体的な様子を把握したいときに利用するグラフの表現方法のひとつ。
基本ソース
今回は、ヒストグラムということでランダムな数値データが必要になるので、numpyで生成しています。
import matplotlib.pyplot as plt x = np.random.nomal(75,5,2000) plt.hist(x) plt.show()
表示されるグラフがこのような感じです。
問題なくプロットされました。では、見た目をカスタマイズしていきます。
プロットの見た目をいじる
import matplotlib.pyplot as plt x = np.random.nomal(75,5,2000) plt.hist(x,bins=12,rwidth=0.8,label="test") plt.legend() plt.show()
histの()内のオプションを追加することで棒の全体の太さを変えて、棒自体の本数を増やしています。ヒストグラムに付けられる主要なカスタマイズキーワードを表形式でグラフの後に載せます。
次は目盛線を散布図とは違う方法でつけてみます。さらに、グラフタイトルとX軸Y軸のラベルを入れましょう。
Tips:主要なカスタマイズキーワード
主要と書いてます通り、今回もたくさんキーワードはあります。より細かい指定で様々なヒストグラムが描けますが、最低限これだけおさえてれいれば、普通のグラフは書けるかなという範囲のみ記載しておきます。
kywd | 入力例 | 備考 |
---|---|---|
x | ヒストグラムとしてプロットしたい生データ | array形式のもの ※必須 |
bins | bins=5 | 表示する棒(ビンと呼ぶ)の数 |
color | color=”r” または color=”#FFFF00″ または color=(1.0,0,1.0) |
棒の色 色名や16進数、RGBでの指定が可能 |
normed | normed=True | Trueにすると合計値を1になるように正規化する |
histtype | histtype=”step” | ヒストグラムのタイプ barは通常 barstackedは積み上げ stepは線 stepfilledは塗りつぶし線 |
orientation | orientation=’horizontal’ | 棒の配置方向 horizontalは水平 verticalは垂直 |
rwidth | rwidth=0.5 | 棒の幅 |
bottom | bottom=積み上げるデータ | 積み上げ用データ |
log | log=True | 対数目盛での表示 |
label | label=”label1″ | 凡例名 |
色については、リファレンスを見ると以下のものが用意されているみたいです。
color example code: named_colors.py — Matplotlib 2.0.2 documentation
3.グラフの見た目をいじる
import matplotlib.pyplot as plt x = np.random.normal(75,5,2000) plt.hist(x,bins=12,rwidth=0.8,label="test",log=True) plt.legend() plt.xlabel("X-label") #X軸ラベル plt.ylabel("Y-label") #Y軸ラベル plt.title("TEST GRAPH") #グラフタイトル plt.show()
コメントを入れたところが見た目のカスタマイズを行った箇所になります。また、histの()内もほんの少し変更しています。実際のグラフが以下のものです。