| OLD | NEW |
| (Empty) |
| 1 /* Flot plugin for stacking data sets rather than overlyaing them. | |
| 2 | |
| 3 Copyright (c) 2007-2013 IOLA and Ole Laursen. | |
| 4 Licensed under the MIT license. | |
| 5 | |
| 6 The plugin assumes the data is sorted on x (or y if stacking horizontally). | |
| 7 For line charts, it is assumed that if a line has an undefined gap (from a | |
| 8 null point), then the line above it should have the same gap - insert zeros | |
| 9 instead of "null" if you want another behaviour. This also holds for the start | |
| 10 and end of the chart. Note that stacking a mix of positive and negative values | |
| 11 in most instances doesn't make sense (so it looks weird). | |
| 12 | |
| 13 Two or more series are stacked when their "stack" attribute is set to the same | |
| 14 key (which can be any number or string or just "true"). To specify the default | |
| 15 stack, you can set the stack option like this: | |
| 16 | |
| 17 series: { | |
| 18 stack: null/false, true, or a key (number/string) | |
| 19 } | |
| 20 | |
| 21 You can also specify it for a single series, like this: | |
| 22 | |
| 23 $.plot( $("#placeholder"), [{ | |
| 24 data: [ ... ], | |
| 25 stack: true | |
| 26 }]) | |
| 27 | |
| 28 The stacking order is determined by the order of the data series in the array | |
| 29 (later series end up on top of the previous). | |
| 30 | |
| 31 Internally, the plugin modifies the datapoints in each series, adding an | |
| 32 offset to the y value. For line series, extra data points are inserted through | |
| 33 interpolation. If there's a second y value, it's also adjusted (e.g for bar | |
| 34 charts or filled areas). | |
| 35 | |
| 36 */(function(e){function n(e){function t(e,t){var n=null;for(var r=0;r<t.length;+
+r){if(e==t[r])break;t[r].stack==e.stack&&(n=t[r])}return n}function n(e,n,r){if
(n.stack==null||n.stack===!1)return;var i=t(n,e.getData());if(!i)return;var s=r.
pointsize,o=r.points,u=i.datapoints.pointsize,a=i.datapoints.points,f=[],l,c,h,p
,d,v,m=n.lines.show,g=n.bars.horizontal,y=s>2&&(g?r.format[2].x:r.format[2].y),b
=m&&n.lines.steps,w=!0,E=g?1:0,S=g?0:1,x=0,T=0,N,C;for(;;){if(x>=o.length)break;
N=f.length;if(o[x]==null){for(C=0;C<s;++C)f.push(o[x+C]);x+=s}else if(T>=a.lengt
h){if(!m)for(C=0;C<s;++C)f.push(o[x+C]);x+=s}else if(a[T]==null){for(C=0;C<s;++C
)f.push(null);w=!0,T+=u}else{l=o[x+E],c=o[x+S],p=a[T+E],d=a[T+S],v=0;if(l==p){fo
r(C=0;C<s;++C)f.push(o[x+C]);f[N+S]+=d,v=d,x+=s,T+=u}else if(l>p){if(m&&x>0&&o[x
-s]!=null){h=c+(o[x-s+S]-c)*(p-l)/(o[x-s+E]-l),f.push(p),f.push(h+d);for(C=2;C<s
;++C)f.push(o[x+C]);v=d}T+=u}else{if(w&&m){x+=s;continue}for(C=0;C<s;++C)f.push(
o[x+C]);m&&T>0&&a[T-u]!=null&&(v=d+(a[T-u+S]-d)*(l-p)/(a[T-u+E]-p)),f[N+S]+=v,x+
=s}w=!1,N!=f.length&&y&&(f[N+2]+=v)}if(b&&N!=f.length&&N>0&&f[N]!=null&&f[N]!=f[
N-s]&&f[N+1]!=f[N-s+1]){for(C=0;C<s;++C)f[N+s+C]=f[N+C];f[N+1]=f[N-s+1]}}r.point
s=f}e.hooks.processDatapoints.push(n)}var t={series:{stack:null}};e.plot.plugins
.push({init:n,options:t,name:"stack",version:"1.2"})})(jQuery); | |
| OLD | NEW |