필터 지우기
필터 지우기

Change axes limits interactively

조회 수: 25 (최근 30일)
Johannes
Johannes 2017년 4월 25일
댓글: Johannes 2017년 4월 27일
Hi everybody,
I would like to change the axes limits of my 2D plots in my GUI interactively. This means that it want to click on one of the axes limits (min/max at x or y), then enter a new limit and finally automatically refresh the plot. In other software (e.g. LabVIEW), this functionality is available by default. However, in MATLAB it seems to require a work-around. I already got the hint to try the 'ButtonDownFcn' callback and the 'CurrentPoint' function. However, right now I am struggling to enter the text. If this would work, it should be straight forward as I could simply execute a set('xLimÄ',...) command with the exact same limit I entered as a text before. Therefore, I'd like to ask if anybody knows how to enter text at the location of the 'CurrentPoint'.
Thank you very much for you help!
Best regards, Johannes
  댓글 수: 2
AstroGuy1984
AstroGuy1984 2017년 4월 25일
I'm confused as to how you wish to query the user for the new limit? Is the idea that the user clicks the axis and gets a prompt to enter the new limit they want? How do you wish that prompt to appear? A popup? In the shell? Once you get that, you can certainly use the set() command you're desiring to use.
As another option, I have a similar need for interactive limits in a GUI I am writing. What I did is to make several fields (four of them) where the user can enter the limits as they desrie and the plot automatically updates. I also have buttons for log/lin scale which are useful for my purposes.
Johannes
Johannes 2017년 4월 26일
Basically, I want to replicate the behavior of other software such as LABVIEW. I attached a series of screenshots showing the axes manipulation for illustration. I already thought about using a popup (many thanks to Joseph for pointing it out as well) but the procedure in Labview is much more convinient to my opinion.

댓글을 달려면 로그인하십시오.

채택된 답변

Joseph Cheng
Joseph Cheng 2017년 4월 25일
you can try something like this, which really depends on how you want the user to input the different limits
function uiexample
% Create a figure and axes
f = figure('Visible','on');
ax = axes('Units','pixels');
plot(peaks)
xlab = xlabel('x');
ylab = ylabel('y');
set(xlab,'ButtonDownFcn',{@updateplot,ax,1})
set(ylab,'ButtonDownFcn',{@updateplot,ax,2})
infotext = 'click on axis labels to enter new limits';
htext = uicontrol('style','text','string',infotext,...
'position',[0 0 5*numel(infotext) 20])
end
function updateplot(hObject,event,axhandle,XorY)
XLim = axhandle.XLim;
YLim = axhandle.YLim;
name='Input for plot limits';
numlines=1;
switch XorY
case 1
prompt={'Enter Xmin:','Enter Xmax:'};
defaultanswer={num2str(XLim(1)),num2str(XLim(2))};
XLim=cell2mat(inputdlg(prompt,name,numlines,defaultanswer));
axhandle.XLim = str2num(XLim)';
case 2
prompt={'Enter Ymin:','Enter Ymax:'};
defaultanswer={num2str(YLim(1)),num2str(YLim(2))};
YLim=cell2mat(inputdlg(prompt,name,numlines,defaultanswer));
axhandle.YLim = str2num(YLim)';
end
end
  댓글 수: 3
Joseph Cheng
Joseph Cheng 2017년 4월 26일
Johannes
Johannes 2017년 4월 27일
Thank you very much Joseph. This solvent my problem!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Specifying Target for Graphics Output에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by