www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wmultisig1d/wmuldentoolmopc.m

    function varargout = wmuldentoolmopc(varargin)
% WMULDENTOOLMOPC MATLAB file for wmuldentoolmopc.fig 
%	Called by WMULDENTOOL (More On Principal Component Analysis).

% Last Modified by GUIDE v2.5 11-Jul-2013 09:14:36
%
%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 06-Jan-2006.
%   Last Revision: 11-Jul-2013.
%   Copyright 1995-2013 The MathWorks, Inc.
%   $Revision: 1.1.6.8 $ $Date: 2013/08/23 23:46:12 $ 

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @wmuldentoolmopc_OpeningFcn, ...
                   'gui_OutputFcn',  @wmuldentoolmopc_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
%--------------------------------------------------------------------------
function wmuldentoolmopc_OpeningFcn(hObject,eventdata,handles,varargin) %#ok<*INUSL>
% This function has no output args, see OutputFcn.

% Choose default command line output for wmuldentoolmopc
handles.output = hObject;

% Update handles structure
guidata(hObject,handles);

%%!!!!!!!!!!!!!!!!!!!!%
% TOOL INITIALISATION %
%%!!!!!!!!!!!!!!!!!!!!%
callingFIG = gcbf;
wfigmngr('set_FigATTRB',hObject,'nulle');
wfigmngr('init_called_FIG',hObject);
set(hObject,'Name',getWavMSG('Wavelet:mdw1dRF:Pus_More_PCA'));
uic = wfindobj(hObject,'Type','uicontrol');
pus = wfindobj(uic,'Tag','Pus_Close');
set(pus,'String',getWavMSG('Wavelet:commongui:Str_Close'));
pan = wfindobj(hObject,'type','uipanel');
set(pan(1),'Title', ...
    formatPanTitle(getWavMSG('Wavelet:mdw1dRF:Nb_PC_DetOrApp')));
set(pan(2),'Title', ...
    formatPanTitle(getWavMSG('Wavelet:mdw1dRF:Nb_PC_FinalPCA')));
pus_MORE   = varargin{1};
PCA_Params = varargin{2};
posCaller = get(callingFIG,'Position');
posLocFig = get(hObject,'Position');
posLocFig(1) = posCaller(1) + 0.025;
posLocFig(2) = posCaller(2)+(posCaller(4) - posLocFig(4))/2;
set(hObject,'Position',posLocFig,'UserData',pus_MORE);
axeInFIG = [...
    handles.Axe_APP_PER,handles.Axe_APP_CUM, ...
    handles.Axe_FIN_PER,handles.Axe_FIN_CUM  ...    
    ];
maxForYTICK = 1;

