matplotlibの散布図で連続的に色付けをする


matplotlibの散布図を連続的に色付けする方法のメモ.

ポイントとしては
1. cmapを用いて連続する実数をRGBの連続値に変換する
2. plt.scatter()で提供されているfacecolorsedgecolorsの引数を使う
の2つです.

(20/01/24 10:34追記)
コメントでもっと簡単な方法を教えていただき,下のコード例を修正しました.
@kochory さん、ありがとうございます!

コードの例

回帰問題用のデータセットBoston housingの低次元埋め込みと目的変数(今回の例では物件価格)を散布図で可視化しました.

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston
from sklearn.manifold import TSNE

X, y = load_boston(return_X_y=True)
tsne = TSNE(n_components=2, random_state=0)
embX = tsne.fit_transform(X)

# 20/01/24 10:34 頂いたコメントをもとに修正
plt.scatter(embX[:, 0], embX[:, 1], c=y, cmap='coolwarm')

# 以下は追記前のコードです
# ポイント1: yをRGBAの配列に変換する
#cm = plt.get_cmap('coolwarm')   # matplotlibのcolormapを取得
#normalized_y = (y -y.min()) / (y.max() - y.min())   # 目的変数yを0~1に正規化
#color_levels = (normalized_y * 256).astype(int)     # yをさらに0~255に変換
#colors = [cm(cl) for cl in color_levels]            # cm(cl)はRGBAのtupleを返す 
# ポイント2: facecolorsの引数を指定する
#plt.scatter(embX[:, 0], embX[:, 1], s=10, facecolors=colors)

参考URL