[Matplotlib入門シリーズ第4回] 様々なグラフ(ヒストグラム・散布図など)
はじめに
本記事は「Pythonでデータを可視化するMatplotlib入門」シリーズの第4回です.
前記事までは,
- 線グラフ・点グラフを中心とした描画
- タイトル・軸・凡例・グリッド・表示範囲
などの描画方法およびグラフ装飾を学びました.
本記事では 目的に応じたグラフの種類を選択する力 を身につけます.
私のMatplotlibライブラリのバージョンは "3.7.0" です.
本シリーズの構成
本シリーズの構成予定(全11記事)は以下を想定しています.
- Matplotlibのインストール 〜 線グラフの描画
- 基本的な2次元プロット(線グラフ・点グラフ・複数データ・グラフの見た目)
- グラフ装飾(タイトル・軸・凡例・グリッド・表示範囲)
- 様々なグラフ(ヒストグラム・散布図など)(本記事)
- サブプロット
- 2次元図形の描画(公開後にリンクを追加する予定)
- 画像表示とヒートマップ(公開後にリンクを追加する予定)
- 3次元プロット(公開後にリンクを追加する予定)
- 3次元図形の描画(公開後にリンクを追加する予定)
- アニメーション描画1(公開後にリンクを追加する予定)
- アニメーション描画2(公開後にリンクを追加する予定)
本シリーズのゴール
本シリーズでは,以下のポイントが実装できるようになることを目標としています.
- 目的に応じたグラフを選択できるようになる
- 誰にでも分かるようなグラフを作成できるようになる
- 意図通りにアルゴリズムが動いているかのアニメーションを作成できるようになる
グラフの可視化を "判断・説明・検証" に使えるようになること.
本記事のゴール
本記事では,以下の内容を学ぶことができます.
- ヒストグラム (データの分布を確認)
- 棒グラフ (量データの比較)
- 散布図 (データ間の関係性を確認)
- 円グラフ (全体に対する割合を確認)
目的に応じたグラフの種類を選択する力を身につける ことが,本記事のゴールです.
MatplotlibライブラリとNumPyライブラリの読み込み
Matplotlibを使うためには,まずライブラリの読み込みから始めます.
NumPyにより可視化したいデータを作成し,Matplotlibによりデータを可視化します.
import matplotlib.pyplot as plt
import numpy as np
numpyライブラリを np という名前として,扱えるようにしています.
Matplotlibライブラリのpyplotモジュールを plt という名前として,扱えるようにしています.
以降では plt , np という名前を使っていきます.
ヒストグラム
ヒストグラムの描画方法を説明します.
ヒストグラムとは,
- データの分布 を確認
- どの値がどれくらい出現しているかの可視化
するためのグラフです.
具体的なヒストグラムは下図の通りです.

# 正規分布に従ったデータを取得
datas = np.random.normal(loc=50, scale=10, size=1000)
# ヒストグラムの作成
plt.hist(datas, bins=30)
# グラフにタイトルを追加
plt.title("Histogram")
# X軸(横軸)のラベル作成
plt.xlabel("value")
# Y軸(縦軸)のラベル作成
plt.ylabel("freequency")
# グリッドを表示
plt.grid(True)
# 作成したグラフを画面に表示
plt.show()
plt.hist() の概要,引数,戻り値に関して,下表にまとめました.
| 備考 | ||
|---|---|---|
| 概要 | ヒストグラムの作成 | - |
| 引数 | たくさんある | 後ほど説明 |
| 戻り値1 | 各ビンの値 | NumPy配列.データ数は ビンの数 |
| 戻り値2 | 各ビンの縁 | NumPy配列.データ数は ビンの数+1 |
| 戻り値3 |
BarContainerオブジェクト |
全ビンの情報 |
使用頻度の高い plt.hist() の引数を下表にまとめました.
| 引数 | 意味 | 備考 |
|---|---|---|
| x | 数値データ | 1次元配列 |
| bins | ビン(区間)の数 | デフォルトは10
|
| range | 表示範囲 | 外れ値の除外 デフォルトは None
|
| density | 頻度 or 確率 |
True:確率密度False:度数(件数)デフォルトは False
|
| cumulative | 累積度数 |
True:累積度数False:累積度数ではない |
| align | ビンの整列 |
left:左揃え.mid:中央揃え(デフォルト).right:右揃え |
plt.hist() の引数 bins, density, cumulative, align の設定値およびグラフを下記に示します.
| 引数 | 意味 | Fig. 1-1の設定値 | Fig. 1-2の設定値 | Fig. 1-3の設定値 | Fig. 1-4の設定値 |
|---|---|---|---|---|---|
| bins | ビン(区間)の数 | 20 | 30 | 40 | 50 |
| density | 頻度(False) or 確率(True) | False | True | False | True |
| cumulative | 累積度数 | False | True | False | True |
| align | ビンの整列 | "left" | "mid" | "right" | "mid" |

Fig. 1-1

Fig. 1-2

Fig. 1-3

