How to bring a plot to the front or back among multiple plots

1,061 views (last 30 days)
Liqing on 24 Feb 2012
Edited: Walter Roberson on 15 Jul 2021
I have some interpolated ocean data that goes to land. I am thinking to first plot the interpolated values using 'scatter', and then plot the map using 'fill'. But the problem is that, it does not matter which one I plot first, the scatter plot is always on top. My question is how do I bring the scatter plot to back (behind the fill plot)?
Thank you,

Accepted Answer

Walter Roberson
Walter Roberson on 24 Feb 2012
Are you using transparency? Or does
get(gca, 'Renderer')
return OpenGL ?
If so then note that OpenGL does not pay attention to the child order: it works in (projected) Z order. It also has rules about what happens if there is a line and a surface in the same plane: the order is determined by the graphic type. I never bothered to remember which order OpenGL defines in this case, as I have encountered graphics driver that get the order exactly backwards.
In the case of OpenGL, you need to make sure that the item that you want to be on "top" has a higher (projected) Z coordinate, closer to the front from the perspective of the viewer. That can involve using scatter3() instead of scatter() and specifying a constant Z coordinate above or below the implied Z=0 of other objects.

Sign in to comment.

More Answers (3)

the cyclist
the cyclist on 24 Feb 2012
The "Children" property of the axis is a list of the handles of the objects on the plot. In general, the order of that list determines the layering.
Here is a simple example where I manipulate the order of that list:
[EDITED in response to comment.]
hold on
fill([0.2 0.5 0.5 0.2],[0.2 0.2 0.5 0.5],'r')
hg = line([0 0.6],[0.6 0]);
h = get(gca,'Children');
set(gca,'Children',[h(3) h(2) h(1)])

Sign in to comment.

Aniruddh Murali
Aniruddh Murali on 7 Dec 2017
I have an image and two points. Each point should have its trail shown and the image should be changed each time. How do I do that?
Austin Coleman
Austin Coleman on 1 Apr 2021
lol this guy was irritated. If you took the time to respond to a "4 year old question" just answer the question hahaha

Sign in to comment.

Thelanorth on 26 Feb 2019
What worked for me, I wanted to draw some lines etc. over a data, was to just use plot3([x1 x2],[y1 y2],[z1 z2]) ipv plot([x1 x2],[y1 y2]).
This means that just adding a z coordinate higher than you data might work.


Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!