前提・実現したいこと
三次元空間でデータの散布図を書きたい
sklearn のデータセットを使ってデータをプロットします。 二次元空間にプロットする関数は作れるのですが、三次元空間版の関数が作れません。 以下二次元版 import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_blobs import pandas as pd x,y=make_blobs(n_samples=200 ,n_features=2, centers=3, random_state=0) def dataplot_function_2D(x,y): plt.plot(x[:,0][y==0],x[:,1][y==0],"bo",ms=15) plt.plot(x[:,0][y==1],x[:,1][y==1],"r^",ms=15) plt.plot(x[:,0][y==2],x[:,1][y==2],"gs",ms=15) plt.xlabel("feature1") plt.ylabel("feature2") plt.figure(figsize=(12,8)) dataplot_function_2D(x,y) 以上ので二次元版は描画できます。 では、三次元版ではどの様な関数を書けばいいのでしょうか?
試したこと
x,y=make_blobs(n_samples=200 ,n_features=3, centers=3, random_state=0) 特徴量を一つ増やして次元を増やし、データをxに格納 def dataplot_function_3D(x,y): plt.plot(x[:,0][y==0],x[:,1][y==0],x[:,2][y==0],"bo",ms=15) plt.plot(x[:,0][y==1],x[:,1][y==1],x[:,2][y==1],"r^",ms=15) plt.plot(x[:,0][y==2],x[:,1][y==1],x[:,2][y==2],"gs",ms=15) plt.xlabel("f1") plt.ylabel("f2") plt.zlabel("f3") この様に書いてみましたが、plt.zlabelはありません。 ネットで調べた様に from mpl_toolkits.mplot3d import Axes3D x,y=make_blobs(n_samples=200 ,n_features=3, centers=3, random_state=0) a=x[:,0] b=x[:,1] c=x[:,2] fig=plt.figure(figsize=(6,6)) ax=Axes3D(fig) ax.scatter(a,b,c,marker="o",linestyle='None') plt.show() 以上の様に書けば一応グラフは書けますが、色分けはできません。 二次元版の関数の様な構造(以下)を持ち plt.plot(x[:,0][y==0],x[:,1][y==0],x[:,2][y==0],"bo",ms=15)、 かつ色分けをしっかりできる三次元版の関数はどう書けばいいでしょうか?
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー