2017-06-22 6 views
0

私は3Dで視覚化しようとしている10x10x10 numpyの行列があります。matplotlibを使用して3D散布図で3D行列を色の値にマッピングするにはどうすればよいですか?

from mpl_toolkits.mplot3d import Axes3D 
M = np.random.rand(10, 10, 10) 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
counter = range(10) 
ax.scatter(counter, counter, counter, c=??) 

私は場所i,j,kで暗闇がM[i,j,k]で与えられる3Dプロットをしたいと思います。 Mscatter()に正確に転送するにはどうすればいいですか? 2次元アレイが必要なようですが、この場合どのように動作するのか分かりません。

+0

あなたが持っている散布は10点で構成されています。どのように1000ポイントのMを散布の10ポイントに分配したいですか? – ImportanceOfBeingErnest

答えて

0

散乱は色配列cよりも同数の点を必要とします。だから1000色のためには1000ポイントが必要です。

import matplotlib.pyplot as plt 
import numpy as np 

from mpl_toolkits.mplot3d import Axes3D 
M = np.random.rand(10, 10, 10) 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
counter = range(10) 
x,y,z = np.meshgrid(counter, counter, counter) 
ax.scatter(x,y,z, c=M) 


plt.show() 

enter image description here

+0

ありがとう!これはすでにいくつかのことをクリアしています。しかし、私はまだ 'M 'と'散らばっている'と混乱しています。例えば、 'M = np.random.rand(11,10,10)'にコードを切り替え、それ以外のものをそのまま残しておけば、 "ValueError:Color array is two-dimensional"というエラーが出ます。しかし、あなたの作業例では、それは三次元です.... – theQman

+0

ああ、おそらく誰かが3Dの場合にエラーメッセージを変更するのを忘れたからでしょう。私はこれを "色配列の形状が入力配列の形状と一致しない"かそれに類するものとして解釈します。それは常に同じです:あなたが1000ポイントを持っている場合は、1000色が必要です。1100色が必要な場合は、1100ポイント、1色あたり1ポイントが必要です。 – ImportanceOfBeingErnest

関連する問題