簡體   English   中英

Matlab App Designer 回調 function 不斷重置 plot 雙擊到 Z4757FE07FD492A38BEEZEA6

[英]Matlab App Designer Callback function keeps resetting plot with a double click to position it is first set at

我最近將最初在 GUIDE 中設計的應用程序轉換為應用程序設計器。 我沒有編寫原始代碼,並且由於轉換,我什至不知道如何搜索這個問題的答案。 如果這已在其他地方報道,我深表歉意。

在我的應用程序中,我可以加載包含線性時間尺度上的信號數據的 txt 文件。 使用該應用程序,我可以滾動到感興趣的信號。 然后我使用回調 function 設置“origo”或信號的原點,它在一致的時間尺度上重新繪制信號。

這與舊工具完全一樣,非常棒。 我可以處理信號,然后繼續前進。 問題是當我縮小,然后滾動查找我感興趣的下一個信號時。 If I at all double click anywhere on the plot, the plot zooms once again to the origo position with a consistent timescale created by the setorigo_Callback function. 此外,如果我發現其他感興趣的信號並對其進行處理,包括在 x 軸上設置一個新的 origo 位置,如果我雙擊它,它將縮放到我指定的第一個 origo position。 如果我設置了新的 origo 沒關系,雙擊會在我第一次打開應用程序時將我發送到第一個 origo 進程的位置。

有人知道這里發生了什么嗎? 或者,我該如何阻止它? 我似乎無法清除 origo 有價值的東西,或者擦除第一個 origo 集的情節 memory。 請查看完整代碼。 非常感謝!

Sample data: 1990.txt

Minute  microsec    cycles  SPL_Pa  kHz Bandwidth   end kHz
14/5/2019 13:11 3220245 6   97  149 2   185
14/5/2019 13:11 4479150 11  16  55  5   83
14/5/2019 13:11 4479650 4   54  61  0   64
... and so on.

