nbr*_*bro 6 matlab plot matrix
我有3个5x5矩阵,即X,Y和U.这是他们的样子.
X =
0 0 0 0 0
0.2500 0.2500 0.2500 0.2500 0.2500
0.5000 0.5000 0.5000 0.5000 0.5000
0.7500 0.7500 0.7500 0.7500 0.7500
1.0000 1.0000 1.0000 1.0000 1.0000
Y =
0 0.2500 0.5000 0.7500 1.0000
0 0.2500 0.5000 0.7500 1.0000
0 0.2500 0.5000 0.7500 1.0000
0 0.2500 0.5000 0.7500 1.0000
0 0.2500 0.5000 0.7500 1.0000
U =
0 0.2474 0.4794 0.6816 0.8415
0.3093 0.5991 0.8519 1.0519 1.1862
0.7191 1.0224 1.2623 1.4238 1.4962
1.1929 1.4727 1.6611 1.7460 1.7220
1.6829 1.8980 1.9950 1.9680 1.8186
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试U使用以下代码段进行绘图:
figure;
mesh(X, Y, U);
Run Code Online (Sandbox Code Playgroud)
这是输出:
如果相反,我使用以下代码:
figure;
hold on;
mesh(X, Y, U);
Run Code Online (Sandbox Code Playgroud)
我明白了:
为什么会这样?显然没有hold on我还有一个维度.我不知道哪一个是正确的.为什么Matlab这样做?
要了解发生的情况,重要的是要知道对于大多数MATLAB绘图命令,如果没有axes显式提供给命令,则axes默认使用电流.如果不axes存在,则创建一个并且其外观完全由绘图命令控制.如果是当前axes对象,一般的情节命令将不会修改的外观axes对象,因为在理论上您已经自定义它.
hold on修改NexPlot当前轴的属性,以便绘制的下一个对象不会覆盖以前的对象.如果axes当前不存在,hold则将隐式创建axes对象.此新轴对象的默认视图是2D XY视图.由于axes当您调用时对象现在已经存在mesh,它只使用当前视图(和其他axes参数)而不是更改它.
如果您不调用hold on,axes则在调用之前不存在mesh,因此mesh创建一个默认axes对象本身,其属性非常适合可视化网格.这包括使用3D视图和显示网格线.
您可以通过调用以使用默认3D视图并打开网格标记来手动更改所axes创建的属性hold onview(3)grid on
figure
hold on
% Make it the default 3D view
view(3)
% Show the gridlines
grid on
mesh(X, Y, U)
Run Code Online (Sandbox Code Playgroud)