Note: I just uploaded images that show the problem I'm experiencing. While this problem is not pressing, I am curious as to whether this is not resolvable or simply a product of my poor handle on the hierarchy for figures, axes and the data plotted on them. So, despite the belated nature of this update, any expertise that could be lent would be met with appreciation!
When zooming, 3D plotted data exceeds uipanel extent despite axes being clipped
1 view (last 30 days)
Show older comments
I'm working with a GUI which has a number of uicontrols as well as a set of axes. I would like the user to be able to zoom in on data plotted in the axes without the axes filling up the entire GUI.
To accomplish this, I've placed the axes inside a uipanel. This seems to work for the empty axes, as the axes do not exceed the bounds of the panel, even when zoomed.
However, this does not seem to work for data plotted in the axes. While the axes plot area is confined or clipped to the uipanel area, the data exceeds the bounds and overfills the GUI when the zoom feature is used.
The below code reproduces my problem. After the first seven lines, the axes still remain confined. After running the eighth line, zooming in and out on the plotted data shows the problem.
f = figure;
p = uipanel('Position',[0.1 0.1 0.8 0.8],...
'Clipping','on');
a = axes('Parent',p,...
'Position',[0.2 0.2 0.6 0.6]);
plot3(1,1,1)
cla
points = [1 1 4 4 1; 0.5 0.5 -0.5 -0.5 0.5; 1 3 3 1 1];
plot3(points(1,:),points(2,:),points(3,:),'r');
Here are two images, one set to default zoom and one zoomed in enough to show the problem:
3 Comments
Silvia
on 24 Feb 2014
Hi Evan,
I have the same problem you are telling us. Did you solve it? How did you solve it? clipping is not working. Thank you very much.
Accepted Answer
More Answers (3)
Jan
on 2 Aug 2013
Edited: Jan
on 2 Aug 2013
As usual for such bugs, it is required to know the Matlab version you are using. Perhaps you are talking about the documented bug 223595:
Text clipping does not work when the axes is on a uipanel using Painters renderer.
But you graphics are not text. But try the workarounds (other renderers) in spite of this.
You find a lot of clipping problems for uipanel, when you ask your favorite internet search engine. Notice that the clipping of the line object might be controlled by the 'Clipping' property of the line object, although it would be more intuitive if this property is inherited from the parent axes. So what happens for:
plot3(points(1,:),points(2,:),points(3,:),'r', 'Clipping', 'on');
But I do not expect this to work, because the documentation states, that the default value is 'on' already.
1 Comment
Bineet_Mehra
on 2 May 2016
I have the same problem. For one 3D figure, setting axis limits does not work. any suggestion ? Thanks ;;; Using old verison R2010b
B Hiriyur
on 31 Mar 2013
Apparently axes are by default, big brothers to panels as they are higher up in the stack order. I use the following piece of code after plotting 3D data to manually force a panel to be the older child of the parent figure.
% Reset Stack order
hp = get(gca,'Parent');
hc = get(hp,'Children');
if length(hc)==2
if strcmpi(get(hc(1),'type'),'axes') && strcmpi(get(hc(2),'type'),'uipanel')
set(hp,'Children',[hc(2);hc(1)]);
end
end
This forces the axes to be hidden behind the panel when zooming.
See Also
Categories
Find more on Graphics Object Programming in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!