Warning: Undefined variable $position in /home/pystyles/pystyle.info/public_html/wp/wp-content/themes/lionblog/functions.php on line 4897

matplotlib – scatter で散布図を描画する方法

matplotlib – scatter で散布図を描画する方法

概要

matplotlib の matplotlib.pyplot.scatter() で散布図を描画する方法について解説します。

Advertisement

matplotlib.pyplot.scatter

matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=<deprecated>, edgecolors=None, *, plotnonfinite=False, data=None, **kwargs)
引数
名前 デフォルト値
x scalar or array-like, shape (n, )
マーカーの x 座標
y scalar or array-like, shape (n, )
マーカーの y 座標
s scalar or array-like, shape (n, ) None
マーカーの大きさ。単位は point**2 (1/5184 inch)。None の場合、rcParams[‘lines.markersize’] ** 2 (6**2=36)。
c array-like or list of colors or color None
マーカーの色
marker MarkerStyle None
マーカーのスタイル。None の場合、rcParams[“scatter.marker”] (“o”)。
cmap Colormap None
c に数値を指定した場合に適用するカラーマップ。None の場合、rcParams[“image.cmap”] (“viridis”)。
norm Normalize None
カラーマップを適用する際に、c に指定した数値を [0, 1] の範囲に正規化する Normalize オブジェクト。None の場合、colors.Normalize。
vmin, vmax scalar
カラーマップを適用する際に、c に指定した数値を [0, 1] の範囲に正規化する際の最小値及び最大値。
alpha scalar None
透過度
linewidths scalar or array-like None
マーカーの枠線の幅。None の場合、rcParams[“lines.linewidth”] (1.5)。
edgecolors {‘face’, ‘none’, None} or color or sequence of color None
マーカーの枠線の色。None の場合、rcParams[“scatter.edgecolors”] (“face”)。
plotnonfinite boolean False
True の場合、inf の値を描画する。
返り値
名前 説明
PathCollection 作成したマーカー一覧

基本的な使い方

x にマーカーの $x$ 座標の一覧、y にマーカーの $y$ 座標の一覧を渡します。

In [1]:
import matplotlib.pyplot as plt
import numpy as np

x, y = np.random.randn(2, 15)

fig, ax = plt.subplots(figsize=(5, 5))
scatter = ax.scatter(x, y)
print(type(scatter))

plt.show()
<class 'matplotlib.collections.PathCollection'>

s – マーカーの大きさを設定する

すべてのマーカーに同じ大きさを設定する場合、s にスカラーを設定します。

In [2]:
fig, ax = plt.subplots(figsize=(5, 5))
ax.scatter(x, y, s=5)
plt.show()

マーカーごとに大きさを設定する場合、sx, y と同じ長さの1次元配列を指定します。

In [3]:
size = np.random.randint(0, 200, len(x))
print(size)

fig, ax = plt.subplots(figsize=(5, 5))
ax.scatter(x, y, s=size)
plt.show()
[154 195   2 196 115 194 170 199 168 182  81  85   4 165  33]

c – マーカーの色を設定する

すべてのマーカーに同じ色を設定する場合、c に単一の色を指定します。

In [4]:
fig, ax = plt.subplots(figsize=(5, 5))
ax.scatter(x, y, c="r")
plt.show()

マーカーごとに色を設定する場合、cx, y と同じ長さの1次元配列を指定します。

In [5]:
colors = np.random.choice(["r", "g", "b"], len(x))
print(colors)

fig, ax = plt.subplots(figsize=(5, 5))
ax.scatter(x, y, c=colors)
plt.show()
['r' 'b' 'g' 'g' 'g' 'g' 'b' 'r' 'r' 'r' 'g' 'b' 'b' 'b' 'b']

cx, y と同じ長さの数値の1次元配列を指定した場合、マーカーの色は、数値を色に対応付けるカラーマップによって決まります。使用するカラーマップは cmap で指定できます。

In [6]:
colors = np.random.randn(len(x))
print(colors)

fig, ax = plt.subplots(figsize=(5, 5))
ax.scatter(x, y, c=colors, cmap="magma")
plt.show()
[ 0.23242815 -1.09051451 -0.1295451  -1.23238242  1.1960109  -1.50561244
  1.53980275 -0.45824963 -0.93691392  1.46753011 -2.11938189 -1.62780872
 -0.34170842  1.51546788 -0.29968551]
Advertisement

marker – マーカーの種類を設定する

マーカーの種類は marker で指定します。指定できる値はこちらを参照してください。

In [7]:
fig, ax = plt.subplots(figsize=(5, 5))
ax.scatter(x, y, marker="x")
plt.show()

alpha – 透過度を設定する

マーカーの透過度は alpha で指定します。

In [8]:
fig, ax = plt.subplots(figsize=(5, 5))
ax.scatter(x, y, s=50, alpha=0.5)
plt.show()

linewidths / lw – マーカーの枠線の太さを設定する

すべてのマーカーの枠線の太さを同じに設定する場合、linewidths にスカラーを指定します。

In [9]:
fig, ax = plt.subplots(figsize=(5, 5))
ax.scatter(x, y, s=100, c="w", linewidths=2, ec="b")
plt.show()

マーカーごとに枠線の太さを設定する場合、linewidthsx, y と同じ長さの色の1次元配列を指定します。

In [10]:
widths = np.random.randint(1, 5, len(x))
print(widths)

fig, ax = plt.subplots(figsize=(5, 5))
ax.scatter(x, y, s=100, c="w", linewidths=widths, ec="b")
plt.show()
[4 2 2 2 4 2 3 3 3 3 4 1 1 2 1]

edgecolors / ec – マーカーの枠線の色を設定する

すべてのマーカーの枠線の色を同じに設定する場合、edgecolors に単一の色を指定します。色以外に以下の選択肢があります。

  • “none”: 枠線なし
  • “face”: マーカーと同じ色
In [11]:
fig, ax = plt.subplots(figsize=(5, 5))
ax.scatter(x, y, s=100, c="w", linewidths=2, ec="b")
plt.show()

マーカーごとに枠線の色を設定する場合、edgecolorsx, y と同じ長さの1次元配列を指定します。

In [12]:
colors = np.random.choice(["r", "g", "b"], len(x))
print(colors)

fig, ax = plt.subplots(figsize=(5, 5))
ax.scatter(x, y, s=100, c="w", edgecolors=colors)
plt.show()
['b' 'r' 'b' 'b' 'r' 'g' 'g' 'r' 'g' 'r' 'g' 'g' 'r' 'g' 'r']