I've three 5x5 matrices, i.e. X, Y and U. Here's how they look like.
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
Now if I try to plot U using the following snippet:
figure;
mesh(X, Y, U);
This is the output:

If instead I use the following code:
figure;
hold on;
mesh(X, Y, U);
I get:

Why is this happening? Apparently without hold on I've one more dimension. I don't know for my case which one would be correct. Why does Matlab does this?
To understand what is happening, it's important to know that for most MATLAB plotting commands, if no axes is explicitly supplied to the command, the current axes is used by default. If no axes exists, one is created and it's appearance is controlled completely by the plotting command. If there is a current axes object, typically the plot command will not modify the appearance of the axes object since in theory you have already customized it.
hold on modifies the NexPlot property of the current axes so that the next object that's plotted won't overwrite previous objects. If no axes currently exists, hold will implicitly create an axes object. The default view of this new axes object is a 2D XY view. Since an axes object now already exists when you call mesh, it just uses the current view (and other axes parameters) rather than altering it.
In the case where you don't call hold on, no axes is present before calling mesh, so mesh creates a default axes object itself with properties that are ideal for visualizing a mesh. This includes using a 3D view and displaying grid lines.
You can manually change the properties of the axes created by hold on by calling view(3) to use the default 3D view and grid on to turn on the grid marks
figure
hold on
% Make it the default 3D view
view(3)
% Show the gridlines
grid on
mesh(X, Y, U)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With