15 lines
1.7 KiB
JavaScript
15 lines
1.7 KiB
JavaScript
(function($){var options={series:{threshold:null}};function init(plot){function thresholdData(plot,s,datapoints,below,color){var ps=datapoints.pointsize,i,x,y,p,prevp,thresholded=$.extend({},s);thresholded.datapoints={points:[],pointsize:ps,format:datapoints.format};thresholded.label=null;thresholded.color=color;thresholded.threshold=null;thresholded.originSeries=s;thresholded.data=[];var origpoints=datapoints.points,addCrossingPoints=s.lines.show;var threspoints=[];var newpoints=[];var m;for(i=0;i<origpoints.length;i+=ps){x=origpoints[i];y=origpoints[i+ 1];prevp=p;if(y<below)
|
|
p=threspoints;else
|
|
p=newpoints;if(addCrossingPoints&&prevp!=p&&x!=null&&i>0&&origpoints[i- ps]!=null){var interx=x+(below- y)*(x- origpoints[i- ps])/ (y - origpoints[i - ps + 1]);
|
|
prevp.push(interx);prevp.push(below);for(m=2;m<ps;++m)
|
|
prevp.push(origpoints[i+ m]);p.push(null);p.push(null);for(m=2;m<ps;++m)
|
|
p.push(origpoints[i+ m]);p.push(interx);p.push(below);for(m=2;m<ps;++m)
|
|
p.push(origpoints[i+ m]);}
|
|
p.push(x);p.push(y);for(m=2;m<ps;++m)
|
|
p.push(origpoints[i+ m]);}
|
|
datapoints.points=newpoints;thresholded.datapoints.points=threspoints;if(thresholded.datapoints.points.length>0){var origIndex=$.inArray(s,plot.getData());plot.getData().splice(origIndex+ 1,0,thresholded);}}
|
|
function processThresholds(plot,s,datapoints){if(!s.threshold)
|
|
return;if(s.threshold instanceof Array){s.threshold.sort(function(a,b){return a.below- b.below;});$(s.threshold).each(function(i,th){thresholdData(plot,s,datapoints,th.below,th.color);});}
|
|
else{thresholdData(plot,s,datapoints,s.threshold.below,s.threshold.color);}}
|
|
plot.hooks.processDatapoints.push(processThresholds);}
|
|
$.plot.plugins.push({init:init,options:options,name:'threshold',version:'1.2'});})(jQuery); |