2017-10-22 15 views
0

整数値を持つ3D NumPy配列をプロットしようとしています。mplot3dとnumpy配列を使用して3Dグリッドをプロットするにはどうすればよいですか?

import numpy as np 

def build(self): 
    grid = np.empty((10,10,10)) 
    grid = grid.astype(np.int) 
    grid.fill(-1) 
    return grid 

上記の方法では、3Dグリッドを作成し、-1の値で塗りつぶします。この場合、-1は空のセルの表現になります。

たとえば、位置(0,0,0)、(0,0,1)y(5,5,5)の3つの要素をこのグリッドに配置するプロット後に同じ数の要素が表示されない。ここに画像を添付します

画像の右側に4番目の要素があります(マイナー階調があります)。下記の通り、グリッドをプロットする

私のコードは次のとおりです。

import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 

def plot_grid(self, np_grid): 
     fig = plt.figure() 
     ax = fig.add_subplot(111, projection='3d') 
     x = np_grid.sum(0) 
     y = np_grid.sum(1) 
     z = np_grid.sum(2) 
     ax.scatter(x, y, -z, zdir='z', c='red') 
     plt.show() 

私は私が正しくx,y,zベクトルを得ていないと思います。 ndarrayからx,y,zをどうやって得ることができますか?

+0

ここのアプローチは理解できません。 「(0,0,0)、(0,0,1)y(5,5,5)」が何をすべきかを含む[mcve]を入力し、何が起こるべきかを明確に説明してください。すでに 'grid.fill(-1)'が配列のどこにでも-1を置いて、最初の軸を合計すると、どこにでも10 *( - 1)が与えられます。 – ImportanceOfBeingErnest

答えて

1

私はあなたの問題は、あなたが自分自身の配列としてx、y、zを渡す必要があるということであると信じて:

import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
ax.scatter((0,0,5),(0,0,5),(0,1,5),zdir='z', c='red') 

これはあなたにこのようなプロットを与える必要があります。

enter image description here

+1

質問が誤解されていない限り、 – erasmortg

+0

ご返信ありがとうございます。あなたは私の質問をよく理解しました。私の間違いは、 'x、y、z'ベクトルの作り方を知らなかったことです。あなたの答えで、あなたは私がそれをやり遂げる方法を説明しました。 私は別のベクトルで印刷したい要素の座標を取らなければなりません。 –

関連する問題