Changeset 2133


Ignore:
Timestamp:
Dec 19, 2011, 5:08:12 PM (11 years ago)
Author:
tjeerd@…
Message:

VIS-70, VIS-74 and some boxplot stuff

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/dbnp/visualization/VisualizeController.groovy

    r2129 r2133  
    923923
    924924            for ( String key : dataMap.keySet() ) {
    925                 double dblMEAN = computeMean(dataMap.get(key));
    926                 double dblSEM = computeSEM(dataMap.get(key),dblMEAN);
    927 
     925                def objInfos = computePercentile(dataMap.get(key),50);
     926                double dblMEDIAN = objInfos.get("value");
    928927                double Q1 = computePercentile(dataMap.get(key),25).get("value");
    929928                double Q3 = computePercentile(dataMap.get(key),75).get("value");
    930929
    931                 /* DEBUG
     930                // Calcultate 1.5* inter-quartile-distance
     931                double dblIQD = (Q3-Q1)*1.5;
     932
     933                /* // DEBUG
    932934                println("---");
    933935                println("  dataMap["+key+"]:: "+dataMap.get(key));
    934                 println("  dblMEAN:: "+dblMEAN);
    935                 println("  dblSEM:: "+dblSEM);
     936                println("  dblMEDIAN:: "+dblMEDIAN);
     937                println("  dblIQD:: "+dblIQD);
    936938                println("  Q1:: "+Q1);
    937939                println("  Q3:: "+Q3);
     
    941943                return_data[ "series" ] << [
    942944                        "name": key,
    943                         "y" : [key, (dblMEAN-dblSEM), Q1, dblMEAN, Q3, (dblMEAN+dblSEM)]
     945                        "y" : [key, objInfos.get("max"), (dblMEDIAN+dblIQD), Q3, dblMEDIAN, Q1, (dblMEDIAN-dblIQD), objInfos.get("min")]
    944946                ];
    945947            }
    946948
    947             println(return_data);
     949            //println(return_data);
    948950
    949951
     
    13021304        listOfValues.sort();
    13031305
    1304         def listSize = listOfValues.size();
     1306        def listSize = listOfValues.size()-1;
    13051307
    13061308        def objReturn = null;
     1309        def objMin = null;
     1310        def objMax = null;
    13071311
    13081312        def dblFactor = Percentile/100;
    13091313
    1310                 if( listSize > 0 ) {
    1311             def listHalf = (int) Math.abs(listSize*dblFactor);
    1312             if(listHalf==listSize*dblFactor) {
     1314                if( listSize >= 0 ) {
     1315            def intPointer = (int) Math.abs(listSize*dblFactor);
     1316            if(intPointer==listSize*dblFactor) {
     1317                // If we exactly end up at an item, take this item
     1318                objReturn = listOfValues.get(intPointer);
     1319            } else {
    13131320                // If we don't exactly end up at an item, take the mean of the 2 adjecent values
    1314                 objReturn = (listOfValues.get(listHalf)+listOfValues.get(listHalf-1))/2;
    1315             } else {
    1316                 // If we exactly end up at an item, take this item
    1317                 objReturn = listOfValues.get(listHalf);
    1318             }
    1319         }
    1320 
    1321                 return ["value": objReturn];
     1321                objReturn = (listOfValues.get(intPointer)+listOfValues.get(intPointer+1))/2;
     1322            }
     1323
     1324            objMin = listOfValues.get(0);
     1325            objMax = listOfValues.get(listSize);
     1326        }
     1327
     1328                return ["value": objReturn, "min": objMin, "max": objMax];
    13221329        }
    13231330
  • trunk/grails-app/views/visualize/index.gsp

    r2129 r2133  
    66       
    77        <!--[if lt IE 9]><g:javascript src="jqplot/excanvas.min.js" /><![endif]-->
    8         <g:javascript src="jqplot/jquery.jqplot.min.js" />
     8        <g:javascript src="jqplot/jquery.jqplot.js" />
    99        <link rel="stylesheet" type="text/css" href="<g:resource dir='css' file='jquery.jqplot.min.css' />" />
    1010       
     
    7474                        <div class="menu_header">
    7575                            <span class="menu_header_count">4</span>
    76                             <span class="menu_header_label">Group by <img src="${resource(dir: 'images', file: 'spinner.gif')}" class="spinner" /></span>
     76                            <span class="menu_header_label"><span style="font-size: small">OPTIONAL:</span> Group by <img src="${resource(dir: 'images', file: 'spinner.gif')}" class="spinner" /></span>
    7777                            <span class="menu_header_clear">(<a href='#' onclick="clearSelect(this, 4); return false;">clear</a>)</span>
    7878                            <div class="block_variable">
     
    123123                <div id="visualization_container">
    124124                    <div id="visualization"></div>
    125                     <br clear="all" />
    126125                </div>
    127126
  • trunk/web-app/js/jqplot/plugins/jqplot.boxplotRenderer.js

    r2129 r2133  
    7777            for (var i=0, di=d[i]; i<d.length; di=d[++i]) {
    7878               var  x = xp(di[0]),
    79                   min = yp(di[1]),
    80                    q1 = yp(di[2]),
    81                   med = yp(di[3]),
    82                    q3 = yp(di[4]),
    83                   max = yp(di[5]);
     79                  min = yp(di[6]),
     80                   q1 = yp(di[5]),
     81                  med = yp(di[4]),
     82                   q3 = yp(di[3]),
     83                  max = yp(di[2]);
    8484
    8585                var endL = x - endW/2; // start (left) x coord of min/max ticks
     
    8888                var medR = x + boxW/2; // end (right) x coord of median tick
    8989
     90                // median tick is full box width
     91                r.shapeRenderer.draw(ctx, [[medL, med], [medR, med]], options);
     92               
    9093                // draw whiskers
    9194                r.shapeRenderer.draw(ctx, [[x, min], [x, q1]], options);
     
    9598                r.shapeRenderer.draw(ctx, [[endL, min], [endR, min]], options);
    9699                r.shapeRenderer.draw(ctx, [[endL, max], [endR, max]], options);
    97                 // median tick is full box width
    98                 r.shapeRenderer.draw(ctx, [[medL, med], [medR, med]], options);
    99100
    100101                // draw box
     
    118119            showMarker: true,
    119120            tooltipAxes: 'y',
    120             yvalues: 5,
     121            yvalues: 7,
    121122            formatString: '<table class="jqplot-highlighter">' +
    122                           '<tr><td>min:</td><td>%s</td></tr>' +
    123                           '<tr><td>q1:</td><td>%s</td></tr>' +
    124                           '<tr><td>med:</td><td>%s</td></tr>' +
    125                           '<tr><td>q3:</td><td>%s</td></tr>' +
    126                           '<tr><td>max:</td><td>%s</td></tr>' +
     123                          '<tr><td>Maximum:</td><td>%s</td></tr>' +
     124                          '<tr><td>Median + 1.5*IQR:</td><td>%s</td></tr>' +
     125                          '<tr><td>Q3:</td><td>%s</td></tr>' +
     126                          '<tr><td>Median:</td><td>%s</td></tr>' +
     127                          '<tr><td>Q1:</td><td>%s</td></tr>' +
     128                          '<tr><td>Median - 1.5*IQR:</td><td>%s</td></tr>' +
     129                          '<tr><td>Minimum:</td><td>%s</td></tr>' +
    127130                          '</table>'
    128131            };
Note: See TracChangeset for help on using the changeset viewer.