【Python・データ分析】Matplotlibで散布図を作成・グラフの描き方解説

こんにちは、Kosei(@kay_diacc2)です!

pythonライブラリのMatplotlibを活用して散布図を描く方法」を解説します。プログラムの組み立てや引数の利用方法も分かりやすく解説しておりますため、是非ご覧下さい。

目次

Python・Matplotlibを用いた散布図作成イメージ

本記事はPythonのMatplotlibを用いて散布図を描けるようになることを目的とした記事です。具体的な例として、上図4つの散布図を描けるよう解説していきます。

散布図を描くプログラムのひな型

散布図を描く際、下記のコードをひな型として用い、用途に合わせてデザインを膨らませていきます。

""" ライブラリ """
import matplotlib.pyplot as plt

""" (1) データの準備 """
data = {"X": [4,6,5],   # X軸値
        "Y": [9,1,4],   # Y軸値
       }

""" (2) グラフ描画設定 """
plt.scatter(
            data["X"],  # X軸値
            data["Y"],  # Y軸値
            )

""" (3) 書式設定・出力設定 """
plt.xlabel("X軸")       # X軸ラベル
plt.ylabel("Y軸")       # Y軸ラベル
plt.title("タイトル")    # タイトル
plt.show()

ここでscatter()メソッドには後述の引数を指定することで、柔軟に散布図をデザインできるようになります。

引数

スクロールできます
引数概要デフォルト値(必須:★)
第一引数(X)X軸データ
第二引数(Y)Y軸データ
markerマーカー形状‘o’
sサイズ20
cカラーRed
cmapカラーマップNone
edgecolor枠線のカラーRed
linewidth線の太さ1
alpha透明度1
labelラベル名None

【実践】散布図作成(基本形)

実際に散布図を出力してみましょう!上図の散布図(基本形)は下記のプログラムをもとに出力します。

""" ライブラリ """
import matplotlib.pyplot as plt
import pandas as pd
from matplotlib import rcParams
rcParams["font.family"]     = "sans-serif"
rcParams["font.sans-serif"] = "Hiragino Maru Gothic Pro"
plt.style.use("ggplot")

""" (1) データの準備 """
data = {"X": [4,6,5,6,7,8,5,4,3,4,6,7,8,7,6,9,1,2,3,5,6,5],  # X軸値
        "Y": [9,14,7,9,6,5,4,4,6,7,7,6,5,5,1,2,5,6,7,4,3,5], # Y軸値
       }

""" (2) グラフ描画設定 """
plt.scatter(
            data["X"],            # X軸値
            data["Y"],            # Y軸値
            marker = "o",         # マーカー形状
            s = 100,              # プロットサイズ
            c = "blue",           # カラー
            edgecolor = "black",  # 枠線カラー
            linewidth = 1,        # 線の太さ
            alpha = 0.4,          # 透明度      
            label = "サンプル"     # ラベル
            )

""" (3) 書式設定・出力設定 """
plt.xlabel("旅行者数")                     # X軸ラベル
plt.ylabel("新幹線利用者数")                # Y軸ラベル
plt.title("旅行者vs新幹線利用率の相関調査")   # タイトル
plt.legend(loc="best")
# plt.savefig("散布図1.png")
plt.show()

【実践】散布図作成(カラーマップ)

カラーマップを用いてデザインした散布図は下記をもとに出力します。

""" ライブラリ """
import matplotlib.pyplot as plt
import pandas as pd
from matplotlib import rcParams
rcParams["font.family"]     = "sans-serif"
rcParams["font.sans-serif"] = "Hiragino Maru Gothic Pro"
plt.style.use("ggplot")

""" (1) データの準備 """
data = {"X":     [4,6,5,6,7,8,5,4,3,4,6,7,8,7,6,9,1,2,3,5,6,5],  # X軸値
        "Y":     [9,14,7,9,6,5,4,4,6,7,7,6,5,5,1,2,5,6,7,4,3,5], # Y軸値
        "Color": [4,3,6,5,4,3,2,4,5,6,6,7,8,7,7,6,5,4,3,7,8,9],  # カラーマップ用
       }

""" (2) グラフ描画設定 """
plt.scatter(
            data["X"],            # X軸値
            data["Y"],            # Y軸値
            marker = "o",         # マーカー形状
            s = 100,              # プロットサイズ
            c = data["Color"],    # カラー
            cmap = "Greens",      # カラーマップ
            edgecolor = "black",  # 枠線カラー
            linewidth = 1,        # 線の太さ
            alpha = 0.9,          # 透明度      
            label = "サンプル"     # ラベル
            )