classdef cpodcalibrate_App < matlab.apps.AppBase

    % Properties that correspond to app components
    properties (Access = public)
        figure1           matlab.ui.Figure
        Untitled_1        matlab.ui.container.Menu
        loaddata          matlab.ui.container.Menu
        loadmatdata       matlab.ui.container.Menu
        savedata          matlab.ui.container.Menu
        uitoolbar1        matlab.ui.container.Toolbar
        uitoggletool1     matlab.ui.container.toolbar.ToggleTool
        uitoggletool2     matlab.ui.container.toolbar.ToggleTool
        uitoggletool3     matlab.ui.container.toolbar.ToggleTool
        removeechoes      matlab.ui.control.Button
        Addtotable        matlab.ui.control.Button
        podnumber         matlab.ui.control.EditField
        datatable         matlab.ui.control.Table
        Frequencyselect   matlab.ui.control.ListBox
        angleselect       matlab.ui.control.ListBox
        removefromtable   matlab.ui.control.Button
        setorigo          matlab.ui.control.Button
        divisionline      matlab.ui.control.Button
        edit2             matlab.ui.control.EditField
        clickplot         matlab.ui.control.UIAxes
        thresholdplot     matlab.ui.control.UIAxes
        nixplot           matlab.ui.control.UIAxes
    end

    
    methods (Access = private)
        function updateplot(app, handles)
            
            global data t
            axes(handles.clickplot);
            cla;
            t=((data.datetime(:,4)*60+data.datetime(:,5))-(data.datetime(1,4)*60-data.datetime(1,5)))*60+data.rectime*1e-6;
            plot(t,log10(data.nix),'.')
        end
        
        function resetInteractions(app, event)
            % This function resets the states of the toggle tools that
            % impact user interactions.  It also resets the figure interactions.
             
            % Find all tools to reset.  Exclude the tool associated
            % with the event.
            interactiveTools = [app.uitoggletool1, app.uitoggletool2, app.uitoggletool3];
            interactiveTools(event.Source == interactiveTools) = [];
             
            % Set the state of the tools to 'off'.
            [interactiveTools.State] = deal('off');
             
            % Set figure interactions to 'off'.
            datacursormode(app.figure1, 'off')
            rotate3d(app.figure1, 'off');
            pan(app.figure1, 'off');
            zoom(app.figure1,'off');
        end
        
        % Update components that require runtime configuration
        function addRuntimeConfigurations(app)
            
            % Set component properties that require runtime configuration
            app.datatable.BackgroundColor = [1 1 1;0.9608 0.9608 0.9608];
            app.datatable.ColumnFormat = {[] [] [] [] [] [] [] [] []};
        end
    end
    

    % Callbacks that handle component events
    methods (Access = private)

        % Code that executes after component creation
        function cpodcalibrate_OpeningFcn(app, varargin)
            % Add runtime required configuration - Added by Migration Tool
            addRuntimeConfigurations(app);
            
            % Create GUIDE-style callback args - Added by Migration Tool
            [hObject, eventdata, handles] = convertToGUIDECallbackArguments(app); %#ok<ASGLU>
            
            % This function has no output args, see OutputFcn.
            % hObject    handle to figure
            % eventdata  reserved - to be defined in a future version of MATLAB
            % handles    structure with handles and user data (see GUIDATA)
            % varargin   command line arguments to cpodcalibrate (see VARARGIN)
            
            % Choose default command line output for cpodcalibrate
            handles.output = hObject;
            
            % Update handles structure
            guidata(hObject, handles);
        end

        % Button pushed function: Addtotable
        function Addtotable_Callback(app, event)
            % Create GUIDE-style callback args - Added by Migration Tool
            [hObject, eventdata, handles] = convertToGUIDECallbackArguments(app, event); %#ok<ASGLU>
            
            %add line to table
            
            global threshold
            
            axes(handles.nixplot)
            regline=lsline;
            for angle=1:4
                y=get(regline(angle),'Ydata');
                sensitivity(angle)=y(1);
            end;
            %keyboard
            
            datastring=cell(1,9);
            datastring(1)=num2cell(str2double(get(handles.podnumber,'string')));
            for n=1:4
                datastring(1+n)=num2cell(sensitivity(n));
                datastring(5+n)=num2cell(threshold(n));
            end
            table=get(handles.datatable,'data');
            %keyboard;
            if size(table,1)==0
                table=datastring;
            else
                table=[table;datastring];
            end
            set(handles.datatable,'data',table);
            save('Calibration.mat','table');
        end

        % Button pushed function: divisionline
        function divisionline_Callback(app, event)
            % Create GUIDE-style callback args - Added by Migration Tool
            [hObject, eventdata, handles] = convertToGUIDECallbackArguments(app, event); %#ok<ASGLU>
            
            % hObject    handle to divisionline (see GCBO)
            % eventdata  reserved - to be defined in a future version of MATLAB
            % handles    structure with handles and user data (see GUIDATA)
            
            global divider
            axes(handles.clickplot)
            divider=gline;
        end

        % Menu selected function: loaddata
        function loaddata_Callback(app, event)
            % Create GUIDE-style callback args - Added by Migration Tool
            [hObject, eventdata, handles] = convertToGUIDECallbackArguments(app, event); %#ok<ASGLU>
            
            %Load C-POD export data
            
            global data clicks meannix newfilename
            [filename, pathname] = uigetfile('*.txt');
            
            raw=readtable([pathname filename]);
            %If there is an extra column on the older text files, this will
            %sort the columnns correctly.
            if width(raw)>7
                rr=1;
            else
                rr=0;
            end
            headers = raw.Properties.VariableNames;


            %% Extract variables from file content
            
            %Removes last line in data, as often incomplete.
            raw(end,:)=[];
            data.datetime=datevec(datetime(raw.(1)));
            set(handles.podnumber,'string',filename(1:4));
            data.podid=str2double(filename(1:4));
            data.recdate=char(raw.(1));
            data.rectime=raw.(2+rr); %useconds after whole minute
            data.cycles=raw.(3+rr);         % cycles
            data.nix=raw.(4+rr);            % peak pressure, Nick-units
            data.frq=raw.(5+rr);            % Instantaneous frequency
            data.bandwidth=raw.(6+rr);      % Bandwidth, Nick-unit
            data.endfrq=raw.(7+rr);        % End-frequency in sweep

            newfilename=[filename(1:end-4), '.mat'];
            %keyboard
            save(newfilename,'data');
            updateplot(app, handles);
            %initiate results arrays and clear plots
            clicks=zeros(31,4); %number of clicks detected
            meannix=zeros(31,4); %mean nix per block of 10 clicks
            axes(handles.thresholdplot);
            axes(handles.nixplot);
        end

        % Button pushed function: removeechoes
        function removeechoes_Callback(app, event)
            % Create GUIDE-style callback args - Added by Migration Tool
            [hObject, eventdata, handles] = convertToGUIDECallbackArguments(app, event); %#ok<ASGLU>
            
            %Insert line and remove echoes
            
            global data t origo clicks meannix divider threshold newfilename
            axes(handles.clickplot)
            x=get(divider,'Xdata');
            y=get(divider,'Ydata');
            alpha=(y(1)-y(2))/(x(1)-x(2));
            beta=y(1)-alpha*x(1);
            xlim=get(handles.clickplot,'xlim');
            clicksinplotx=t(t>xlim(1)&t<xlim(2));
            clicksinploty=data.nix(t>xlim(1)&t<xlim(2));
            divideline=(clicksinplotx)*alpha+beta;
            hold on
            plot(clicksinplotx,divideline)
            selectedclicksx=clicksinplotx(log10(clicksinploty)>divideline)-origo;
            selectedclicksy=clicksinploty(log10(clicksinploty)>divideline);
            %plot and analyze
            angle=get(handles.angleselect,'value');
            breaks=(0.0485:0.012:0.425)'; %Create breaks to separate blocks
            for n=1:31
                clicks(n,angle)=sum(selectedclicksx>breaks(n)&selectedclicksx<breaks(n+1));
                meannix(n,angle)=mean(selectedclicksy(selectedclicksx>breaks(n)&selectedclicksx<breaks(n+1)));
            end
            axes(handles.thresholdplot);
            att=0:30;
            plot(att,clicks,'o-')
            above=att(clicks(:,angle)>=5);
            below=att(clicks(:,angle)<5);
            %keyboard
            if isempty(above)   %all levels below threshold
                threshold(angle)=NaN;
            else
                threshold(angle)=(above(end)+below(1))/2;
            end
            legend('0','90','180','270');
            axes(handles.nixplot)
            plot(att,20*log10(meannix),'.')
            legend('0','90','180','270');
            save(newfilename,'clicks','meannix','-append')
        end

        % Menu selected function: savedata
        function savedata_Callback(app, event)
            % Create GUIDE-style callback args - Added by Migration Tool
            [hObject, eventdata, handles] = convertToGUIDECallbackArguments(app, event); %#ok<ASGLU>
            
            % Save spreadsheet to excelfile
            
            table=get(handles.datatable,'data');
            xlswrite('Calibration.xls',table);
            save('Calibraton.mat','table');
        end

        % Button pushed function: setorigo
        function setorigo_Callback(app, event)
            % Create GUIDE-style callback args - Added by Migration Tool
            [hObject, eventdata, handles] = convertToGUIDECallbackArguments(app, event); %#ok<ASGLU>
            
            % set t-axis zero at first sync pulse
            
            global origo t data
            axes(handles.clickplot)
            [origo,y]=ginput(1);
            cla;
            plot(t,log10(data.nix),'.');
            %Origo for click file without calib tones
            %set(handles.clickplot,'xlim',[origo origo+0.425],'xtick',[origo+0.0005:0.012:origo+0.425]','xgrid','on');
            set(handles.clickplot,'xlim',[origo origo+0.425],'xtick',[origo+0.0485:0.012:origo+0.425]','xgrid','on');
            hold on
            plot(origo,y,'or');
        end

       
        % Clicked callback: uitoggletool3
        function uitoggletool3_ClickedCallback(app, event)
            % Reset the states of interactive tools and reset all figure
            % interactions.
            app.resetInteractions(event);
             
            % Enable or disable pan based on the
            % tool's current state.
            state = app.uitoggletool3.State;
            pan(app.figure1, char(state));
        end

        % Clicked callback: uitoggletool2
        function uitoggletool2_ClickedCallback(app, event)
            % Reset the states of interactive tools and reset all figure
            % interactions.
            app.resetInteractions(event);
             
            % Enable or disable zoom-out based on the
            % tool's current state.
            state = app.uitoggletool2.State;
            zoomModeObject = zoom(app.figure1);
            if state
                zoomModeObject.Direction = 'out';
                zoomModeObject.Enable = 'on';
            else
                zoomModeObject.Enable = 'off';
            end
        end

        % Clicked callback: uitoggletool1
        function uitoggletool1_ClickedCallback(app, event)
            % Reset the states of interactive tools and reset all figure
            % interactions.
            app.resetInteractions(event);
             
            % Enable or disable zoom-in based on the
            % tool's current state.
            state = app.uitoggletool1.State;
            zoomModeObject = zoom(app.figure1);
            if state
                zoomModeObject.Direction = 'in';
                zoomModeObject.Enable = 'on';
            else
                zoomModeObject.Enable = 'off';
            end
        end
    end

    % Component initialization
    methods (Access = private)

        % Create UIFigure and components
        function createComponents(app)

            % Create figure1 and hide until all components are created
            app.figure1 = uifigure('Visible', 'off');
            app.figure1.Colormap = [0 0 0.5625;0 0 0.625;0 0 0.6875;0 0 0.75;0 0 0.8125;0 0 0.875;0 0 0.9375;0 0 1;0 0.0625 1;0 0.125 1;0 0.1875 1;0 0.25 1;0 0.3125 1;0 0.375 1;0 0.4375 1;0 0.5 1;0 0.5625 1;0 0.625 1;0 0.6875 1;0 0.75 1;0 0.8125 1;0 0.875 1;0 0.9375 1;0 1 1;0.0625 1 1;0.125 1 0.9375;0.1875 1 0.875;0.25 1 0.8125;0.3125 1 0.75;0.375 1 0.6875;0.4375 1 0.625;0.5 1 0.5625;0.5625 1 0.5;0.625 1 0.4375;0.6875 1 0.375;0.75 1 0.3125;0.8125 1 0.25;0.875 1 0.1875;0.9375 1 0.125;1 1 0.0625;1 1 0;1 0.9375 0;1 0.875 0;1 0.8125 0;1 0.75 0;1 0.6875 0;1 0.625 0;1 0.5625 0;1 0.5 0;1 0.4375 0;1 0.375 0;1 0.3125 0;1 0.25 0;1 0.1875 0;1 0.125 0;1 0.0625 0;1 0 0;0.9375 0 0;0.875 0 0;0.8125 0 0;0.75 0 0;0.6875 0 0;0.625 0 0;0.5625 0 0];
            app.figure1.Position = [520 157 1142 644];
            app.figure1.Name = 'cpodcalibrate';
            app.figure1.Resize = 'off';
            app.figure1.HandleVisibility = 'on';
            app.figure1.Tag = 'figure1';

            % Create Untitled_1
            app.Untitled_1 = uimenu(app.figure1);
            app.Untitled_1.Text = 'File';
            app.Untitled_1.Tag = 'Untitled_1';

            % Create loaddata
            app.loaddata = uimenu(app.Untitled_1);
            app.loaddata.MenuSelectedFcn = createCallbackFcn(app, @loaddata_Callback, true);
            app.loaddata.Text = 'Open CPOD file';
            app.loaddata.Tag = 'loaddata';

            % Create loadmatdata
            app.loadmatdata = uimenu(app.Untitled_1);
            app.loadmatdata.Text = 'Open mat-file';
            app.loadmatdata.Tag = 'loadmatdata';

            % Create savedata
            app.savedata = uimenu(app.Untitled_1);
            app.savedata.MenuSelectedFcn = createCallbackFcn(app, @savedata_Callback, true);
            app.savedata.Text = 'save';
            app.savedata.Tag = 'savedata';

            % Create uitoolbar1
            app.uitoolbar1 = uitoolbar(app.figure1);
            app.uitoolbar1.Tag = 'uitoolbar1';

            % Create uitoggletool1
            app.uitoggletool1 = uitoggletool(app.uitoolbar1);
            app.uitoggletool1.Tag = 'uitoggletool1';
            app.uitoggletool1.Tooltip = 'Zoom In';
            app.uitoggletool1.ClickedCallback = createCallbackFcn(app, @uitoggletool1_ClickedCallback, true);
            app.uitoggletool1.Icon = 'uitoggletool1_image.png';

            % Create uitoggletool2
            app.uitoggletool2 = uitoggletool(app.uitoolbar1);
            app.uitoggletool2.Tag = 'uitoggletool2';
            app.uitoggletool2.Tooltip = 'Zoom Out';
            app.uitoggletool2.ClickedCallback = createCallbackFcn(app, @uitoggletool2_ClickedCallback, true);
            app.uitoggletool2.Icon = 'uitoggletool2_image.png';

            % Create uitoggletool3
            app.uitoggletool3 = uitoggletool(app.uitoolbar1);
            app.uitoggletool3.Tag = 'uitoggletool3';
            app.uitoggletool3.Tooltip = 'Pan';
            app.uitoggletool3.ClickedCallback = createCallbackFcn(app, @uitoggletool3_ClickedCallback, true);
            app.uitoggletool3.Icon = 'uitoggletool3_image.png';

            % Create removeechoes
            app.removeechoes = uibutton(app.figure1, 'push');
            app.removeechoes.ButtonPushedFcn = createCallbackFcn(app, @removeechoes_Callback, true);
            app.removeechoes.Tag = 'removeechoes';
            app.removeechoes.BackgroundColor = [0.925490196078431 0.913725490196078 0.847058823529412];
            app.removeechoes.FontSize = 11;
            app.removeechoes.Position = [250 605 94 22];
            app.removeechoes.Text = 'Remove echoes';

            % Create Addtotable
            app.Addtotable = uibutton(app.figure1, 'push');
            app.Addtotable.ButtonPushedFcn = createCallbackFcn(app, @Addtotable_Callback, true);
            app.Addtotable.Tag = 'Addtotable';
            app.Addtotable.BackgroundColor = [0.925490196078431 0.913725490196078 0.847058823529412];
            app.Addtotable.FontSize = 11;
            app.Addtotable.Position = [970 344 69 22];
            app.Addtotable.Text = 'Add';

            % Create podnumber
            app.podnumber = uieditfield(app.figure1, 'text');
            app.podnumber.Tag = 'podnumber';
            app.podnumber.HorizontalAlignment = 'center';
            app.podnumber.FontSize = 11;
            app.podnumber.Position = [971 394 49 20];
            app.podnumber.Value = '0';

            % Create datatable
            app.datatable = uitable(app.figure1);
            app.datatable.ColumnName = {'POD'; 'Sens 0'; 'Sens 90'; 'Sens 180'; 'Sens 270'; 'Thr 0'; 'Thr 90'; 'Thr 180'; 'Thr 270'};
            app.datatable.ColumnEditable = [false false false false false false false false false];
            app.datatable.Tag = 'datatable';
            app.datatable.FontSize = 11;
            app.datatable.Position = [709 44 422 251];

            % Create Frequencyselect
            app.Frequencyselect = uilistbox(app.figure1);
            app.Frequencyselect.Items = {'110 kHz', '120 kHz', '130 kHz', '140 kHz'};
            app.Frequencyselect.Tag = 'Frequencyselect';
            app.Frequencyselect.FontSize = 11;
            app.Frequencyselect.Position = [970 532 72 62];
            app.Frequencyselect.Value = '130 kHz';

            % Create angleselect
            app.angleselect = uilistbox(app.figure1);
            app.angleselect.Items = {'0 degrees', '90 degrees', '180 degrees', '270 degrees'};
            app.angleselect.Tag = 'angleselect';
            app.angleselect.FontSize = 11;
            app.angleselect.Position = [970 444 89 63];
            app.angleselect.Value = '0 degrees';

            % Create removefromtable
            app.removefromtable = uibutton(app.figure1, 'push');
            app.removefromtable.Tag = 'removefromtable';
            app.removefromtable.BackgroundColor = [0.925490196078431 0.913725490196078 0.847058823529412];
            app.removefromtable.FontSize = 11;
            app.removefromtable.Position = [1051 344 69 22];
            app.removefromtable.Text = 'Remove';

            % Create setorigo
            app.setorigo = uibutton(app.figure1, 'push');
            app.setorigo.ButtonPushedFcn = createCallbackFcn(app, @setorigo_Callback, true);
            app.setorigo.Tag = 'setorigo';
            app.setorigo.BackgroundColor = [0.925490196078431 0.913725490196078 0.847058823529412];
            app.setorigo.FontSize = 11;
            app.setorigo.Position = [50 606 69 22];
            app.setorigo.Text = 'Set origo';

            % Create divisionline
            app.divisionline = uibutton(app.figure1, 'push');
            app.divisionline.ButtonPushedFcn = createCallbackFcn(app, @divisionline_Callback, true);
            app.divisionline.Tag = 'divisionline';
            app.divisionline.BackgroundColor = [0.925490196078431 0.913725490196078 0.847058823529412];
            app.divisionline.FontSize = 11;
            app.divisionline.Position = [150 605 69 22];
            app.divisionline.Text = 'Division Line';

            % Create edit2
            app.edit2 = uieditfield(app.figure1, 'text');
            app.edit2.Tag = 'edit2';
            app.edit2.HorizontalAlignment = 'center';
            app.edit2.FontSize = 11;
            app.edit2.Position = [517 606 89 20];
            app.edit2.Value = 'Edit Text';

         
            % Create clickplot
            app.clickplot = uiaxes(app.figure1);
            app.clickplot.Colormap = [0 0 0.5625;0 0 0.625;0 0 0.6875;0 0 0.75;0 0 0.8125;0 0 0.875;0 0 0.9375;0 0 1;0 0.0625 1;0 0.125 1;0 0.1875 1;0 0.25 1;0 0.3125 1;0 0.375 1;0 0.4375 1;0 0.5 1;0 0.5625 1;0 0.625 1;0 0.6875 1;0 0.75 1;0 0.8125 1;0 0.875 1;0 0.9375 1;0 1 1;0.0625 1 1;0.125 1 0.9375;0.1875 1 0.875;0.25 1 0.8125;0.3125 1 0.75;0.375 1 0.6875;0.4375 1 0.625;0.5 1 0.5625;0.5625 1 0.5;0.625 1 0.4375;0.6875 1 0.375;0.75 1 0.3125;0.8125 1 0.25;0.875 1 0.1875;0.9375 1 0.125;1 1 0.0625;1 1 0;1 0.9375 0;1 0.875 0;1 0.8125 0;1 0.75 0;1 0.6875 0;1 0.625 0;1 0.5625 0;1 0.5 0;1 0.4375 0;1 0.375 0;1 0.3125 0;1 0.25 0;1 0.1875 0;1 0.125 0;1 0.0625 0;1 0 0;0.9375 0 0;0.875 0 0;0.8125 0 0;0.75 0 0;0.6875 0 0;0.625 0 0;0.5625 0 0];
            app.clickplot.FontSize = 13;
            app.clickplot.NextPlot = 'replace';
            app.clickplot.Tag = 'clickplot';
            app.clickplot.Position = [24 322 937 280];

            % Create thresholdplot
            app.thresholdplot = uiaxes(app.figure1);
            app.thresholdplot.Colormap = [0 0 0.5625;0 0 0.625;0 0 0.6875;0 0 0.75;0 0 0.8125;0 0 0.875;0 0 0.9375;0 0 1;0 0.0625 1;0 0.125 1;0 0.1875 1;0 0.25 1;0 0.3125 1;0 0.375 1;0 0.4375 1;0 0.5 1;0 0.5625 1;0 0.625 1;0 0.6875 1;0 0.75 1;0 0.8125 1;0 0.875 1;0 0.9375 1;0 1 1;0.0625 1 1;0.125 1 0.9375;0.1875 1 0.875;0.25 1 0.8125;0.3125 1 0.75;0.375 1 0.6875;0.4375 1 0.625;0.5 1 0.5625;0.5625 1 0.5;0.625 1 0.4375;0.6875 1 0.375;0.75 1 0.3125;0.8125 1 0.25;0.875 1 0.1875;0.9375 1 0.125;1 1 0.0625;1 1 0;1 0.9375 0;1 0.875 0;1 0.8125 0;1 0.75 0;1 0.6875 0;1 0.625 0;1 0.5625 0;1 0.5 0;1 0.4375 0;1 0.375 0;1 0.3125 0;1 0.25 0;1 0.1875 0;1 0.125 0;1 0.0625 0;1 0 0;0.9375 0 0;0.875 0 0;0.8125 0 0;0.75 0 0;0.6875 0 0;0.625 0 0;0.5625 0 0];
            app.thresholdplot.FontSize = 13;
            app.thresholdplot.NextPlot = 'replace';
            app.thresholdplot.Tag = 'thresholdplot';
            app.thresholdplot.Position = [25 22 336 280];

            % Create nixplot
            app.nixplot = uiaxes(app.figure1);
            app.nixplot.Colormap = [0 0 0.5625;0 0 0.625;0 0 0.6875;0 0 0.75;0 0 0.8125;0 0 0.875;0 0 0.9375;0 0 1;0 0.0625 1;0 0.125 1;0 0.1875 1;0 0.25 1;0 0.3125 1;0 0.375 1;0 0.4375 1;0 0.5 1;0 0.5625 1;0 0.625 1;0 0.6875 1;0 0.75 1;0 0.8125 1;0 0.875 1;0 0.9375 1;0 1 1;0.0625 1 1;0.125 1 0.9375;0.1875 1 0.875;0.25 1 0.8125;0.3125 1 0.75;0.375 1 0.6875;0.4375 1 0.625;0.5 1 0.5625;0.5625 1 0.5;0.625 1 0.4375;0.6875 1 0.375;0.75 1 0.3125;0.8125 1 0.25;0.875 1 0.1875;0.9375 1 0.125;1 1 0.0625;1 1 0;1 0.9375 0;1 0.875 0;1 0.8125 0;1 0.75 0;1 0.6875 0;1 0.625 0;1 0.5625 0;1 0.5 0;1 0.4375 0;1 0.375 0;1 0.3125 0;1 0.25 0;1 0.1875 0;1 0.125 0;1 0.0625 0;1 0 0;0.9375 0 0;0.875 0 0;0.8125 0 0;0.75 0 0;0.6875 0 0;0.625 0 0;0.5625 0 0];
            app.nixplot.FontSize = 13;
            app.nixplot.NextPlot = 'replace';
            app.nixplot.Tag = 'nixplot';
            app.nixplot.Position = [375 22 336 280];

            % Show the figure after all components are created
            app.figure1.Visible = 'on';
        end
    end

    % App creation and deletion
    methods (Access = public)

        % Construct app
        function app = cpodcalibrate_App(varargin)

            runningApp = getRunningApp(app);

            % Check for running singleton app
            if isempty(runningApp)

                % Create UIFigure and components
                createComponents(app)

                % Register the app with App Designer
                registerApp(app, app.figure1)

                % Execute the startup function
                runStartupFcn(app, @(app)cpodcalibrate_OpeningFcn(app, varargin{:}))
            else

                % Focus the running singleton app
                figure(runningApp.figure1)

                app = runningApp;
            end

            if nargout == 0
                clear app
            end
        end

        % Code that executes before app deletion
        function delete(app)

            % Delete UIFigure when app is deleted
            delete(app.figure1)
        end
    end
end

因此,從@Hoki 那里得到一些建議,我制作了一個新按鈕,用於調整軸的 xlim 和其他功能的大小。 現在,根據我最后一次單擊“設置 origo”還是“縮放到數據”,雙擊將分別將我發送到每個范圍。 這意味着我至少可以擺脫設置 origo 確定的軸限制。 我沒有花時間擺脫 auto xgrid,因為老實說,我可以忍受它。

% Button pushed function: ZoomtoDataButton
function ZoomtoDataButtonPushed(app, event)
    [hObject, eventdata, handles] = convertToGUIDECallbackArguments(app, event); %#ok<ASGLU>
    axes(handles.clickplot)
    cla;
    updateplot(app, handles)
    xlim('auto')
    xticks('auto')
    ylim('auto')

end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM