2016-12-13 16 views
1

私は、4次元として色を使用して4次元配列をプロットしようとしています。ここに私の行列のサンプルです:私はこのスクリプトを使用して、それをプロットしてみたときにMatplotlib 4Dデータ(2D配列)

[[ 4.216 0.  1.  0. ] 
[ 5.36 0.  1.  0. ] 
[ 5.374 0.  2.  0. ] 
..., 
[ 0.294 0.  1.  0. ] 
[ 0.314 0.  2.  0. ] 
[ 0.304 0.  1.  0. ]] 

4列目は唯一ので値が0、1、2

が含まれています

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
ax.scatter(data[:,0],data[:,1],data[:,2], c=data[:,3], cmap=plt.hot()) 
plt.show() 

私はこのエラーが発生する:

TypeError: can't multiply sequence by non-int of type 'float' 
+0

プレーンリストではなく、numpy配列を使用する –

答えて

2

これは4Dアレイではありません。これは4列の2次元配列です(2次元は「行」と「列」と呼ばれることがあります)。しかし、私はあなたが何を言おうとしているのかを見ています。それぞれの行は、4番目の「次元」が色である4次元空間の点を記述するものとして解釈できます。

実際には、2次元性が問題の鍵です。あなたのdata変数がバニラnumpy.arrayではなくnumpy.matrixであると思われます。 .scatter()が各引数があることを想定し、一方matrixは、それのスライス(例えば、data[:, 0])は依然として 2次元matrixオブジェクトであるという事実を含む様々な特別な性質を有する2次元アレイの特定のクラスであります1次元アレイ。

data = numpy.asarray(data) 

その列のスライス1次元となり、通常の配列にmatrixからデータを変換する:

修正が言うことです。

ところで、あなたはおそらくcmap='hot'と言っていました。 plt.hot()を呼び出すと、デフォルトのカラーマップが設定されます(図が正しく表示されるかもしれませんが、副作用があります)。実際にはNoneを返します。