pythonでスパース主成分分析を行っている際に、
matplotlibのsubplotで、それぞれのグラフごとにxlim指定をしたいのですが、
うまく反映されません。
分析に使っているデータは、scikit-learnから提供されているデータセットのwineです。
python
1import matplotlib.pyplot as plt 2from sklearn.datasets import load_wine 3from sklearn.preprocessing import StandardScaler 4from sklearn.decomposition import PCA, SparsePCA 5 6# ワインのデータをインポート 7wine = load_wine() 8 9def biplot(X_2d, components, target, ax): 10 r1 = 5 11 r2 = 1.01 12 for i, coef in enumerate(components.T): 13 ax.arrow(0, 0, coef[0]*r1, coef[1]*r1, color='r') 14 ax.text(coef[0]*r1*r2, coef[1]*r1*r2, i, color='b', fontsize=8) 15 16 ax.scatter(X_2d[:,0], X_2d[:,1], c=target, cmap="rainbow") 17 18def main(): 19 wine = load_wine() 20 ss = StandardScaler() 21 X = ss.fit_transform(wine.data) 22 23 pca = PCA(n_components=2) 24 spca = SparsePCA(n_components=2, 25 max_iter=3000, 26 n_jobs=-1, 27 normalize_components=True) 28 29 fig, axes = plt.subplots(figsize=(12, 6), nrows=1, ncols=3) 30 plt.xlim(-3, 3) 31 32 X_2d = pca.fit_transform(X) 33 biplot(X_2d, pca.components_, wine.target, axes[0]) 34 axes[0].set_title("PCA") 35 36 for i,alpha in zip([1, 2], [0.5, 5]): 37 spca.set_params(alpha=alpha) 38 X_2d = spca.fit_transform(X) 39 biplot(X_2d, spca.components_, wine.target, axes[i]) 40 axes[i].set_title("SPCA alpha={:.2f}".format(alpha)) 41 # plt.savefig("result.png") 42 43 # 図と突き合わせて確認するために特徴量の名前を出力しておく 44 for i, name in enumerate(wine.feature_names): 45 print(i, name) 46 47if __name__ == "__main__": 48 main()
上記のコードの、ローカル関数(main)の中で、以下の通り、X軸を-3から3に指定しています。
python
1plt.xlim(-3, 3)
しかしこの結果、出力されたグラフは
subplotの一番右のグラフにしか、このX軸指定が反映されていません。
これを、それぞれのグラフごとに個別に軸指定するコードの挿入方法をご教示いただけませんでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/15 15:43