Code covered by the BSD License  

Highlights from
Interactive Data Navigation Pane Widget

image thumbnail

Interactive Data Navigation Pane Widget

by

 

25 Mar 2009 (Updated )

Widget to interactively & graphically select a section of a large dataset you want to work on

Editor's Notes:

This file was selected as MATLAB Central Pick of the Week

demo_uiHistory()
function demo_uiHistory()
% DEMO_UIHISTORY - This demo illustrates how to use the uiHistory widget
%  It demonstrates the following capabilities:
%   * Customizing the look and feel of the widget
%   * Start an action based on widget events notifications
%
% Author: Thomas MONTAGNON
% Email : thomas.montagnon@mathworks.fr
%
% Copyright 2008-2009 T. Montagnon
%

% Init data
xData = [725444;725445;725448;725449;725450;725451;725452;725455;725456;725457;725458;725462;725463;725464;725465;725466;725469;725470;725471;725472;725473;725476;725477;725478;725479;725480;725483;725484;725485;725486;725487;725490;725491;725492;725493;725494;725497;725498;725499;725500;725501;725504;725505;725506;725507;725508;725511;725512;725513;725514;725515;725519;725520;725521;725522;725525;725526;725527;725528;725529;725532;725533;725534;725535;725536;725539;725540;725541;725542;725543;725546;725547;725548;725549;725550;725553;725554;725555;725556;725560;725561;725562;725563;725564;725567;725568;725569;725570;725571;725574;725575;725576;725577;725578;725581;725582;725583;725584;725585;725588;725589;725590;725591;725592;725595;725596;725597;725598;725599;725602;725603;725604;725605;725606;725609;725610;725611;725612;725613;725617;725618;725619;725620;725623;725624;725625;725626;725627;725630;725631;725632;725633;725634;725637;725638;725639;725640;725641;725644;725645;725646;725647;725648;725651;725652;725653;725654;725655;725658;725659;725660;725661;725662;725665;725666;725667;725668;725669;725672;725673;725674;725675;725676;725679;725680;725681;725682;725683;725686;725687;725688;725689;725690;725693;725694;725695;725696;725697;725700;725701;725702;725704;725707;725708;725709;725710;725711;725714;725715;725716;725717;725718;725721;725722;725723;725724;725725;725728;725729;725730;725732;725735;725736;725737;725739;725742;725743;725744;725745;725746;725749;725750;725751;725752;725753;725756;725757;725758;725759;725760;725763;725764;725765;725766;725767;725770;725771;725772;725773;725774;725777;725778;725779;725780;725781;725785;725786;725787;725788;725791;725792;725793;725794;725795;725798;725799;725800;725801;725802;725805;725806;725807;725808;725809;725812;725813;725814;725815;725816;725819;725820;725821;725822;725823;725826;725827;725828;725829;725830;725833;725834;725835;725836;725837;725840;725841;725842;725843;725847;725848;725849;725850;725851;725854;725855;725856;725857;725858;725861;725862;725863;725864;725865;725868;725869;725870;725871;725872;725875;725876;725877;725878;725879;725883;725884;725885;725886;725889;725890;725891;725892;725893;725896;725897;725898;725899;725900;725903;725904;725905;725906;725907;725910;725911;725912;725913;725914;725917;725918;725919;725920;725924;725925;725926;725927;725928;725931;725932;725933;725934;725935;725938;725939;725940;725941;725942;725945;725946;725947;725948;725949;725952;725953;725954;725955;725956;725959;725960;725961;725962;725963;725966;725967;725968;725969;725970;725973;725974;725975;725976;725977;725980;725981;725982;725983;725984;725988;725989;725990;725991;725994;725995;725996;725997;725998;726001;726002;726003;726004;726005;726008;726009;726010;726011;726012;726015;726016;726017;726018;726019;726022;726023;726024;726025;726026;726029;726030;726031;726032;726033;726036;726037;726038;726039;726040;726043;726044;726045;726046;726047;726050;726051;726052;726053;726054;726057;726058;726059;726060;726061;726064;726065;726066;726068;726071;726072;726073;726074;726075;726078;726079;726080;726081;726082;726085;726086;726087;726088;726089;726092;726093;726094;726095;726099;726100;726101;726102;726106;726107;726108;726109;726110;726113;726114;726115;726116;726117;726120;726121;726122;726123;726124;726127;726128;726129;726130;726131;726134;726135;726136;726137;726138;726141;726142;726143;726144;726145;726149;726150;726151;726152;726155;726156;726157;726158;726159;726162;726163;726164;726165;726166;726169;726170;726171;726172;726173;726176;726177;726178;726179;726180;726183;726184;726185;726186;726187;726190;726191;726192;726193;726197;726198;726199;726200;726201;726204;726205;726206;726207;726208;726211;726212;726213;726214;726215;726218;726219;726220;726221;726222;726225;726226;726227;726228;726229;726232;726233;726234;726235;726236;726239;726240;726241;726242;726243;726246;726247;726248;726249;726250;726254;726255;726256;726257;726260;726261;726262;726263;726264;726267;726268;726269;726270;726271;726274;726275;726276;726277;726278;726281;726282;726283;726284;726285;726289;726290;726291;726292;726295;726296;726297;726298;726299;726302;726303;726304;726305;726306;726309;726310;726311;726312;726313;726316;726317;726318;726319;726320;726323;726324;726325;726326;726327;726330;726331;726332;726333;726334;726337;726338;726339;726340;726341;726344;726345;726346;726347;726348;726352;726353;726354;726355;726358;726359;726360;726361;726362;726365;726366;726367;726368;726369;726372;726373;726374;726375;726376;726379;726380;726381;726382;726383;726386;726387;726388;726389;726390;726393;726394;726395;726396;726397;726400;726401;726402;726403;726404;726407;726408;726409;726410;726411;726414;726415;726416;726417;726418;726421;726422;726423;726424;726425;726428;726429;726430;726432;726435;726436;726437;726438;726439;726442;726443;726444;726445;726446;726449;726450;726451;726452;726453;726456;726457;726458;726459;726460;726464;726465;726466;726467;726471;726472;726473;726474;726477;726478;726479;726480;726481;726484;726485;726486;726487;726488;726491;726492;726493;726494;726495;726498;726499;726500;726501;726502;726505;726506;726507;726508;726509;726512;726513;726514;726515;726516;726520;726521;726522;726523;726526;726527;726528;726529;726530;726533;726534;726535;726536;726537;726540;726541;726542;726543;726544;726547;726548;726549;726550;726554;726555;726556;726557;726558;726561;726562;726563;726564;726565;726568;726569;726570;726571;726572;726575;726576;726577;726578;726579;726582;726583;726584;726585;726586;726589;726590;726591;726592;726593;726596;726597;726598;726599;726600;726603;726604;726605;726606;726607;726610;726611;726612;726613;726614;726618;726619;726620;726621;726624;726625;726626;726627;726628;726631;726632;726633;726634;726635;726638;726639;726640;726641;726642;726645;726646;726647;726648;726649;726652;726654;726655;726656;726659;726660;726661;726662;726663;726666;726667;726668;726669;726670;726673;726674;726675;726676;726677;726680;726681;726682;726683;726684;726687;726688;726689;726690;726691;726694;726695;726696;726697;726698;726701;726702;726703;726704;726705;726708;726709;726710;726711;726712;726716;726717;726718;726719;726722;726723;726724;726725;726726;726729;726730;726731;726732;726733;726736;726737;726738;726739;726740;726743;726744;726745;726746;726747;726750;726751;726752;726753;726754;726757;726758;726759;726760;726761;726764;726765;726766;726767;726768;726771;726772;726773;726774;726775;726778;726779;726780;726781;726782;726785;726786;726787;726788;726789;726792;726793;726794;726796;726799;726800;726801;726802;726803;726806;726807;726808;726809;726810;726813;726814;726815;726816;726817;726820;726821;726822;726823;726824;726828;726829;726830;726831;726835;726836;726837;726838;726841;726842;726843;726844;726845;726848;726849;726850;726851;726852;726855;726856;726857;726858;726859;726862;726863;726864;726865;726866;726869;726870;726871;726872;726873;726876;726877;726878;726879;726880;726884;726885;726886;726887];
yData = [28;29;29.5;28.75;28.25;27.5;26.75;26;26.5;27.25;27.75;27.5;27.25;27.5;27.75;27.75;27.25;27.5;28;28.25;28.75;29;29;30;30.25;29.25;29.25;28.75;28.87;31.75;33.75;34;33;32.25;31.75;31.75;31.5;31.75;31.75;32;31.75;32;32.25;32;32;32.25;31.75;31.5;31;31;31;32;33;33.75;35;34;34;33.75;34.25;34.25;32.75;32.75;32.75;31.5;31.5;31.25;31.75;31.5;31.25;31.37;31.75;31.5;31;30;29.75;30.75;30.75;30.75;31.25;30;29.25;28;27.25;28;27.62;28;29;29.5;29.75;29.75;30.75;30;31;31.25;30.5;29.75;28.75;28.5;28.25;28.25;28;27.75;27.5;27.75;28.75;29.5;29.75;30.5;30.62;30.25;30.25;30;30;29.5;29.5;29.25;29.25;29.25;28.5;27.75;27;29.25;30.5;30.25;30.75;30.25;29;28.25;28.75;28.75;29.5;29.75;29.75;29.5;30;29.62;29;29;28.25;28.25;28;28;28.25;30.5;31.12;32;33;34.5;33;33.5;35;35;36;36.25;37.75;37.75;37.75;37.5;38.75;39.63;38.5;39.25;38.75;39.5;41;43.5;44.5;44.25;42.5;42.75;42.75;42.13;42.5;42.75;40.5;42;45.25;46.75;50.5;51;50.5;49.75;48.75;49;48.63;49.25;49;48.5;48.25;48.63;49;47.25;46;46.5;47;47.38;48.5;49;49.5;49.38;49.25;47.25;47.75;48.25;47.75;50.5;51.25;54;55.75;58;61.75;60;60;63.25;61.75;64;65;67.75;74.5;67.5;68.75;71.5;71.75;68.75;73.12;73;71.75;72;71.5;68.87;68.25;68.5;71.75;76.75;76;76.5;71.75;68.75;68;72.25;75.75;74.5;77.25;76.75;74.5;74.5;79.75;83.5;83.25;81.75;84.25;85.5;85.87;82.75;82.25;85;89.5;91.25;90.25;89.62;90.25;89.87;89.25;91.75;96.75;96.75;91;95;99.75;99.25;94;96.75;95;95.62;92.5;94;96;98.5;95.75;97.25;98.5;98.5;99;99;106.25;103.25;104;105;107;115.75;113;118.25;126.5;123;118.75;121.75;122.75;119.25;115.25;111.25;109.5;111.5;108.25;109.5;109.5;116.25;115.25;113;112.5;113.25;112.5;109.25;109.75;109;103.5;97.5;98.25;98.25;100.25;103.75;104.87;104.5;103.75;102.75;104.75;104.5;104.75;104.25;102;102.5;100;97.5;90.25;93.25;95.75;97;99.25;105;102.25;102;102.25;99.5;99.25;100;97.75;98.5;99.75;99.5;99.25;97;94;91.75;93.75;97.25;101;103.5;103.5;101.5;100;103;103.5;104.25;102.5;102.5;105.25;107;111.75;114.75;115.5;115.75;120.25;118.75;113.5;115;115.25;112;111.5;112.75;114.5;116.25;119.25;117.87;116.75;116;115;53.5;57.25;60.25;61.25;62;64;64.25;66.25;68.5;72.5;79;73.75;73;72;71.75;71.5;73.25;71.25;70.5;64.75;45.25;48;56.63;53.25;48.25;39.25;41.25;41.25;47.75;49.75;50.25;48;48.75;50.5;47.5;47;47;49;50;48.25;47.75;46.75;48;46.25;47.5;47.75;47.5;46;45.25;44.75;43.75;44;40.38;42;43.25;47.5;46.25;47.5;48;50.75;51.25;54.25;52;52;51.5;52.5;53.25;53.25;51.25;54.5;55.75;54.25;56;57;58.5;60.5;56;57.88;56.75;56.75;56.25;57.75;57.25;57.25;54;55;53.88;55.75;54.5;55.75;56.5;55.75;55.25;55.75;52.75;51;51.5;51.75;52.75;53.75;54.75;55.25;57.5;57.5;58;58.75;58.75;59.5;59.88;58.13;58.25;59.38;59;59.5;61;60.75;62.63;63.88;64;62.75;62.5;63.63;62.5;64.75;63.88;58.25;58.75;60.25;59;56.5;56.13;56.88;56.5;54.75;56.5;55.25;56;58.13;57.25;58;57.5;55.75;57;53;54.25;54.75;54.25;54.5;54.38;55.25;55.13;55.75;55.5;55.38;54.5;55;56.5;57.13;57;57.25;57.25;57;55.75;56;56.75;58.25;58;56.75;57;56.25;55;56.75;55.75;56.13;55.5;58;59.25;59;59.5;60.75;61;62;61.75;62.25;62.38;63;64;63.5;63;62.75;64;67;66;65.25;64;65.75;65.75;67;68;69.62;68.75;68.75;68.5;66.75;65.62;66.75;67;67;67.5;66;64;61;61.75;60.5;58;57.63;58.25;59.5;58.5;57.5;56.25;55.5;53.5;53.25;51.75;50.5;51.75;52;50.75;52.5;52.5;52.75;50.5;48;49.38;51.5;50.75;51.38;52.13;51.25;50;48.88;51.5;52;51.75;52;54;53.75;54;54;52.25;52;51.75;53.25;53.75;54.5;53.75;52.38;52;53;53;52.25;51.38;51.13;50.25;50;49.75;49.25;49.75;50.63;51.5;51.25;52;52.5;53.25;53.5;53;52;50.5;49.75;49.5;49.5;49;48.75;47.25;47.25;46.5;46.75;48.63;49.75;49;47.63;48.5;47;46.25;46;46.63;46;46;46.88;46.38;47;47.5;47.25;49;49.75;49.5;49.75;49.25;49;49;47.38;47.75;48.38;49;49.75;50.75;51.25;52.25;52;52;51.75;52.25;53.25;53.25;53.63;54.25;53.38;53;52.5;52;52.5;52.5;53;53.13;51.5;51.5;53.5;54.13;53;52.75;53;54.25;55.38;58.5;59.63;59.25;60.88;61;60.5;62.13;62.5;63.75;61.88;61.25;60.25;62.25;62.75;62.5;61.75;60;60.38;58.75;59.75;59.5;59.25;60.75;61.75;62;53.5;52.5;51.75;51.75;52.75;52.75;50.25;51.25;46.5;46.5;49.88;49;50.25;49.75;49.75;49.5;49.88;49.88;50.25;50;50.38;51.25;51.25;51.38;51.38;48.13;48.75;50.75;51.5;53.25;54.88;56;55.25;55.13;54.75;54;54.75;55.88;54.63;54;54;52.5;52;51.5;53;54;54;54.25;54.75;56.25;57.38;58.25;58.25;59.25;56.63;57.5;57.5;58.88;59;60.5;60;58.25;56.75;58.5;59.75;59.75;59.75;59;57.25;57.75;56.75;56.75;56.5;54.5;55;55.5;55.38;54.75;53.88;52.75;52;53;54;55.25;52.75;53.5;54.88;53.5;53.25;53;52.75;53.25;53.5;54.13;53.5;55.25;55.25;52;52.75;53.75;54.25;54.75;54.25;54.25;55;57;57.75;59;58.75;58.5;57.75;57;57.5;55.88;56.5;57.5;56.13;58.38;59.25;59;58.88;59.13;58.5;59.25;58.75;59.88;60;59.25;58.25;59;59.38;60.25;62.25;63.75;62.75;63.5;62.5;65;65.5;66;67;67.25;66.62;68;68.5;69.62;69;75.5;79.25;79.75;81.75;81.25;80;78.5;73.5;75.75;78.62;80.5;84.25;85.25;83.12;80.87;79.75;77.75;77;79.62;81.75;82.12;76.25;78.25;77.25;81;83.25;83.75;84.5;88.12;86.5;88.5;87.5;86.87;86.5;88.12;88.25;87.62;86.75;87;85.5;87;85;86.25;86.75;85.25;85.5;84.75;83;82.5;80;78;77;78.25;80.37;82.75;83.5;85.75;85.5;86.25;85.25;87;88.75;89.25;91.87;89.62;91;90.75;88.25;86.5;86.12;86.12;88.75;87.5;95;94.12;90.75;89.75;90.75;90.75;90.75;91.5;91.25;92.5;93.75;93.75;94.25;94;93.25;94.25;94.5;94.75;94.75;95;97;98;100.25;96.12;96.37;97.5];