Fig. 1-4
表に記載していない plt.hist() の引数に関しては,下記サイトを確認してください.
Matplotlib公式リファレンス
ヒストグラムを使用する場面は下記の通りです.
- データ分布の確認 (正規分布かどうか)
- 外れ値の検出 (裾が長いかどうか)
- センサ値の確認 (ノイズを把握)
- 機械学習の前処理 (正規化の判断)
ヒストグラムは,分布の確認 をします.
棒グラフ
棒グラフの描画方法を説明します.
棒グラフとは,
- カテゴリごとの量の比較 を確認
- 合計・平均・回数などを表現
するためのグラフです.
具体的な棒グラフは下図の通りです.

# カテゴリの作成
categorys = ["A", "B", "C", "D"]
# カテゴリに応じた量を作成
quantitys = [ 10, 25, 15, 35]
# 棒グラフの作成
plt.bar(categorys, quantitys)
# グラフにタイトルを追加
plt.title("Bar Graph")
# X軸(横軸)のラベル作成
plt.xlabel("category")
# Y軸(縦軸)のラベル作成
plt.ylabel("quantity")
# グリッドを表示
plt.grid(True)
# 作成したグラフを画面に表示
plt.show()
plt.bar() の概要,引数,戻り値に関して,下表にまとめました.
| 備考 | ||
|---|---|---|
| 概要 | 棒グラフの作成 | - |
| 引数 | たくさんある | 後ほど説明 |
| 戻り値 |
BarContainerオブジェクト |
全棒の情報 |
plt.bar() の引数を下表にまとめる.
| 引数 | 意味 | 備考 |
|---|---|---|
| x | 棒の位置(x座標) | 必須の引数 |
| height | 棒の高さ(値) | 必須の引数 |
| width | 棒の太さ | デフォルトが0.8
|
| bottom | 棒の開始位置 | デフォルトが0
|
| align | xの位置基準 | "center":中央(デフォルト)."edge":枠線 |
plt.bar() の引数 width, bottom, align の設定値およびグラフを下記に示します.
| 引数 | 意味 | Fig. 2-1の設定値 | Fig. 2-2の設定値 | Fig. 2-3の設定値 | Fig. 2-4の設定値 |
|---|---|---|---|---|---|
| width | 棒の太さ | 0.1 | 0.5 | 1.0 | 1.5 |
| bottom | 棒の開始位置 | 0.0 | 0.5 | 1.0 | 1.5 |
| align | xの位置基準 | "center" | "edge" | "center" | "edge" |

Fig. 2-1

Fig. 2-2

Fig. 2-3

Fig. 2-4
横向きの棒グラフを作成する方法を説明します.
plt.barh() を使用することで,横向きの棒グラフとなります.
# カテゴリの作成
categorys = ["A", "B", "C", "D"]
# カテゴリに応じた量を作成
quantitys = [ 10, 25, 15, 35]
# 横向きの棒グラフの作成
plt.barh(categorys, quantitys)
# グラフにタイトルを追加
plt.title("Bar Graph")
# X軸(横軸)のラベル作成
plt.xlabel("quantity")
# Y軸(縦軸)のラベル作成
plt.ylabel("category")
# グリッドを表示
plt.grid(True)
# 作成したグラフを画面に表示
plt.show()
表に記載していない plt.bar() の引数に関しては,下記サイトを確認してください.
Matplotlib公式リファレンス
棒グラフを使用する場面は下記の通りです.
- カテゴリ別データの比較
- 頻度・回数の可視化
- 実験結果の比較
- ロボット制御パラメータの比較
棒グラフは,データを比較 で使用します.
散布図
散布図の描画方法を説明します.
散布図とは,
- 2つの変数の関係性 を確認する
- 相関の有無が一目でわかる
ためのグラフです.
具体的な散布図は下図の通りです.

