matlab:plot3は、3番目の軸を表示しません
質問
私がプロットするために使用している3つの変数はすべてサイズのマトリックスです 1x1x100
. 。このコード行を使用してプロットしています。
hold on;
for i=1:100
plot3(R_L(:,:,i),N_Pc(:,:,i),CO2_molefraction_top_of_window(:,:,i),'o');
xlabel('R_L');
ylabel('N_P_c');
zlabel('CO_2')
end
しかし、私は3番目の軸を取得していないため、3番目の変数を取得しています CO2_molefraction_top_of_window
プロットで。どこが間違っているのかわかりますか?
上記の質問に加えて、同じテーマでは、使用して描画できる3次元プロットのように4次元プロットをプロットできるオプションがあるかどうかを知りたい plot3
?
解決
ただのメモ---あなたはする必要があります xlabel
ylabel
zlabel
一度コマンド(ループの外側)。
また:
- あなたのマトリックスがある理由はありますか
1x1x100
ただの代わりに100x1
また1x100
?それらを2Dに変更すると、1回のヒットでプロットを行うことができるためです。 - 「3番目の軸の欠落」とはどういう意味ですか?私があなたのコードを実行するとき(またはあなたが再現可能な例を提供しなかったので、私が得ることができる限り近くにあるとき)、私は 行う 3番目の軸を取得します:
.
X = rand(1,1,100); % 1x1x100 X matrix
Y = rand(1,1,100); % 1x1x100 Y matrix
Z = rand(1,1,100); % 1x1x100 Z matrix
% Now, we could do a for loop and plot X(:,:,i), Y(:,:,i), Z(:,:,i),
% OR we can just convert the matrix to a vector (since it's 1x1x100 anyway)
% and do the plotting in one go using 'squeeze' (see 'help squeeze').
% squeeze(X) converts it from 1x1x100 (3D matrix) to 100x1 (vector):
plot3(squeeze(X),squeeze(Y),squeeze(Z),'o')
xlabel('x')
ylabel('y')
zlabel('z')
これにより、3つの軸をはっきりと見ることができます。
グラフを「もっと3D」に見せたいのはグリッドラインなら、試してみてください grid on
(これはMATLABヘルプファイルの例にあります plot3
, 、 試す help plot3
MATLABプロンプトから):
grid on
「3番目の軸の欠落」をもう少し明確にする必要があります。
他のヒント
そのため、使用するときに同じ問題が発生しました plot3
. 。何らかの理由で、 hold on
コマンドプロットを「フラット化」します。理由はわかりませんが、操作と関係があると思います hold on
プロットで実行します。編集:明確にするために、3Dプロットはまだそこにありますが、視点は変化することを余儀なくされています。 「Rotate 3D」ツール(キューブの周りに矢印が付いたもの)を使用すると、グラフが3Dであることがわかります。デフォルトの視点はまっすぐであるため、2つの軸のみが表示され、平らに見えます。
私は同様の問題に出会いました、そして @DrofDarbのように hold on
1つの軸を平らにしているようです。これが私のコードのスニペットです、これが役立つことを願っています。
for iter = 1:num_iters:
% hold on;
grid on;
plot3(tita0,tita1, num_iters,'o')
title('Tita0, Tita1')
xlabel('Tita0')
ylabel('Tita1')
zlabel('Iterations')
hold on; % <---- Place here
drawnow
end
とは対照的に:
for iter = 1:num_iters:
grid on;
hold on; % <---- Not here
plot3(tita0,tita1, num_iters,'o')
title('Tita0, Tita1')
xlabel('Tita0')
ylabel('Tita1')
zlabel('Iterations')
% hold on;
drawnow
end