% Create controls
handles.Fig     = figure('position',[ 10 10 620 470],'visible','off','menubar','none','numbertitle','off','name','Demo uiHistory');  % Figure
handles.EdStart = uicontrol('style','edit','position',[ 10 10 100 25],'backgroundcolor',[1 1 1],'enable','inactive'); % Edit box
handles.EdEnd   = uicontrol('style','edit','position',[115 10 100 25],'backgroundcolor',[1 1 1],'enable','inactive'); % Edit box
handles.AxPlot  = axes('units','pixels','position',[10 180 600 250],'box','on','XTickLabel',{},'YTickLabel',{}); % Edit box
handles.Hist    = uiHistory(handles.Fig,{xData,yData},true); % uiHistory control

% Customize the uiHistory control
set(handles.Hist,'CursorColor'     ,[.87 .49 0])
set(handles.Hist,'SelAreaEdgeColor',[.87 .49 0])
set(handles.Hist,'SelAreaFaceColor',[1 .69 .39])
set(handles.Hist,'AreaEdgeColor'   ,[.3 .3 .3])
set(handles.Hist,'BackgroundColor' ,[1 1 1])
set(handles.Hist,'AxisColor'       ,[.3 .3 .3])
set(handles.Hist,'Position'        ,[10 53 600 70])

