2016-03-27 7 views
2

私は、MATLAB環境に慣れていないと私は点としてマトリックス各セルを提示方法で行列を描きたい 3D空間内にある。メッシュプロットのサーフタイプを使用せずに、MATLABでの3D空間でマトリックスをプロット

例えば、点x = 3、yに達するまで、 x = 1、y = 1z = 10、x = 1、y = 3z = 27の現在の行列 "A" = 3、z = 26である。

A = 
    10 15 27 
    56 87  2 
    90 87 26 

メッシュとサーフィンを使用したくありません。私はplot3 digramのような図を探しています。私はplot3を試みましたが、zの値は正しく表示されません。上記の図で

enter image description here

i=1:3; 
j=1:3; 
plot3(i,j,A(i,j)) 
。 3値は、x = 3、y = 3の場合に表示されますが、x = 1、y = 3の場合はこれらの値を表示する必要があります。 X = 2、Y = 3; X = 3、yはあなたが ndgrid使用する必要があり、3

+0

あなたはどんな結果を探しているのですか?たぶん[scatter3](http://www.mathworks.com/help/matlab/ref/scatter3.html)? 「zの値が正しく表示されない」とはどういう意味ですか? – beaker

+0

@ビーカー私は、*を説明するために数字を追加しますが、*の値は正しく表示されません。* *。すべてのポイントを表示するには、どのようにコマンドscatter3を書くべきですか? – Suri

答えて

3

。私はxyの代わりに、ijを使用します。多くの言語では、これらの記号は、より典型的には、スカラーインデックスではなく、完全なベクトルのインデックスに使用され、Matlabの中で、彼らは(彼らは複素数を表すために使用されている)特別な重要性を持つことができます。あなたが唯一の3つの指標を生成していますが、あなたのマトリックスにプロットするために9個の値を持っているi=1:3;あなたの声明で、言っ

。これらの3つの指標を繰り返さなければなりません(あなたの場合は3回、各列につき1回)。だから、適切なxy世代は次のようになります。

あなたの利便性scatter3plot3で使用することができるものと
%% // Manual mesh/coordinate generation 
x = bsxfun(@times,1:size(A,1), ones([size(A,2) 1])) ; 
x = x(:) ; 

y = bsxfun(@times, ones([1 size(A,1)]) , (1:size(A,2)).') ; 
y = y(:) ; 

hscat = scatter3(x, y, A(:)) ; 
hp3 = plot3(x, y, A(:),'Marker','o','LineStyle','none') ; 
%// will both produce exactly the same result 

今私が発生したウェイという事実を考慮してください。 xy座標はmeshgridがあなた(またはndgrid以上の次元汎用)のために何をするのか以外の何ものでもありません。例えば

は、以下のコードでは、3つの作図方法はこれだけお好きなところをお選びください、上記以外まったく同じ出力に含まを生成します:あなたは手元に1を持っているとき

%% define a grid 
[X,Y] = meshgrid(1:size(A,1) , 1:size(A,2)) ; 

%% // surface plot (but only points visible, no line) 
hsurf = surf(X,Y,A,'Marker','o','LineStyle','none','FaceColor','none') ; 

%% // scatter3 
hscat = scatter3(X(:), Y(:), A(:)) ; 

%% // plot3 
hp3 = plot3(X(:), Y(:), A(:),'Marker','o','LineStyle','none') ; 

なぜ車輪の再発明.. 。meshgridあなたのために、より少ないコードの指示で仕事をしてください;-)

+0

ありがとうございます – Suri

0

座標を生成する=:

[X, Y] = ndgrid(1:3, 1:3); 

plot3が起こっている(X及びYスワップ又はmeshgridを、。)ラインで入力点を接続するので、あなたがあなたのプロットに明確なポイントが必要な場合は、scatter3を使用する:

scatter3(X(:), Y(:), A(:)); 

(あなたが行をしたい場合にも、同じようにplot3を使用することができます。)私はあなたの変数名を変更するには、あなたをお勧めします開始するに

+0

あなたのコマンドは私が望むものを作成しません。 2次元のプロットを作成します。 – Suri

+0

私は3つの異なる座標ベクトル2を渡している場合、どのように表示されません2 3次元散布図。 – beaker

+0

ところで、ホキの答えは私のものよりはるかに完全ですが、最後の 'meshgrid/scatter3'ソリューションはほぼ同じです。 – beaker

関連する問題