tags:

views:

91

answers:

2

I'd like to zoom in on a plot using a script. I'm only interested in horizontally constrained zooming. So I'd like to do something like

p = plot(myData);
z = zoom;
set(z, 'ZoomInToPoints' , [50 100]);

or

p = plot(myData);
myZoom([50, 100]);

So either of these functions would zoom into a plot like when you zoom in with the magnifying glass tool. I only specify two points because I only want to zoom horizontally.

Note, I've already tried to use xlim for this. While it works, it doesn't let me use the command text on my plots, which I need.

A: 

Calls to text will fix the text at a specific set of coordinates on the graph. Have you tried updating these after calling xlim?

EDIT: You can always adjust the text position:

x=1:.1:10;
y=sin(.1*x);
plot(x,y)
text(6,.8,'test') %#Sample figure

F=get(0,'children'); %#Figure handle
A=get(F,'Children'); %#Axes handle
T=findobj(A,'Type','text'); %# Text handle
oldxlim=xlim; %#grab the original x limits before zoom
oldpos=get(T,'Position'); %#get the old text position
set(A,'xlim',[5 15]); %#Adjust axes
newxlim=xlim;
newpos=[(oldpos(1)-oldxlim(1))*(diff(newxlim))...
/(diff(oldxlim))+newxlim(1) oldpos(2:end)]; 
%#interpolate to place the text at the same spot in the axes
set(T,'Position',newpos) %#Finally reset the text position

Not pretty, but it should work. If you have more than one annotation per axes or axes per figure, you can always throw the above code in a loop.

Doresoom
I have too many calls to text to change them now.
devin
A: 

What is the problem with text and xlim? Is this not the type of behavior you want?

plot(1:100,randn(100,1))
text(80,1.5,'text')
set(gca,'XLim',[70 100]) % notice that text stays at same point in "data space" but moves in "axis space"
text(80,1,'text2'); % new text appears in axis space as well

If I'm misunderstanding and you want text to appear at a specific point in your axis space (not the data space that text uses) regardless of how zoomed in you are, you can create another set of axes for your text:

inset_h = axes('position',[0.5 0.5 0.2 0.2])
set(inset_h,'Color','none'); axis off
text(0,0,'text')
Matt Mizumi

related questions