###前提・実現したいこと
Python初心者です。
1人3属性からなる1000件ほどのデータを、3次元の散布図として描写したいです。
属性一つ一つがそのままX,Y,Zに対応するイメージです。
さらにZ軸の高低により色付けも行ない、グラデーション状のカラーマップも描写したいです。
例)
- X軸=属性1=年齢/20~89の範囲
- Y軸=属性2=週に何度運動をするか/0~7の範囲
- Z軸=属性3=体重/30~150の範囲
これ↑で描写を行なって体重が軽ければ寒色・重ければ暖色のグラデーションを付ける。
体重が重い人が多く位置するデータから属性の傾向を見極めたいというのが最終的にやりたいことです。
###試したこと
まずmatplotlibで3Dグラフを描画するを参考に描写ロジックを書きました。
が、Z軸に相当するデータをどのように作ればよいかが分かりません。
X軸Y軸は元データがあるため、生データの配列を直接指定し、サンプルコードの通りmeshgridと通して生成しています。
Z軸にも生の配列をどうにかしてセットしたいところですが、meshgridを通したX,Yに対してどのように与えるべきかが分からず。。
次にSciPy+matplotlibで3D散布図を作成(Python)を参考に別のアプローチで書いてみました。
X,Y,Zに相当するCSVを手動で作成し、それを元データとして読み込み、単純な描写としては概ね意図通りの表示ができました。
ただこれにカラーマップを追加する方法が分からず、色も手動で指定していたためグラデーションにできていません。
※例えば元データZのパーセンタイル10で分割してグラデーションした10色を宣言して一つ一つ色を変えて…等やればできるのだと思いますが、もっとシンプルかつ簡単にできないものか?と思っています。
↓cmap=plt.cm.bwr
こんな感じで書けないのかなー?っていう。
Python
1from mpl_toolkits.mplot3d import Axes3D 2import matplotlib.pyplot as plt 3import matplotlib.cm as cm 4 5fig = plt.figure(figsize=(10, 5)) 6ax = fig.add_subplot(111, projection='3d') 7p = ax.scatter3D(X, Y, Z, s=3, c=Z, cmap=plt.cm.bwr) 8fig.colorbar(p)
###補足情報(言語/FW/ツール等のバージョンなど)
Windows 10 64
Python 3.6.1
numpy.version.version 1.13.1
matplotlib.version 2.0.2
###最後に
そもそも勘違いしている、意図したことをもっと簡単にできるよ!この情報が足りてない、、等々ありましたらご指摘ください。
メインC#歴10年で、Pythonは今回必要に迫られて初めて触ります。
元データの整形や縦横変換、トリミングなどの元データ編集は自在にできると思っていただいてOKです。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/24 06:42