散布図やバブルチャートを作成してデータの関係性や分布を視覚化したいれど,どのようにして実現できるか迷っていませんか?
データのパターンや相関を的確に表現するグラフを作成する方法が知りたいかもしれません
この記事では,Matplotlibのscatterを使って基本的な散布図の書き方からマーカーの各種カスタマイズの方法とバブルチャートの表示方法まで詳しく解説します
データポイントの関係性や要素の大きさを視覚的に捉え,データ解析の精度を向上させる手助けになるでしょう
基本的な散布図 (Axes.scatter)
Matplotlibで散布図を表示する際は,Axes.scatter関数を使います
xとyにそれぞれ同じ要素数の配列を指定すれば表示されます
- 引数
-
- 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の配列を生成します
- 引数
-
- 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の散布図
お疲れ様でした
コメント