matplotlibの散布図を連続的に色付けする方法のメモ.
ポイントとしては
- cmapを用いて連続する実数をRGBの連続値に変換する
-
plt.scatter()
で提供されているfacecolors
やedgecolors
の引数を使う
の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)