0

我用来绘制的所有三个变量都是 size 的矩阵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

但是,我没有得到第三个轴,因此没有得到CO2_molefraction_top_of_window图中的第三个变量。我可以知道我哪里错了吗?

除了上述问题,但在同一主题上,我想知道是否有任何选项可以绘制 4 维图,就像可以使用绘制的 3 维图一样plot3

4

3 回答 3

4

所以我在使用时遇到了同样的问题plot3。出于某种原因,使用hold on命令“展平”情节。我不知道为什么,但我怀疑这与hold on情节上的操作有关。编辑:澄清一下,3d 情节仍然存在,但视角已被迫改变。如果您使用“旋转 3D”工具(带有围绕立方体的箭头的工具),您可以看到图形是 3d 的,默认透视是直的,因此只有两个轴可见并且看起来是平的。

于 2017-05-29T00:28:50.960 回答
1

请注意 --- 您只需执行xlabel ylabel zlabel一次命令(在循环外)。

还:

  • 你的矩阵有什么理由1x1x100而不是 just 100x1or 1x100?因为如果您将它们重塑为 2D,您可以一键完成绘图。
  • “缺少第三轴”是什么意思?当我运行您的代码时(或尽可能接近,因为您没有提供可重现的示例),我确实得到了第三轴:

.

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')

这给出了以下内容,您可以在其中清楚地看到三个轴: 在此处输入图像描述

如果您想让图形看起来“更 3D”是网格线,请尝试grid on (在 Matlab 帮助文件中的示例中,请从 Matlab 提示符plot3中尝试):help plot3

grid on

在此处输入图像描述

您将不得不进一步澄清“缺少第三轴”。

于 2012-02-20T23:19:44.293 回答
1

我遇到了一个类似的问题,正如@Drofdarb 的那样,hold on似乎使一个轴变平。这是我的代码片段,希望对您有所帮助。

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

在此处输入图像描述

于 2019-04-13T08:26:12.487 回答