freq=[1;3;5;9;11;13;15;18;20;23;25;28;30;32;35;37;40;42;45;47;49;52;54;57;59;62;64;66;69;71;74;76;79];
s=2;h=2;
data=cell(4,5);
data{2,2}=[10;20;30;40;50;60;70;80;90;100;110;120;130;140;150;160;170;180;190;200;210;220;230;240;250;260;270;280;290;300;310;320;330];
data{2,4}=[3;6;9;12;15;18;21;24;27;30;33;36;39;42;45;48;51;54;57;60;63;66;69;72;75;78;81;84;87;90;93;96;99];
data{2,5}=[15;30;45;60;75;90;105;120;135;150;165;180;195;210;225;240;255;270;285;300;315;330;345;360;375;390;405;420;435;450;465;480;495];
data{4,2}=[20;40;60;80;100;120;140;160;180;200;220;240;260;280;300;320;340;360;380;400;420;440;460;480;500;520;540;560;580;600;620;640;660];
data{4,4}=[50;100;150;200;250;300;350;400;450;500;550;600;650;700;750;800;850;900;950;1000;1050;1100;1150;1200;1250;1300;1350;1400;1450;1500;1550;1600;1650];
data{4,5}=[2;4;6;8;10;12;14;16;18;20;22;24;26;28;30;32;34;36;38;40;42;44;46;48;50;52;54;56;58;60;62;64;66];
handles=struct;
handles.f=figure(1);clf(handles.f)
axes(handles.f,'Units','Normalized','Position',[0.1 0.3 0.85 0.65])
handles.s=2;handles.h=2;handles.data=data;
handles.plot=semilogx(freq,data{s,h});
handles.slider_s=uicontrol(handles.f,'Style','slider',...
'Units','Normalized','Position',[0.1 0.05 0.85 0.08],...
'Min',1,'Max',size(data,1),'Value',s,...
'Callback',@(obj,event) slidercallback(obj,'s'));
handles.slider_h=uicontrol(handles.f,'Style','slider',...
'Units','Normalized','Position',[0.1 0.15 0.85 0.08],...
'Min',1,'Max',size(data,2),'Value',h,...
'Callback',@(obj,event) slidercallback(obj,'h'));
guidata(handles.f,handles)
function slidercallback(obj,type)
handles=guidata(obj);
data=handles.data;
if strcmp(type,'s')
h=handles.h;
s_allowed=find(~cellfun('isempty',data(:,h)));
[~,best_match]=min(abs(s_allowed-get(obj,'Value')));
s=s_allowed(best_match);
handles.s=s;guidata(obj,handles)
else
s=handles.s;
h_allowed=find(~cellfun('isempty',data(s,:)));
[~,best_match]=min(abs(h_allowed-get(obj,'Value')));
h=h_allowed(best_match);
handles.h=h;guidata(obj,handles)
end
set(handles.plot,'YData',data{s,h});
end