nbAPP = PCA_Params.APP{3};
nbFIN = PCA_Params.FIN{3};
if isnan(nbFIN) , ena_vis = 'Off'; else ena_vis = 'On'; end
set(axeInFIG([3,4]),'Visible',ena_vis');    

vp = PCA_Params.APP{2};
nbSIG = length(vp);
x = (1:nbSIG)';
%-------------------------------------------------------
perEXP_APP = 100*vp/sum(vp);
axeCUR = handles.Axe_APP_PER;
stem(axeCUR,x,perEXP_APP,'filled');
if nbSIG<maxForYTICK
    ytick    = sort(perEXP_APP);
    yticklab = num2str(ytick,'%5.2f');
    set(axeCUR,'YTick',ytick,'YTickLabel',yticklab);
end
xlabel(getWavMSG('Wavelet:mdw1dRF:PercentExplain'),'Parent',axeCUR);
%-------------------------------------------------------
cumEXP_APP = cumsum(perEXP_APP);
axeCUR = handles.Axe_APP_CUM;
stem(axeCUR,x,cumEXP_APP,'filled')
if nbSIG<maxForYTICK
    ytick    = cumEXP_APP;
    yticklab = num2str(ytick,'%5.2f');
    set(axeCUR,'YTick',ytick,'YTickLabel',yticklab);
end
xlabel(getWavMSG('Wavelet:mdw1dRF:CumPercent'),'Parent',axeCUR);
%-------------------------------------------------------
if ~isnan(nbFIN)
    vp = PCA_Params.FIN{2};
    perEXP_FIN = 100*vp/sum(vp);
    axeCUR = handles.Axe_FIN_PER;
    stem(axeCUR,x,perEXP_FIN,'filled')
    if nbSIG<maxForYTICK
        ytick    = sort(perEXP_FIN);
        yticklab = num2str(ytick,'%5.2f');
        set(axeCUR,'YTick',ytick,'YTickLabel',yticklab);
    end
    xlabel(getWavMSG('Wavelet:mdw1dRF:PercentExplain'),'Parent',axeCUR);
    
    cumEXP_FIN = cumsum(perEXP_FIN);
    axeCUR = handles.Axe_FIN_CUM;
    stem(axeCUR,x,cumEXP_FIN,'filled')
    if nbSIG<maxForYTICK
        ytick    = cumEXP_FIN;
        yticklab = num2str(ytick,'%5.2f');
        set(axeCUR,'YTick',ytick,'YTickLabel',yticklab);
    end
    xlabel(getWavMSG('Wavelet:mdw1dRF:CumPercent'),'Parent',axeCUR);
    
    nbAPP = PCA_Params.APP{3};
    if nbAPP>0
        axeCUR = handles.Axe_APP_CUM;
        set(axeCUR,'NextPlot','Add')
        stem(axeCUR,x(nbAPP),cumEXP_APP(nbAPP),'filled','Color','r')
    end
    if nbFIN>0
        axeCUR = handles.Axe_FIN_CUM;        
        set(axeCUR,'NextPlot','Add')
        stem(axeCUR,x(nbFIN),cumEXP_FIN(nbFIN),'filled','Color','r')
    end
else
    perEXP_FIN = zeros(size(perEXP_APP));
    cumEXP_FIN = perEXP_FIN;
end
set(axeInFIG,'XTick',x,'XLim',[0.5 nbSIG+0.5],'YGrid','On','XGrid','On');

HDL = [hObject,handles.Pan_APP_PCA,handles.Pan_FIN_PCA,axeInFIG ];
set(HDL,'Units','Pixels');
posHDL = get(HDL,'Position');
posHDL = cat(1,posHDL{:});
set(HDL,'Units','Normalized');
for k=1:2
    posHDL(4:5,k) = posHDL(4:5,k) + posHDL(2,k);
    posHDL(6:7,k) = posHDL(6:7,k) + posHDL(3,k);
end
posHDL(2:end,[1,3]) = posHDL(2:end,[1,3])/posHDL(1,3);
posHDL(2:end,[2,4]) = posHDL(2:end,[2,4])/posHDL(1,4);
rect = posHDL(2:end,:);
rect(:,[3 4]) = rect(:,[3 4])+rect(:,[1 2]);
set(handles.Pan_APP_PCA,'UserData',...
    {rect,[perEXP_APP,cumEXP_APP,perEXP_FIN,cumEXP_FIN,x],[nbAPP,nbFIN]});
set(hObject,'WindowButtonMotionFcn',...
    [mfilename '(''WinBtnMotionFcn'',' num2mstr(hObject) ',[],[])']);
%--------------------------------------------------------------------------
function varargout = wmuldentoolmopc_OutputFcn(hObject,eventdata,handles) 

% Get default command line output from handles structure
varargout{1} = handles.output;
%--------------------------------------------------------------------------
function Pus_Close_Callback(hObject,eventdata,handles) %#ok<DEFNU>

fig = handles.output;
wmuldentool('Pus_More_PCA_Callback',fig,[],handles)
%--------------------------------------------------------------------------
function WinBtnMotionFcn(hObject,eventdata,handles) %#ok<INUSD,DEFNU>

handles = guidata(hObject);
curPTS = get(hObject,'CurrentPoint');
usr = get(handles.Pan_APP_PCA,'UserData');
% usr = ...
%  {rect,[perEXP_APP,cumEXP_APP,perEXP_FIN,cumEXP_FIN,x]},[nbAPP,nbFIN]);
rect = usr{1};
rectAXE = rect(3:end,:);
visAXE = lower(get(handles.Axe_FIN_PER,'Visible'));
if isequal(visAXE,'off') , rectAXE(3:end,:) = []; end
iAXE = 0;
for k=1:size(rectAXE,1)
    bool = pinrect(curPTS,rectAXE(k,:));
    if bool , iAXE = k; break; end
end
ok = false;
if iAXE>0
    switch iAXE
        case 1 , axeCUR =handles.Axe_APP_PER; 
        case 2 , axeCUR =handles.Axe_APP_CUM; 
        case 3 , axeCUR =handles.Axe_FIN_PER; 
        case 4 , axeCUR =handles.Axe_FIN_CUM; 
    end
    xlim = get(axeCUR,'XLim');
    ylim = get(axeCUR,'YLim');
    xaxe = (curPTS(1)-rectAXE(iAXE,1))/(rectAXE(iAXE,3)-rectAXE(iAXE,1));
    yaxe = (curPTS(2)-rectAXE(iAXE,2))/(rectAXE(iAXE,4)-rectAXE(iAXE,2));
    xPts = xlim(1) + (xlim(2)-xlim(1))*xaxe;
    yPts = ylim(1) + (ylim(2)-ylim(1))*yaxe;
    x = usr{2}(:,5);
    y = usr{2}(:,iAXE);
    minX = min(abs(x-xPts));
    if minX<0.1
        [mini,idxPts] = min(abs(x-xPts)+ abs(y-yPts));
        if mini<2
            xSEL = x(idxPts);
            ySEL = y(idxPts);
            ok = true;
            BkCOL = [1 1 0.7];
            if (iAXE==2 && xSEL==usr{3}(1)) || (iAXE==4 && xSEL==usr{3}(2))
                BkCOL = [1 0.8 0.8];
            end
            text(xSEL,ySEL+5,[num2str(ySEL,'%5.2f') ' %'],...
                'Parent',axeCUR,'FontSize',10,'FontWeight','bold',...
                'EdgeColor','k','BackgroundColor',BkCOL,...
                'HorizontalAlignment','Center','Tag','Percent_TXT');
            pause(0.01)
        end
    end
end
if ~ok
    delete(findobj(hObject,'Type','text','Tag','Percent_TXT'))
end
%--------------------------------------------------------------------------
function bool = pinrect(pts,rect)

bool = (pts(1)>=rect(1)) && (pts(1)<=rect(3)) && ...
       (pts(2)>=rect(2)) && (pts(2)<=rect(4));
%--------------------------------------------------------------------------
function S = formatPanTitle(S)

S = ['   ' S '   .'];
%--------------------------------------------------------------------------