|
|
| Rivi 568: |
Rivi 568: |
| | | |
| function addDataToCurrentChart( memo ) { | | function addDataToCurrentChart( memo ) { |
| | |
| | |
| | // sort according to compare date |
| | memo.obsesA.sort( function( a, b ) { return a.compareDate - b.compareDate; }); |
| | |
| | // make week averages |
| | memo.avgW = {}; |
| | for (var o in memo.obsesA) { |
| | |
| | mwDate = new Date( memo.obsesA[o].compareDate.getFullYear(), memo.obsesA[o].compareDate.getMonth(), memo.obsesA[o].compareDate.getDate() ); |
| | y = mwDate.getFullYear(); |
| | w = mwDate.getWeek(); |
| | v = memo.obsesA[o].value + memo.distF*Math.random() - memo.distF*Math.random(); |
| | if ( typeof memo.avgW[y] == 'undefined' ) { memo.avgW[y] = {}; } |
| | if ( typeof memo.avgW[y][w] == 'undefined' ) { |
| | mwDate.setDate( mwDate.getDate() - mwDate.getDay() + 3 ) |
| | memo.avgW[y][w] = { cDate: mwDate, values: [ v ], sum: v, count: 1, avg: v }; |
| | } else { |
| | memo.avgW[y][w].values.push( v ); |
| | memo.avgW[y][w].sum += v; |
| | memo.avgW[y][w].count++; |
| | memo.avgW[y][w].avg = memo.avgW[y][w].sum / memo.avgW[y][w].count; |
| | } |
| | } |
| | |
| | console.log( memo.obsesA ); |
| | |
| | //var diff = obs.value - memo.avgW[ obs.compareDate.getFullYear() ][ obs.compareDate.getWeek() ].avg; |
| | //var diff = Math.round( diff*100 ); |
| | //var diffStr = diff.toString() + ' cm'; |
| | //if ( diff > 0 ) { diffStr = '+' + diffStr; } |
| | //dataRow[s*4+4] = diffStr; //annotation |
| | | |
| | | |
| Rivi 834: |
Rivi 866: |
| drawChart(memo); | | drawChart(memo); |
|
| |
|
| }
| |
|
| |
| function XaddDataToSeasonChart(memo) {
| |
|
| |
| // do axis min and max
| |
| memo.axisMinDate = new Date( memo.obsMinCompDateMs );
| |
| memo.axisMaxDate = new Date( memo.obsMaxCompDateMs );
| |
| memo.axisMinDate.setDate(1);
| |
| //memo.axisMaxDate.setMonth( memo.axisMaxDate.getMonth()+1 );
| |
| memo.axisMaxDate.setDate(31);
| |
|
| |
| //console.log( memo.obsesA );
| |
|
| |
| for (var o in memo.obsesA) {
| |
| obs = memo.obsesA[ o ];
| |
|
| |
| s = obs.seriesId;
| |
|
| |
| if ( s != today.getFullYear() ) {
| |
| s = memo.axisMinDate.getFullYear() + memo.axisMaxDate.getFullYear();
| |
| }
| |
|
| |
| if (typeof memo.seriesO[ s ] == 'undefined' ) {
| |
| if ( s == today.getFullYear() ) {
| |
| memo.seriesO[ s ] = { 'id': s, 'order': s, 'title': s, 'type': 'scatter', 'color': '#9999ff', linewidth: 3, 'visibleinlegend': true, 'trendline': 'none', 'obses': [] };
| |
| } else {
| |
| memo.seriesO[ s ] = { 'id': s, 'order': s, 'title': s, 'type': 'scatter', 'color': '#ff9999', 'visibleinlegend': false, 'trendline': 'none', 'obses': [] };
| |
| }
| |
| }
| |
|
| |
| obs.xvalue = obs.compareDate;
| |
| obs.yvalue = obs.data.val;
| |
| obs.value = obs.data.val + ' ' + obs.data.unit;
| |
| obs.valueUnit = i18n[ 'Date' ][ memo.lang ];
| |
| obs.tooltip = '<p><b>' + obs.season + '</b></p>';
| |
| obs.tooltip += '<p>' + i18n[ 'level' ].title[ memo.lang ] + ': ' + obs.obsdatetime.toLocaleDateString( memo.lang ) + '</p>';
| |
| obs.tooltip += obs.addInfo;
| |
| memo.seriesO[ s ].obses.push( obs );
| |
| }
| |
|
| |
| memo.seriesA = []; for ( var s in memo.seriesO ) { memo.seriesA.push( memo.seriesO[s] ) };
| |
| memo.seriesA.sort( function( a, b ) { return a.order-b.order; } );
| |
|
| |
| for ( var s in memo.seriesA ) {
| |
| if ( memo.seriesA[ s ].type == 'scatter' ) {
| |
|
| |
| memo.data.addColumn( 'number', memo.seriesA[ s ].title ); // + ' ' + memo.obsMinYear + '-' + memo.obsMaxYear );
| |
| memo.data.addColumn( { type: 'string', 'role': 'style' } );
| |
| memo.data.addColumn( { type: 'string', role: 'tooltip', 'p': { 'html': true } } );
| |
| memo.data.addColumn( { type: 'string', role: 'annotation' } );
| |
|
| |
| memo.options.series.push( { type: 'scatter', pointType: 'circle', pointSize: 9, color: memo.seriesA[ s ].color, visibleInLegend: memo.seriesA[ s ].visibleinlegend } );
| |
|
| |
| if ( memo.seriesA[ s ].trendline != 'none' && memo.seriesA[ s ].obses.length > 1 ) {
| |
| memo.options.trendlines[ memo.options.series.length - 1 ] = { type: 'linear', title: i18n.trendline, lineWidth: 2.33, visibleInLegend: false, tooltip: false };
| |
| } else {
| |
| memo.options.trendlines[ memo.options.series.length - 1 ] = { type: 'linear', title: i18n.trendline, lineWidth: 0, color: 'transparent', visibleInLegend: false, tooltip: false };
| |
| }
| |
| }
| |
|
| |
| }
| |
|
| |
| // add data to table
| |
| cc = memo.data.getNumberOfColumns();
| |
| var st = 0;
| |
| for ( var s in memo.seriesA ) {
| |
|
| |
| for ( var o in memo.seriesA[ s ].obses ) {
| |
|
| |
| obs = memo.seriesA[ s ].obses[ o ];
| |
|
| |
| dataRow = [];
| |
|
| |
| // fill row with nulls
| |
| for ( var i=0; i<cc; i++ ) { dataRow.push( null ); }
| |
|
| |
| // x axis value
| |
| dataRow[ 0 ] = obs.xvalue;
| |
|
| |
| if ( memo.seriesA[ s ].type == 'candlestick' ) {
| |
|
| |
| dataRow[ st+1 ] = obs.low;
| |
| dataRow[ st+2 ] = obs.low;
| |
| dataRow[ st+3 ] = obs.high;
| |
| dataRow[ st+4 ] = obs.high;
| |
| dataRow[ st+5 ] = obs.tooltip;
| |
|
| |
| } else if ( memo.seriesA[ s ].type == 'scatter' ) {
| |
|
| |
| dataRow[ st+1 ] = obs.yvalue;
| |
| dataRow[ st+2 ] = obs.style;
| |
| dataRow[ st+3 ] = obs.tooltip;
| |
| dataRow[ st+4 ] = null;
| |
| }
| |
|
| |
| memo.dataA.push( dataRow );
| |
|
| |
| }
| |
|
| |
| if ( memo.seriesA[ s ].type == 'candlestick' ) {
| |
| st += 5;
| |
| } else if ( memo.seriesA[ s ].type == 'scatter' ) {
| |
| st += 4;
| |
| }
| |
| }
| |
|
| |
| drawChart(memo);
| |
| } | | } |
|
| |
|