【Matplotlib】散布図やバブルチャートを描画する方法 (scatter)

散布図やバブルチャートを作成してデータの関係性や分布を視覚化したいれど,どのようにして実現できるか迷っていませんか?

データのパターンや相関を的確に表現するグラフを作成する方法が知りたいかもしれません

この記事では,Matplotlibのscatterを使って基本的な散布図の書き方からマーカーの各種カスタマイズの方法とバブルチャートの表示方法まで詳しく解説します

データポイントの関係性や要素の大きさを視覚的に捉え,データ解析の精度を向上させる手助けになるでしょう

目次

基本的な散布図 (Axes.scatter)

Matplotlibで散布図を表示する際は,Axes.scatter関数を使います

xとyにそれぞれ同じ要素数の配列を指定すれば表示されます

Axes.scatter
引数
  • x, y (float or 配列) : データの座標
  • s (float or 配列) : マーカーのサイズ
  • c (配列) : マーカーの色.cmapを指定した場合は,数値の配列を入力します
  • marker (MarkerStyle) : マーカーの種類
  • cmap (Colormap) : カラーマップ.数値に合わせて色が変化
  • vmax, vmin (float) : カラーマップ
  • alpha (float) : マーカーの透明度
  • linewidth (float or 配列) : マーカーの枠の太さ
  • edgecolor (color) : マーカーの枠の色
返値
公式ドキュメント

下記のタブにコードとフローチャートの解説をしています

import matplotlib.pyplot as plt
import numpy as np

# step1 発生する乱数の固定化
np.random.seed(19680801)
# step2 データの作成
x = np.random.randn(100)
y = np.random.randn(100)
# step3 グラフフレームの作成
fig, ax = plt.subplots()
# step4 散布図の描画
ax.scatter(x, y)

ax.set_ylabel('Y label')
ax.set_xlabel('X label')
ax.legend()
ax.set_title('Simple scatter')

plt.show()

マーカーの種類とサイズ (marker, s)

散布図のマーカーは種類,大きさが指定できます

マーカーの種類 (marker)

散布図のマーカーの種類は,引数でmarkerを指定することで変更できます

種類は大きく分けると塗りつぶしあり系となし系の2つにわけられます

# step4 散布図の描画
ax.scatter(x, y, marker='*')

マーカーサイズ (s)

マーカーの大きさは引数でs=(数値)と入力します

# step4 散布図の描画
ax.scatter(x, y, s=100)

マーカーサイズを座標によって変化させたい場合は,s=(計算式)とします

# step4 散布図の描画
ax.scatter(x, y, s=y*100)

マーカーの色と透明度と枠 (c, alpha, edgecolor, linewidth)

マーカーの色に関する項目は,メインの色,透明度,枠の色,枠の太さがあります

マーカーのメインの色 (c)

マーカーの色は,引数にcを指定することで変更できます

# step4 散布図の描画
ax.scatter(x, y, c='C1')

マーカーの透明度 (alpha)

マーカーの透明度はalpha=(0~1の数値)で指定することで設定できます

# step4 散布図の描画
ax.scatter(x, y, alpha=0.5)

マーカーの枠の色と太さ (edgecolor, linewidth)

枠の色や太さも自由に変更可能で,それぞれedgecolor, linewidthを指定します

# step4 散布図の描画
ax.scatter(x, y, edgecolor='red', linewidth=3)

バブルチャート (cmap, vmax, vmin, colorbar)

x, yの座標に加えて,zのサイズをもつ3次元データを表現するバブルチャートをAxes.scatter関数で表示します

散布図で表示する場合,zの大きさをマーカーのサイズと色で識別するという方法を使います

カラーマップはデータ数値に合わせて色を変化させることができます

この関数はデータの最小値から最大値にかけてのRGBAの配列を生成します

colors.Colormap
引数
  • name (文字列) : カラーマップの名前
  • N (int) : RGBの量子化レベルの数
返値
  • データがスカラー:RGBAの配列 (tuple)
  • データが配列:RGBAの配列 (データ配列+4行)
公式ドキュメント

カラーマップで色を変化 (cmap)

色を数値で変化させるため,新しくzという配列を定義します

そしてc=zとして数値を指定し,cmapを追加します

# step2 データの作成
x = np.random.randn(100)
y = np.random.randn(100)
z = np.random.randn(100)

# step3 グラフフレームの作成
fig, ax = plt.subplots()

# step4 散布図の描画
ax.scatter(x, y, s=z*100, c=z, cmap='viridis')

plt.show()

カラーバーを追加 (figure.colorbar)

カラーバー(figure.colorbar)を追加して,色とZの大きさの関係がわかるようにします

# step4 散布図の描画
CS = ax.scatter(x, y, s=z*100, c=z, cmap='viridis')
# カラーバーを追加
fig.colorbar(CS, ax=ax)

カラーマップの上限と下限 (vmax, vmin)

カラーマップの上限下限の設定は,vmaxとvminで数値を指定します

グラフのカラーバーをみると数値が変わっているのがわかります

# step4 散布図の描画
CS = ax.scatter(x, y, s=z*100, c=z, cmap='viridis', vmax=1, vmin=0)
# カラーバーを追加
fig.colorbar(CS, ax=ax)

3次元グラフに散布図を表示 (projection)

3次元グラフ上に散布図を表示する場合には,subplot_kw={‘projection’:’3d’}とprojectionに3dを指定します

作成されたaxにx, y, zの配列を入力します

import matplotlib.pyplot as plt
import numpy as np

# step1 発生する乱数の固定化
np.random.seed(19680801)
# step2 データの作成
x = np.random.randn(100)
y = np.random.randn(100)
z = np.random.randn(100)
# step3 グラフフレームの作成
fig, ax = plt.subplots(subplot_kw={'projection':'3d'})
# step4 散布図の描画
CS = ax.scatter(x, y, z, s=z*100, c=z)
# カラーバーの作成
fig.colorbar(CS, ax=ax)

plt.show()

参考文献

Axes.scatter関数

マーカーの種類

カラーバー付き散布図

3Dの散布図

お疲れ様でした

シェアしてくださると嬉しいです!
  • URLをコピーしました!

コメント

コメントする

目次