Matplotlibの散布図#

※記事内に商品プロモーションを含むことがあります。

公開日

Matplotlibで散布図を出力するには、ax.scatterを使用します。ax.scatterの最初の引数に横軸方向の値、2番目の引数に縦軸方向の値をそれぞれ配列で与えます。

import numpy as np
import matplotlib.pyplot as plt

x = np.array([4, 6, 7, 3, 5]) # 横軸の値
y = np.array([5, 3, 7, 4, 6]) # 縦軸の値

fig, ax = plt.subplots()
ax.scatter(x, y)
plt.show()
../_images/be1391d00eefdf55405354136349adfa9fee7cb37060f5274904ceb34ca22a56.png

複数系列の散布図#

散布図に系列を追加したい場合、以下のようにax.plotを追加します。labelオプションとax.legend()を使うことで、系列名を凡例として表示できます。

x2 = np.array([1, 3, 2, 5, 6]) # 横軸の値
y2 = np.array([2, 5, 4, 7, 6]) # 縦軸の値

fig, ax = plt.subplots()
ax.scatter(x, y, label="y")
ax.scatter(x2, y2, label="y2")
ax.legend()
plt.show()
../_images/e38eb106ac620ff362f314ca6dc0626d088ce61bac3a62f062136eeee9773f9b.png

マーカーの大きさ・色・種類を変更する#

マーカーの大きさはsオプションで指定します。

fig, ax = plt.subplots()
ax.scatter(x, y, s=200)
plt.show()
../_images/678fb6398e6f6ef8b9d3eb7e944decb391bfed6ab9fe0f60299eb4e924177e80.png

マーカーの色はcオプションで指定します。cオプションの詳細は以下の記事を参考にして下さい。

Matplotlib 色の書式

fig, ax = plt.subplots()
ax.scatter(x, y, c="green")
plt.show()
../_images/6a3410f7039e9ae0cfebef6066037efa0287eca7d3cfdad97eeb7a66d3901dc0.png

また、alphaオプションで透明度を変更できます。0から1の範囲を取り、値が小さいほど透明に近づきます。

fig, ax = plt.subplots()
ax.scatter(x, y, alpha=0.5)
plt.show()
../_images/0903b4b660d67e942b00f05bdb022d5f9c34a797ab01242967e6c3184293045f.png

マーカーの種類はmarkerオプションで指定します。

fig, ax = plt.subplots()
ax.scatter(x, y, marker="o")
ax.scatter(x, 0.8*y, marker="v")
ax.scatter(x, 0.6*y, marker="s")
ax.scatter(x, 0.4*y, marker="+")
ax.scatter(x, 0.2*y, marker="o")
ax.scatter(x, 0*y, marker="D")
plt.show()
../_images/56987c4d393eb6b21346a17a1d0156b7b015a3bc7df616d393c725ec6c994f07.png

主なmarkerオプションを以下の表に示します。

marker

説明

o

v

下向き三角

^

上向き三角

<

左向き三角

>

右向き三角

s

四角形(square)

p

五角形(pentagon)

+

+記号

x

x記号

D

ダイヤモンド

その他に利用可能なマーカーの種類は、以下の公式ページを参照してください。

matplotlib.markers — Matplotlib documentation

マーカーの枠線の太さ・色などは変更できます。指定できるオプションを以下の表に示します。

オプション

説明

linewidths

マーカー枠線の太さ

edgecolors

マーカー枠線の色

これらのオプションを使用した例を以下に示します。マーカーの枠線の色はオレンジ、枠線の太さは3となります。

fig, ax = plt.subplots()
ax.scatter(x, y, s=200, edgecolors="orange", linewidths=3)
plt.show()
../_images/01e827825f5b89fe7a748332731a7812939db849fc195b1f3d857fd9df710227.png

カラーマップの指定#

散布図の各点の色を、値に合わせて指定できます。cに値を、cmapにカラーマップを指定します。

x1 = np.array([1, 2, 3, 4]) # 横軸の値
y1 = np.array([1, 2, 3, 4]) # 縦軸の値
v1 = np.array([1, 2, 3, 4]) # 点の色に対応する値

fig, ax = plt.subplots()
ax.scatter(x1, y1, c=v1, cmap="Reds")
plt.show()
../_images/fa70cd383ecf45e3ede9cefdfed49559b18e421e39ae2cf9079265226cf326e5.png

指定可能なカラーマップについては、以下のページも参照下さい。

Matplotlibのカラーマップ

カラーバーを表示する場合、plt.colorbarを使用します。ax.scatterの戻り値はPathCollectionというクラスのオブジェクトです。これをplt.colorbarの最初の引数とします。また、axオプションにカラーバーを表示するグラフ(ここではax)を指定します。

fig, ax = plt.subplots()
mappable = ax.scatter(x1, y1, c=v1, cmap="Reds")
plt.colorbar(mappable, ax=ax)
plt.show()
../_images/2bde80ac4aa0e9319ae272a6ba91bc26f638047110139b7ae7b63fad95273740.png

また、表示するカラーマップの範囲を固定したい場合、最小値と最大値をそれぞれvmin, vmaxで指定します。

fig, ax = plt.subplots()
mappable = ax.scatter(x1, y1, c=v1, cmap="Reds", vmin=-5, vmax=3)
plt.colorbar(mappable, ax=ax)
plt.show()
../_images/28c689b9db999b0a0fac58362f5fecacf7e15ed200565ca4b06ffd7e9e884cde.png

以下にカラーバーにラベルを付けるコードを示します。plt.colorbarの戻り値はColorbarというクラスのオブジェクトです(以下ではcbarとしています)。このオブジェクトのset_labelメソッドを使用します。

fig, ax = plt.subplots()
mappable = ax.scatter(x1, y1, c=v1, cmap="Reds", vmin=-5, vmax=3)
cbar = plt.colorbar(mappable, ax=ax)
cbar.set_label('Value')
plt.show()
../_images/6a2a65ffd7ad25d71201d29847678fd7bf2594fef0f38162bbbced16d19e4480.png