我有三个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
现在,如果我尝试使用以下代码段绘制U
:
figure;
mesh(X, Y, U);
这是输出:
如果我使用以下代码:
figure;
hold on;
mesh(X, Y, U);
我明白了:
为什么会这样?显然没有hold on
我还有一个维度。我不知道哪一个是正确的。为什么Matlab会这样做?
答案 0 :(得分:7)
要了解正在发生的事情,重要的是要知道对于大多数MATLAB绘图命令,如果没有向命令显式提供axes
,则默认使用当前axes
。如果不存在axes
,则创建一个并且它的外观完全由绘图命令控制。如果是当前axes
对象,通常情节命令将不修改axes
对象的外观,因为理论上您已经定制它
hold on
修改当前轴的NexPlot
属性,以便绘制的下一个对象不会覆盖以前的对象。如果当前不存在axes
,hold
将隐式创建axes
对象。此新轴对象的默认视图是2D XY视图。由于当您调用axes
时,mesh
对象现已存在,因此它只使用当前视图(和其他axes
参数)而不是更改它。
如果您未致电hold on
,则在致电axes
之前不会出现mesh
,因此mesh
会自行创建默认axes
个对象具有可视化网格的理想属性。这包括使用3D视图和显示网格线。
您可以通过调用axes
来手动更改hold on
创建的view(3)
的属性,以使用默认的3D视图和grid on
来打开网格标记
figure
hold on
% Make it the default 3D view
view(3)
% Show the gridlines
grid on
mesh(X, Y, U)