Question

When you plot things in Matlab, the most recently plotted data series is placed on top of whatever's already there. For example:

figure; hold on
plot(sin(linspace(0,pi)),'linewidth',4,'color',[0 0 1])
plot(cos(linspace(0,pi)),'linewidth',4,'color',[1 0 0])

Here, the red line is shown on top of the blue line (where they intersect). Is there any way to set "how deep" a line is drawn, so that you can plot things beneath what's already there?

Was it helpful?

Solution

Use the uistack command. For example:

h1 = plot(1:10, 'b');
hold on;
h2 = plot(1:10, 'r');

will plot two lines with the red line plotted on top of the blue line. If you then do:

uistack(h1);

the blue line will be brought to the front.

OTHER TIPS

You can also accomplish this by setting the order of the children vector of the current axes. If you do the following:

figure; hold on
h1 = plot(sin(linspace(0,pi)),'linewidth',4,'color',[0 0 1]);
h2 = plot(cos(linspace(0,pi)),'linewidth',4,'color',[1 0 0]);
h = get(gca, 'Children');

you will see that h is a vector that contains h1 and h2. The graphical stacking order is represented by the order of the handles in h. In this example, to reverse the stacking order you could do:

h = flipud(h);
set(gca, 'Children', h);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top