""" (3) 書式設定・出力設定 """
plt.xlabel("旅行者数")                     # X軸ラベル
plt.ylabel("新幹線利用者数")                # Y軸ラベル
plt.title("旅行者vs新幹線利用率の相関調査")   # タイトル
plt.legend(loc="best")
# plt.savefig("散布図2.png")
plt.show()

【実践】散布図作成(カラーマップ&カラーバー)

カラーバー(cbar)を付与した散布図は、下記をもとに出力します。

""" ライブラリ """
import matplotlib.pyplot as plt
import pandas as pd
from matplotlib import rcParams
rcParams["font.family"] = "sans-serif"
rcParams["font.sans-serif"] = "Hiragino Maru Gothic Pro"
plt.style.use("ggplot")

""" (1) データの準備 """
data = {"X":     [4,6,5,6,7,8,5,4,3,4,6,7,8,7,6,9,1,2,3,5,6,5],                      # X軸値
        "Y":     [9,14,7,9,6,5,4,4,6,7,7,6,5,5,1,2,5,6,7,4,3,5],                     # Y軸値
        "Color": [4,3,6,5,4,3,2,4,5,6,6,7,8,7,7,6,5,4,3,7,8,9],                      # カラー調整
        "Size":  [40,30,60,50,40,30,20,40,50,60,60,70,80,70,70,60,50,40,30,70,80,90] # サイズ調整
       }

""" (2) グラフ描画設定 """
plt.scatter(
            data["X"],            # X軸値
            data["Y"],            # Y軸値
            marker = "o",         # マーカー形状
            s = data["Size"],     # プロットサイズ
            c = data["Color"],    # カラー
            cmap = "Reds",        # カラーマップ
            edgecolor = "black",  # 枠線カラー
            linewidth = 1,        # 線の太さ
            alpha = 0.9,          # 透明度      
            label = "サンプル"     # ラベル
            )

""" (3) 書式設定・出力設定 """
plt.xlabel("旅行者数")                     # X軸ラベル
plt.ylabel("新幹線利用者数")                # Y軸ラベル
plt.title("旅行者vs新幹線利用率の相関調査")   # タイトル
cbar = plt.colorbar()                    # cbar付与
cbar.set_label("旅行満足度")               # 旅行満足度
plt.legend(loc="best")
# plt.savefig("散布図3.png")
plt.show()

【実践】散布図作成(条件付き色分け)

(X,Y)値を条件として散布図のデザインを変更したい場合、下記のように記述します。

""" ライブラリ """
import matplotlib.pyplot as plt
import pandas as pd
from matplotlib import rcParams
rcParams["font.family"] = "sans-serif"
rcParams["font.sans-serif"] = "Hiragino Maru Gothic Pro"
plt.style.use("ggplot")

""" (1) データの準備 """
data = {"X": [4,6,5,6,7,8,5,4,3,4,6,7,8,7,6,9,1,2,3,5,6,5],  # X軸値
        "Y": [9,14,7,9,6,5,4,4,6,7,7,6,5,5,1,2,5,6,7,4,3,5], # Y軸値
       }

data = pd.DataFrame(data)

""" (2) グラフ描画設定 """

data_1 = data[data["X"]<=3]
plt.scatter(
            data_1["X"],            # X軸値
            data_1["Y"],            # Y軸値
            marker = "o",         # マーカー形状
            s = 100,                # プロットサイズ
            c = "blue",             # カラー
            edgecolor = "black",    # 枠線カラー
            linewidth = 1,          # 線の太さ
            alpha = 0.4,            # 透明度      
            label = "サンプル(X<=3)"  # ラベル
            )

data_2 = data[data["X"]>3]
plt.scatter(
            data_2["X"],            # X軸値
            data_2["Y"],            # Y軸値
            s = 100,                # プロットサイズ
            c = "red",              # カラー
            edgecolor = "black",    # 枠線カラー
            linewidth = 1,          # 線の太さ
            alpha = 0.4,            # 透明度      
            label = "サンプル(X>3)"   # ラベル
            )

""" (3) 書式設定・出力設定 """

plt.xlabel("旅行者数")                     # X軸ラベル
plt.ylabel("新幹線利用者数")                # Y軸ラベル
plt.title("旅行者vs新幹線利用率の相関調査")   # タイトル
plt.legend(loc="best")                   # 凡例
# plt.savefig("散布図4.png")
plt.show()

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
URLをコピーする
URLをコピーしました!
目次
閉じる