% Connect edit boxes content to uiHistory control
handles.Hist.addlistener('onStartDrag',@demo_event_onStartDrag);
handles.Hist.addlistener('onDrag'     ,@demo_event_onDrag);
handles.Hist.addlistener('onReleased' ,@demo_event_onReleased);

% Force the execution of events
handles.Hist.Cmin = xData(50);

% Move figure to the center of the screen and make it visible
movegui(handles.Fig,'center');
set(handles.Fig,'visible','on');


  function demo_event_onStartDrag(eventSrc,eventData)  %#ok<INUSD>
    set(handles.EdStart,'backgroundcolor',[.8 .9 .8]);
    set(handles.EdEnd  ,'backgroundcolor',[.8 .9 .8]);
  end


  function demo_event_onDrag(eventSrc,eventData) %#ok<INUSL>
    update_display(eventData.Positions);
  end

  function demo_event_onReleased(eventSrc,eventData) %#ok<INUSL>
    update_display(eventData.Positions);
    set(handles.EdStart,'backgroundcolor',[1 1 1]);
    set(handles.EdEnd  ,'backgroundcolor',[1 1 1]);
  end

  function update_display(cursorPositions)
    
    % Find indices of the 2 cursors position in the xData serie
    I1 = find(cursorPositions(1) >= xData,1,'last');
    I2 = find(cursorPositions(2) <= xData,1,'first');
    
    % Update dates in the edit boxes
    set(handles.EdStart,'string',datestr(cursorPositions(1),'dd mmm YY'));
    set(handles.EdEnd  ,'string',datestr(cursorPositions(2),'dd mmm YY'));
    
    % Delete line plotted on top axes and redraw the new one
    delete(get(handles.AxPlot,'children'));
    line(xData(I1:I2),yData(I1:I2),'parent',handles.AxPlot,'color',[.87 .49 0],'LineWidth',2);
    
    % Reset axis properties to fit the new line
    axis(handles.AxPlot,'tight')
    set(handles.AxPlot,'box','on','XTickLabel',{},'YTickLabel',{})
    
  end

end

Contact us