Series.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:4k
源码类别:

OA系统

开发平台:

Java

  1. /*
  2. Copyright (c) 2004-2006, The Dojo Foundation
  3. All Rights Reserved.
  4. Licensed under the Academic Free License version 2.1 or above OR the
  5. modified BSD license. For more information on Dojo licensing, see:
  6. http://dojotoolkit.org/community/licensing.shtml
  7. */
  8. dojo.provide("dojo.charting.Series");
  9. dojo.require("dojo.lang.common");
  10. dojo.require("dojo.charting.Plotters");
  11. dojo.charting.Series = function (kwArgs) {
  12. var args = kwArgs || {length:1};
  13. this.dataSource = args.dataSource || null;
  14. this.bindings = {};
  15. this.color = args.color;
  16. this.label = args.label;
  17. if (args.bindings) {
  18. for (var p in args.bindings) {
  19. this.addBinding(p, args.bindings[p]);
  20. }
  21. }
  22. };
  23. dojo.extend(dojo.charting.Series, {bind:function (src, bindings) {
  24. this.dataSource = src;
  25. this.bindings = bindings;
  26. }, addBinding:function (name, binding) {
  27. this.bindings[name] = binding;
  28. }, evaluate:function (kwArgs) {
  29. var ret = [];
  30. var a = this.dataSource.getData();
  31. var l = a.length;
  32. var start = 0;
  33. var end = l;
  34. if (kwArgs) {
  35. if (kwArgs.between) {
  36. for (var i = 0; i < l; i++) {
  37. var fld = this.dataSource.getField(a[i], kwArgs.between.field);
  38. if (fld >= kwArgs.between.low && fld <= kwArgs.between.high) {
  39. var o = {src:a[i], series:this};
  40. for (var p in this.bindings) {
  41. o[p] = this.dataSource.getField(a[i], this.bindings[p]);
  42. }
  43. ret.push(o);
  44. }
  45. }
  46. } else {
  47. if (kwArgs.from || kwArgs.length) {
  48. if (kwArgs.from) {
  49. start = Math.max(kwArgs.from, 0);
  50. if (kwArgs.to) {
  51. end = Math.min(kwArgs.to, end);
  52. }
  53. } else {
  54. if (kwArgs.length < 0) {
  55. start = Math.max((end + length), 0);
  56. } else {
  57. end = Math.min((start + length), end);
  58. }
  59. }
  60. for (var i = start; i < end; i++) {
  61. var o = {src:a[i], series:this};
  62. for (var p in this.bindings) {
  63. o[p] = this.dataSource.getField(a[i], this.bindings[p]);
  64. }
  65. ret.push(o);
  66. }
  67. }
  68. }
  69. } else {
  70. for (var i = start; i < end; i++) {
  71. var o = {src:a[i], series:this};
  72. for (var p in this.bindings) {
  73. o[p] = this.dataSource.getField(a[i], this.bindings[p]);
  74. }
  75. ret.push(o);
  76. }
  77. }
  78. if (ret.length > 0 && typeof (ret[0].x) != "undefined") {
  79. ret.sort(function (a, b) {
  80. if (a.x > b.x) {
  81. return 1;
  82. }
  83. if (a.x < b.x) {
  84. return -1;
  85. }
  86. return 0;
  87. });
  88. }
  89. return ret;
  90. }, trends:{createRange:function (values, len) {
  91. var idx = values.length - 1;
  92. var length = (len || values.length);
  93. return {"index":idx, "length":length, "start":Math.max(idx - length, 0)};
  94. }, mean:function (values, len) {
  95. var range = this.createRange(values, len);
  96. if (range.index < 0) {
  97. return 0;
  98. }
  99. var total = 0;
  100. var count = 0;
  101. for (var i = range.index; i >= range.start; i--) {
  102. total += values[i].y;
  103. count++;
  104. }
  105. total /= Math.max(count, 1);
  106. return total;
  107. }, variance:function (values, len) {
  108. var range = this.createRange(values, len);
  109. if (range.index < 0) {
  110. return 0;
  111. }
  112. var total = 0;
  113. var square = 0;
  114. var count = 0;
  115. for (var i = range.index; i >= range.start; i--) {
  116. total += values[i].y;
  117. square += Math.pow(values[i].y, 2);
  118. count++;
  119. }
  120. return (square / count) - Math.pow(total / count, 2);
  121. }, standardDeviation:function (values, len) {
  122. return Math.sqrt(this.getVariance(values, len));
  123. }, max:function (values, len) {
  124. var range = this.createRange(values, len);
  125. if (range.index < 0) {
  126. return 0;
  127. }
  128. var max = Number.MIN_VALUE;
  129. for (var i = range.index; i >= range.start; i--) {
  130. max = Math.max(values[i].y, max);
  131. }
  132. return max;
  133. }, min:function (values, len) {
  134. var range = this.createRange(values, len);
  135. if (range.index < 0) {
  136. return 0;
  137. }
  138. var min = Number.MAX_VALUE;
  139. for (var i = range.index; i >= range.start; i--) {
  140. min = Math.min(values[i].y, min);
  141. }
  142. return min;
  143. }, median:function (values, len) {
  144. var range = this.createRange(values, len);
  145. if (range.index < 0) {
  146. return 0;
  147. }
  148. var a = [];
  149. for (var i = range.index; i >= range.start; i--) {
  150. var b = false;
  151. for (var j = 0; j < a.length; j++) {
  152. if (values[i].y == a[j]) {
  153. b = true;
  154. break;
  155. }
  156. }
  157. if (!b) {
  158. a.push(values[i].y);
  159. }
  160. }
  161. a.sort();
  162. if (a.length > 0) {
  163. return a[Math.ceil(a.length / 2)];
  164. }
  165. return 0;
  166. }, mode:function (values, len) {
  167. var range = this.createRange(values, len);
  168. if (range.index < 0) {
  169. return 0;
  170. }
  171. var o = {};
  172. var ret = 0;
  173. var median = Number.MIN_VALUE;
  174. for (var i = range.index; i >= range.start; i--) {
  175. if (!o[values[i].y]) {
  176. o[values[i].y] = 1;
  177. } else {
  178. o[values[i].y]++;
  179. }
  180. }
  181. for (var p in o) {
  182. if (median < o[p]) {
  183. median = o[p];
  184. ret = p;
  185. }
  186. }
  187. return ret;
  188. }}});