# x軸のデータをランダムに作成
x = np.random.rand(100)
# y軸のデータをランダムに作成
y = np.random.rand(100)
# 散布図の作成
plt.scatter(x, y)
# グラフにタイトルを追加
plt.title("Scatter Graph")
# X軸(横軸)のラベル作成
plt.xlabel("X")
# Y軸(縦軸)のラベル作成
plt.ylabel("Y")
# グリッドの表示
plt.grid(True)
# 作成したグラフを画面に表示
plt.show()
plt.scatter() の概要,引数,戻り値に関して,下表にまとめました.
| 備考 | ||
|---|---|---|
| 概要 | 散布図の作成 | - |
| 引数 | たくさんある | 後ほど説明 |
| 戻り値 |
PathCollectionオブジェクト |
全点の情報 |
plt.scatter() の引数を下表にまとめます.
| 引数 | 意味 | 備考 |
|---|---|---|
| x | x軸のデータ | 必須の引数 |
| y | y軸のデータ | 必須の引数 |
| s | 点の大きさ | "size"でも可能 |
| c | 点の色 | "color"でも可能 |
| marker | 点の形 | デフォルトが"o".使用可能なマーカー](https://matplotlib.org/stable/api/markers_api.html) |
| cmap | カラーマップ | デフォルトが"viridis" |
| norm | 正規化の方法 |
linear:線形,log:対数 など |
| vmin | 下限値 | - |
| vmax | 上限値 | - |
plt.scatter() の引数 s, marker, cmap, norm の設定値およびグラフを下記に示します.
| 引数 | 意味 | Fig. 3-1の設定値 | Fig. 3-2の設定値 | Fig. 3-3の設定値 | Fig. 3-4の設定値 |
|---|---|---|---|---|---|
| s | 点の大きさ | 10 | 20 | 30 | 40 |
| marker | 点の形 | "o" | "x" | "^" | "s" |
| cmap | カラーマップ | "viridis" | "plasma" | "coolwarm" | "inferno" |
| norm | 正規化に用いるスケールの種類 | "linear" | "log" | "logit" | "linear" |

Fig. 3-1

Fig. 3-2

Fig. 3-3

Fig. 3-4
表に記載していない plt.scatter() の引数に関しては,下記サイトを確認してください.
Matplotlib公式リファレンス
散布図を使用する場面は下記の通りです.
データ分析
- 相関関係の確認
- 外れ値の検出
機械学習
- 特徴量の分布確認
- クラスタ可視化
ロボット/シミュレーション
- センサデータ可視化
- 位置・軌道の散布
散布図は,2つの変数の相関・関係性 で使用します.
円グラフ
円グラフの描画方法を説明します.
円グラフとは,
- 割合・構成比の可視化 をする
ためのグラフです.
具体的な円グラフは下図の通りです.

# カテゴリの作成
categorys = ["A", "B", "C", "D"]
# カテゴリに応じた値を作成
values = [ 1, 2, 3, 4]
# 円グラフの作成
plt.pie(values, labels=categorys)
# グラフにタイトルを追加
plt.title("Pie Graph")
# アスペクト比(縦横比)を同値にして,円を真円とする
plt.axis("equal")
# 作成したグラフを画面に表示
plt.show()
plt.pie() の概要,引数,戻り値に関して,下表にまとめました.
| 備考 | ||
|---|---|---|
| 概要 | 円グラフの作成 | - |
| 引数 | たくさんある | 後ほど説明 |
| 戻り値1 | 各データの情報 | リスト型の配列 |
| 戻り値2 | 各ラベルの文字列 | リスト型の配列 |
| 戻り値3 | 各数値ラベル | リスト型の配列.plt.pie()の引数autopctがNoneなら,本戻り値は存在しない
|
plt.pie() の引数を下表にまとめます.
| 引数 | 意味 | 備考 |
|---|---|---|
| x | 比率データ | 必須の引数 |
| labels | ラベル | - |
| colos | 色 | デフォルトがNone
|
| autopct | 割合(%)を表示 | 記載例:"%.1f%%" デフォルトが None
|
| pctdistance | 割合文字列の中心からの距離 | デフォルトが0.6
|
| labeldistance | ラベル文字列の中心からの距離 | デフォルトが1.1
|
| shadow | 影の有無 | True:影をつける.False:影をつけない(デフォルト) |
plt.pie() の引数 autopct, pctdistance, labeldistance, shadow の設定値およびグラフを下記に示します.
| 引数 | 意味 | Fig. 4-1の設定値 | Fig. 4-2の設定値 | Fig. 4-3の設定値 |
| --- | --- | --- | --- | --- | --- |
| autopct | 割合(%)を表示 | "%.1f%%" | "%.01f%%" | "%.001f%%" |
| pctdistance | 割合文字列の中心からの距離 | 0.5 | 1.0 | 1.5 |
| labeldistance | ラベル文字列の中心からの距離 | 0.1 | 0.6 | 1.1 |
| shadow | 影の有無 | True | False | True |

Fig. 4-1

Fig. 4-2

Fig. 4-3
表に記載していない plt.pie() の引数に関しては,下記サイトを確認してください.
Matplotlib公式リファレンス
円グラフのメリット・デメリットは下記の通りです.
メリット
- 割合が直感的
- 構成比の説明に強い
- 第三者にもわかりやすい
デメリット
- 要素が多いと見にくい
- 差が小さいと比較は困難
- 厳密な比較には不向き
円グラフを使用する場面は下記の通りです.
- カテゴリ比率
- 使用割合
- 構成比の説明
- 統計の導入図
円グラフは,割合・構成比の可視化 で使用します.
終わりに
本記事では,Matplotlibの様々なグラフ(ヒストグラム・棒グラフ・散布図)に関する以下の内容を説明しました.
| グラフ | 目的 |
|---|---|
| 線グラフ | 変化・時系列 |
| ヒストグラム | 分布の確認 |
| 棒グラフ | データを比較 |
| 散布図 | 2つの変数の相関・関係性 |
| 円グラフ | 割合・構成比 |
次回予告
第5回では,以下のような「サブプロット(複数グラフの配置)」に焦点を当てます.
-
plt.subplot()とplt.subplots()の違い - 行列レイアウトでのグラフ配置
- 複数データを複数視点での同時可視化
複数のグラフを同時可視化 できるようになります.
参考文献
本記事を作成するに当たって参考にしたサイトをまとめました.
Discussion