В Matlab, как я могу увеличить график в моем скрипте

Я хотел бы увеличить сюжет с помощью сценария. Меня интересует только масштабирование по горизонтали. Поэтому я хотел бы сделать что-то вроде

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

or

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

Таким образом, любая из этих функций будет увеличивать график, как если бы вы увеличивали масштаб с помощью инструмента увеличительного стекла. Я указываю только две точки, потому что хочу масштабировать только по горизонтали.

Обратите внимание, я уже пытался использовать xlim для этого. Пока он работает, он не позволяет мне использовать команду text на моих участках, которые мне нужны.


person devin    schedule 02.08.2010    source источник
comment
Что вы имеете в виду, что я не могу использовать команду text после использования xlim? Функция xlim просто устанавливает пределы по оси x. Это не должно влиять на вызовы text.   -  person gnovice    schedule 02.08.2010
comment
Ни один из текстов на самом деле не отображается на сюжете. Возможно, он все еще работает, но размещает текст не в том месте.   -  person devin    schedule 02.08.2010
comment
Я довольно зум не решу вашу проблему. Вам придется отредактировать расположение текста.   -  person Doresoom    schedule 02.08.2010
comment
Ну, когда я увеличиваю изображение с помощью увеличительного стекла, все работает нормально. Нет ли способа увеличить масштаб, введя команду в моем сценарии?   -  person devin    schedule 02.08.2010
comment
Такое поведение немного странное. Возможно, вы можете предоставить нам больше своего кода, чтобы мы могли увидеть, есть ли что-то еще, вызывающее эту проблему.   -  person Geodesic    schedule 03.08.2010


Ответы (2)


Вызовы text зафиксируют текст в определенном наборе координат на графике. Вы пытались обновить их после вызова xlim?

EDIT: вы всегда можете изменить положение текста:

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

Не красиво, но должно работать. Если у вас есть более одной аннотации на оси или оси на фигуру, вы всегда можете запустить приведенный выше код в цикле.

person Doresoom    schedule 02.08.2010

В чем проблема с text и xlim? Разве это не тот тип поведения, который вам нужен?

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

Если я неправильно понимаю, и вы хотите, чтобы текст отображался в определенной точке вашего пространства осей (а не пространства данных, которое использует text) независимо от того, насколько вы увеличены, вы можете создать другой набор осей для вашего текста:

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