gusucode.com > demos工具箱matlab源码程序 > demos/hndlaxis.m
function hndlaxis(action) %HNDLAXIS Demonstrates Handle Graphics for axes in MATLAB. % This window allows you to assemble a string % of MATLAB commands that results in a plot in % the axis in the upper left corner. % % By playing with the popup menus on the right % side of the window, you can adjust the scaling % for the axes, the grid lines, the direction of the % plot and the color of the axes using Handle % Graphics. % % The MiniCommand Window in the lower % right shows the list of commands that create % the plot. If you like, you can even directly edit % the commands in the MiniCommand Window. % Type control-return to execute code in the % MiniCommand Window. % Ned Gulley, 6-21-93 % Copyright 1984-2014 The MathWorks, Inc. % Possible actions: % initialize % scale % grid % direction % color if nargin<1, action = 'initialize'; end; if strcmp(action,'initialize'), oldFigNumber = watchon; figNumber = figure( ... 'Visible','off', ... 'NumberTitle','off', ... 'Name',getString(message('MATLAB:demos:hndlaxis:TitleAxisObject'))); axes( ... 'Units','normalized', ... 'Position',[0.07 0.45 0.60 0.50]); % =================================== % Set up the MiniCommand Window top = 0.35; left = 0.05; right = 0.70; bottom = 0.05; labelHt = 0.05; spacing = 0.005; % First, the MiniCommand Window frame frmBorder = 0.02; frmPos = [left-frmBorder bottom-frmBorder ... (right-left)+2*frmBorder (top-bottom)+2*frmBorder]; uicontrol( ... 'Style','frame', ... 'Units','normalized', ... 'Position',frmPos, ... 'BackgroundColor',[0.50 0.50 0.50]); % Then the text label labelPos = [left top-labelHt (right-left) labelHt]; uicontrol( ... 'Style','text', ... 'Units','normalized', ... 'Position',labelPos, ... 'BackgroundColor',[0.50 0.50 0.50], ... 'ForegroundColor',[1 1 1], ... 'String',getString(message('MATLAB:demos:hndlaxis:LabelMiniCommandWindow'))); % Then the editable text field mcwPos = [left bottom (right-left) top-bottom-labelHt-spacing]; mcwHndl = uicontrol( ... 'Style','edit', ... 'HorizontalAlignment','left', ... 'Units','normalized', ... 'Max',10, ... 'BackgroundColor',[1 1 1], ... 'Position',mcwPos, ... 'Callback','hndlaxis(''quickeval'')', ... 'String',[' ',getString(message('MATLAB:demos:hndlaxis:LabelPressButtonsAtTheRightForExamplePlots'))]); % Save this handle for future use set(gcf,'UserData',mcwHndl); % ==================================== % Information for all buttons labelColor = [0.8 0.8 0.8]; top = 0.95; bottom = 0.05; left = 0.75; yInitLabelPos = 0.90; left = 0.75; labelWid = 0.20; labelHt = 0.05; btnWid = 0.20; btnHt = 0.05; % Spacing between the label and the button for the same command btnOffset = 0.003; % Spacing between the button and the next command's label spacing = 0.05; % ==================================== % The CONSOLE frame frmBorder = 0.02; yPos = 0.05-frmBorder; frmPos = [left-frmBorder yPos btnWid+2*frmBorder 0.9+2*frmBorder]; h = uicontrol( ... 'Style','frame', ... 'Units','normalized', ... 'Position',frmPos, ... 'BackgroundColor',[0.50 0.50 0.50]); % ==================================== % The SCALE TYPE command popup button btnNumber = 1; yLabelPos = top-(btnNumber-1)*(btnHt+labelHt+spacing); labelStr = [' ',getString(message('MATLAB:demos:hndlaxis:LabelScale'))]; labelList = ' linear| semilogx| semilogy| loglog'; cmdList = str2mat( ... ' ', ... ' set(gca,''XScale'',''log'',''YScale'',''linear'');', ... ' set(gca,''XScale'',''linear'',''YScale'',''log'');', ... ' set(gca,''XScale'',''log'',''YScale'',''log'');'); callbackStr = 'hndlaxis eval'; % Generic label information labelPos = [left yLabelPos-labelHt labelWid labelHt]; uicontrol( ... 'Style','text', ... 'Units','normalized', ... 'Position',labelPos, ... 'BackgroundColor',labelColor, ... 'HorizontalAlignment','left', ... 'String',labelStr); % Generic popup button information btnPos = [left yLabelPos-labelHt-btnHt-btnOffset btnWid btnHt]; hndl1 = uicontrol( ... 'Style','popup', ... 'Units','normalized', ... 'Position',btnPos, ... 'String',labelList, ... 'Callback',callbackStr, ... 'UserData',cmdList); % ==================================== % The GRID command popup button btnNumber = 2; yLabelPos = top-(btnNumber-1)*(btnHt+labelHt+spacing); labelStr = [' ',getString(message('MATLAB:demos:hndlaxis:LabelGrid'))]; labelList = ' both| x grid| y grid| neither'; cmdList = str2mat( ... ' set(gca,''XGrid'',''on'',''YGrid'',''on'');', ... ' set(gca,''XGrid'',''on'',''YGrid'',''off'');', ... ' set(gca,''XGrid'',''off'',''YGrid'',''on'');', ... ' set(gca,''XGrid'',''off'',''YGrid'',''off'');'); callbackStr = 'hndlaxis eval'; % Generic label information labelPos = [left yLabelPos-labelHt labelWid labelHt]; uicontrol( ... 'Style','text', ... 'Units','normalized', ... 'Position',labelPos, ... 'BackgroundColor',labelColor, ... 'HorizontalAlignment','left', ... 'String',labelStr); % Generic popup button information btnPos = [left yLabelPos-labelHt-btnHt-btnOffset btnWid btnHt]; hndl2 = uicontrol( ... 'Style','popup', ... 'Units','normalized', ... 'Position',btnPos, ... 'String',labelList, ... 'Callback',callbackStr, ... 'UserData',cmdList); % ==================================== % The DIRECTION command popup button btnNumber = 3; yLabelPos = top-(btnNumber-1)*(btnHt+labelHt+spacing); labelStr = [' ',getString(message('MATLAB:demos:hndlaxis:LabelDirection'))]; labelList = ' normal| reverse x| reverse y| rev. both'; cmdList = str2mat( ... ' ', ... ' set(gca,''XDir'',''reverse'',''YDir'',''normal'');', ... ' set(gca,''XDir'',''normal'',''YDir'',''reverse'');', ... ' set(gca,''XDir'',''reverse'',''YDir'',''reverse'');'); callbackStr = 'hndlaxis eval'; % Generic label information labelPos = [left yLabelPos-labelHt labelWid labelHt]; uicontrol( ... 'Style','text', ... 'Units','normalized', ... 'Position',labelPos, ... 'BackgroundColor',labelColor, ... 'HorizontalAlignment','left', ... 'String',labelStr); % Generic popup button information btnPos = [left yLabelPos-labelHt-btnHt-btnOffset btnWid btnHt]; hndl3 = uicontrol( ... 'Style','popup', ... 'Units','normalized', ... 'Position',btnPos, ... 'String',labelList, ... 'Callback',callbackStr, ... 'UserData',cmdList); % ==================================== % The COLOR command popup button btnNumber = 4; yLabelPos = top-(btnNumber-1)*(btnHt+labelHt+spacing); labelStr = [' ',getString(message('MATLAB:demos:hndlaxis:LabelColor'))]; labelList = ' default| blue| red| green| cyan '; cmdList = str2mat( ... ' ', ... ' set(gca,''XColor'',''blue'',''YColor'',''blue'');', ... ' set(gca,''XColor'',''red'',''YColor'',''red'');', ... ' set(gca,''XColor'',''green'',''YColor'',''green'');', ... ' set(gca,''XColor'',''cyan'',''YColor'',''cyan'');'); callbackStr = 'hndlaxis eval'; % Generic label information labelPos = [left yLabelPos-labelHt labelWid labelHt]; uicontrol( ... 'Style','text', ... 'Units','normalized', ... 'Position',labelPos, ... 'BackgroundColor',labelColor, ... 'HorizontalAlignment','left', ... 'String',labelStr); % Generic popup button information btnPos = [left yLabelPos-labelHt-btnHt-btnOffset btnWid btnHt]; hndl4 = uicontrol( ... 'Style','popup', ... 'Units','normalized', ... 'Position',btnPos, ... 'String',labelList, ... 'Callback',callbackStr, ... 'UserData',cmdList); % ==================================== uicontrol( ... 'Style','pushbutton', ... 'Units','normalized', ... 'Position',[left bottom+2*btnHt+spacing btnWid 2*btnHt], ... 'String',getString(message('MATLAB:demos:shared:LabelInfo')), ... 'Callback','hndlaxis(''info'')'); % The close button. uicontrol( ... 'Style','pushbutton', ... 'Units','normalized', ... 'Position',[left bottom btnWid 2*btnHt], ... 'String',getString(message('MATLAB:demos:shared:LabelClose')), ... 'Callback','close(gcf)'); % Uncover the figure hndlList = [mcwHndl hndl1 hndl2 hndl3 hndl4]; watchoff(oldFigNumber); set(figNumber,'Visible','on', ... 'UserData',hndlList); hndlaxis('eval'); elseif strcmp(action,'info'), helpwin(mfilename) elseif strcmp(action,'quickeval'), % Execute the MiniCommand Window text exactly as it is now. hndlList = get(gcf,'UserData'); mcwHndl = hndlList(1); evalmcw(mcwHndl); elseif strcmp(action,'eval'), % Assemble and execute the completed command hndlList = get(gcf,'UserData'); n = length(hndlList); mcwHndl = hndlList(1); evalStr = str2mat(' x = logspace(-2,0,500);',' plot(x,((sin(1./x)).^2)./x);'); for count = 2:n, newStrList = get(hndlList(count),'UserData'); newStrVal = get(hndlList(count),'Value'); newStr = deblank(newStrList(newStrVal,:)); if ~isempty(newStr) evalStr = str2mat(evalStr,newStr); end end set(mcwHndl,'String',evalStr); evalmcw(mcwHndl); end; % if strcmp(action, ...