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

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.vml.Plotters");
  9. dojo.require("dojo.lang.common");
  10. if (dojo.render.vml.capable) {
  11. dojo.mixin(dojo.charting.Plotters, {_group:function (plotarea) {
  12. var group = document.createElement("div");
  13. group.style.position = "absolute";
  14. group.style.top = "0px";
  15. group.style.left = "0px";
  16. group.style.width = plotarea.size.width + "px";
  17. group.style.height = plotarea.size.height + "px";
  18. return group;
  19. }, Bar:function (plotarea, plot, kwArgs, applyTo) {
  20. var area = plotarea.getArea();
  21. var group = dojo.charting.Plotters._group(plotarea);
  22. var n = plot.series.length;
  23. var data = [];
  24. for (var i = 0; i < n; i++) {
  25. var tmp = plot.series[i].data.evaluate(kwArgs);
  26. data.push(tmp);
  27. }
  28. var space = 8;
  29. var nPoints = data[0].length;
  30. if (nPoints == 0) {
  31. return group;
  32. }
  33. var width = ((area.right - area.left) - (space * (nPoints - 1))) / nPoints;
  34. var barWidth = Math.round(width / n);
  35. var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot);
  36. for (var i = 0; i < nPoints; i++) {
  37. var xStart = area.left + (width * i) + (space * i);
  38. for (var j = 0; j < n; j++) {
  39. var value = data[j][i].y;
  40. var yA = yOrigin;
  41. var x = xStart + (barWidth * j);
  42. var y = plot.axisY.getCoord(value, plotarea, plot);
  43. var h = Math.abs(yA - y);
  44. if (value < plot.axisX.origin) {
  45. yA = y;
  46. y = yOrigin;
  47. }
  48. var bar = document.createElement("v:rect");
  49. bar.style.position = "absolute";
  50. bar.style.top = y + 1 + "px";
  51. bar.style.left = x + "px";
  52. bar.style.width = barWidth + "px";
  53. bar.style.height = h + "px";
  54. bar.setAttribute("fillColor", data[j][i].series.color);
  55. bar.setAttribute("stroked", "false");
  56. bar.style.antialias = "false";
  57. var fill = document.createElement("v:fill");
  58. fill.setAttribute("opacity", "0.6");
  59. bar.appendChild(fill);
  60. if (applyTo) {
  61. applyTo(bar, data[j][i].src);
  62. }
  63. group.appendChild(bar);
  64. }
  65. }
  66. return group;
  67. }, HorizontalBar:function (plotarea, plot, kwArgs, applyTo) {
  68. var area = plotarea.getArea();
  69. var group = dojo.charting.Plotters._group(plotarea);
  70. var n = plot.series.length;
  71. var data = [];
  72. for (var i = 0; i < n; i++) {
  73. var tmp = plot.series[i].data.evaluate(kwArgs);
  74. data.push(tmp);
  75. }
  76. var space = 6;
  77. var nPoints = data[0].length;
  78. if (nPoints == 0) {
  79. return group;
  80. }
  81. var h = ((area.bottom - area.top) - (space * (nPoints - 1))) / nPoints;
  82. var barH = h / n;
  83. var xOrigin = plot.axisX.getCoord(0, plotarea, plot);
  84. for (var i = 0; i < nPoints; i++) {
  85. var yStart = area.top + (h * i) + (space * i);
  86. for (var j = 0; j < n; j++) {
  87. var value = data[j][i].y;
  88. var y = yStart + (barH * j);
  89. var xA = xOrigin;
  90. var x = plot.axisX.getCoord(value, plotarea, plot);
  91. var w = Math.abs(x - xA);
  92. if (value > 0) {
  93. x = xOrigin;
  94. }
  95. var bar = document.createElement("v:rect");
  96. bar.style.position = "absolute";
  97. bar.style.top = y + 1 + "px";
  98. bar.style.left = xA + "px";
  99. bar.style.width = w + "px";
  100. bar.style.height = barH + "px";
  101. bar.setAttribute("fillColor", data[j][i].series.color);
  102. bar.setAttribute("stroked", "false");
  103. bar.style.antialias = "false";
  104. var fill = document.createElement("v:fill");
  105. fill.setAttribute("opacity", "0.6");
  106. bar.appendChild(fill);
  107. if (applyTo) {
  108. applyTo(bar, data[j][i].src);
  109. }
  110. group.appendChild(bar);
  111. }
  112. }
  113. var space = 4;
  114. var n = plot.series.length;
  115. var h = ((area.bottom - area.top) - (space * (n - 1))) / n;
  116. var xOrigin = plot.axisX.getCoord(0, plotarea, plot);
  117. for (var i = 0; i < n; i++) {
  118. var series = plot.series[i];
  119. var data = series.data.evaluate(kwArgs);
  120. var y = area.top + (h * i) + (space * i);
  121. var value = data[data.length - 1].y;
  122. var xA = xOrigin;
  123. var x = plot.axisX.getCoord(value, plotarea, plot);
  124. var w = Math.abs(xA - x);
  125. if (value > 0) {
  126. xA = x;
  127. x = xOrigin;
  128. }
  129. }
  130. return group;
  131. }, Gantt:function (plotarea, plot, kwArgs, applyTo) {
  132. var area = plotarea.getArea();
  133. var group = dojo.charting.Plotters._group(plotarea);
  134. var n = plot.series.length;
  135. var data = [];
  136. for (var i = 0; i < n; i++) {
  137. var tmp = plot.series[i].data.evaluate(kwArgs);
  138. data.push(tmp);
  139. }
  140. var space = 2;
  141. var nPoints = data[0].length;
  142. if (nPoints == 0) {
  143. return group;
  144. }
  145. var h = ((area.bottom - area.top) - (space * (nPoints - 1))) / nPoints;
  146. var barH = h / n;
  147. for (var i = 0; i < nPoints; i++) {
  148. var yStart = area.top + (h * i) + (space * i);
  149. for (var j = 0; j < n; j++) {
  150. var high = data[j][i].high;
  151. var low = data[j][i].low;
  152. if (low > high) {
  153. var t = high;
  154. high = low;
  155. low = t;
  156. }
  157. var x = plot.axisX.getCoord(low, plotarea, plot);
  158. var w = plot.axisX.getCoord(high, plotarea, plot) - x;
  159. var y = yStart + (barH * j);
  160. var bar = document.createElement("v:rect");
  161. bar.style.position = "absolute";
  162. bar.style.top = y + 1 + "px";
  163. bar.style.left = x + "px";
  164. bar.style.width = w + "px";
  165. bar.style.height = barH + "px";
  166. bar.setAttribute("fillColor", data[j][i].series.color);
  167. bar.setAttribute("stroked", "false");
  168. bar.style.antialias = "false";
  169. var fill = document.createElement("v:fill");
  170. fill.setAttribute("opacity", "0.6");
  171. bar.appendChild(fill);
  172. if (applyTo) {
  173. applyTo(bar, data[j][i].src);
  174. }
  175. group.appendChild(bar);
  176. }
  177. }
  178. return group;
  179. }, StackedArea:function (plotarea, plot, kwArgs, applyTo) {
  180. var area = plotarea.getArea();
  181. var group = dojo.charting.Plotters._group(plotarea);
  182. var n = plot.series.length;
  183. var data = [];
  184. var totals = [];
  185. for (var i = 0; i < n; i++) {
  186. var tmp = plot.series[i].data.evaluate(kwArgs);
  187. for (var j = 0; j < tmp.length; j++) {
  188. if (i == 0) {
  189. totals.push(tmp[j].y);
  190. } else {
  191. totals[j] += tmp[j].y;
  192. }
  193. tmp[j].y = totals[j];
  194. }
  195. data.push(tmp);
  196. }
  197. for (var i = n - 1; i >= 0; i--) {
  198. var path = document.createElement("v:shape");
  199. path.setAttribute("strokeweight", "1px");
  200. path.setAttribute("strokecolor", data[i][0].series.color);
  201. path.setAttribute("fillcolor", data[i][0].series.color);
  202. path.setAttribute("coordsize", (area.right - area.left) + "," + (area.bottom - area.top));
  203. path.style.position = "absolute";
  204. path.style.top = "0px";
  205. path.style.left = "0px";
  206. path.style.width = area.right - area.left + "px";
  207. path.style.height = area.bottom - area.top + "px";
  208. var stroke = document.createElement("v:stroke");
  209. stroke.setAttribute("opacity", "0.8");
  210. path.appendChild(stroke);
  211. var fill = document.createElement("v:fill");
  212. fill.setAttribute("opacity", "0.4");
  213. path.appendChild(fill);
  214. var cmd = [];
  215. var r = 3;
  216. for (var j = 0; j < data[i].length; j++) {
  217. var values = data[i];
  218. var x = Math.round(plot.axisX.getCoord(values[j].x, plotarea, plot));
  219. var y = Math.round(plot.axisY.getCoord(values[j].y, plotarea, plot));
  220. if (j == 0) {
  221. cmd.push("m");
  222. cmd.push(x + "," + y);
  223. } else {
  224. cmd.push("l");
  225. cmd.push(x + "," + y);
  226. }
  227. var c = document.createElement("v:oval");
  228. c.setAttribute("strokeweight", "1px");
  229. c.setAttribute("strokecolor", values[j].series.color);
  230. c.setAttribute("fillcolor", values[j].series.color);
  231. var str = document.createElement("v:stroke");
  232. str.setAttribute("opacity", "0.8");
  233. c.appendChild(str);
  234. str = document.createElement("v:fill");
  235. str.setAttribute("opacity", "0.6");
  236. c.appendChild(str);
  237. var s = c.style;
  238. s.position = "absolute";
  239. s.top = (y - r) + "px";
  240. s.left = (x - r) + "px";
  241. s.width = (r * 2) + "px";
  242. s.height = (r * 2) + "px";
  243. group.appendChild(c);
  244. if (applyTo) {
  245. applyTo(c, data[j].src);
  246. }
  247. }
  248. if (i == 0) {
  249. cmd.push("l");
  250. cmd.push(x + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
  251. cmd.push("l");
  252. cmd.push(Math.round(plot.axisX.getCoord(data[0][0].x, plotarea, plot)) + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
  253. } else {
  254. var values = data[i - 1];
  255. cmd.push("l");
  256. cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length - 1].y, plotarea, plot)));
  257. for (var j = values.length - 2; j >= 0; j--) {
  258. var x = Math.round(plot.axisX.getCoord(values[j].x, plotarea, plot));
  259. var y = Math.round(plot.axisY.getCoord(values[j].y, plotarea, plot));
  260. cmd.push("l");
  261. cmd.push(x + "," + y);
  262. }
  263. }
  264. path.setAttribute("path", cmd.join(" ") + " x e");
  265. group.appendChild(path);
  266. }
  267. return group;
  268. }, StackedCurvedArea:function (plotarea, plot, kwArgs, applyTo) {
  269. var tension = 3;
  270. var area = plotarea.getArea();
  271. var group = dojo.charting.Plotters._group(plotarea);
  272. var n = plot.series.length;
  273. var data = [];
  274. var totals = [];
  275. for (var i = 0; i < n; i++) {
  276. var tmp = plot.series[i].data.evaluate(kwArgs);
  277. for (var j = 0; j < tmp.length; j++) {
  278. if (i == 0) {
  279. totals.push(tmp[j].y);
  280. } else {
  281. totals[j] += tmp[j].y;
  282. }
  283. tmp[j].y = totals[j];
  284. }
  285. data.push(tmp);
  286. }
  287. for (var i = n - 1; i >= 0; i--) {
  288. var path = document.createElement("v:shape");
  289. path.setAttribute("strokeweight", "1px");
  290. path.setAttribute("strokecolor", data[i][0].series.color);
  291. path.setAttribute("fillcolor", data[i][0].series.color);
  292. path.setAttribute("coordsize", (area.right - area.left) + "," + (area.bottom - area.top));
  293. path.style.position = "absolute";
  294. path.style.top = "0px";
  295. path.style.left = "0px";
  296. path.style.width = area.right - area.left + "px";
  297. path.style.height = area.bottom - area.top + "px";
  298. var stroke = document.createElement("v:stroke");
  299. stroke.setAttribute("opacity", "0.8");
  300. path.appendChild(stroke);
  301. var fill = document.createElement("v:fill");
  302. fill.setAttribute("opacity", "0.4");
  303. path.appendChild(fill);
  304. var cmd = [];
  305. var r = 3;
  306. for (var j = 0; j < data[i].length; j++) {
  307. var values = data[i];
  308. var x = Math.round(plot.axisX.getCoord(values[j].x, plotarea, plot));
  309. var y = Math.round(plot.axisY.getCoord(values[j].y, plotarea, plot));
  310. if (j == 0) {
  311. cmd.push("m");
  312. cmd.push(x + "," + y);
  313. } else {
  314. var lastx = Math.round(plot.axisX.getCoord(values[j - 1].x, plotarea, plot));
  315. var lasty = Math.round(plot.axisY.getCoord(values[j - 1].y, plotarea, plot));
  316. var dx = x - lastx;
  317. var dy = y - lasty;
  318. cmd.push("c");
  319. var cx = Math.round((x - (tension - 1) * (dx / tension)));
  320. cmd.push(cx + "," + lasty);
  321. cx = Math.round((x - (dx / tension)));
  322. cmd.push(cx + "," + y);
  323. cmd.push(x + "," + y);
  324. }
  325. var c = document.createElement("v:oval");
  326. c.setAttribute("strokeweight", "1px");
  327. c.setAttribute("strokecolor", values[j].series.color);
  328. c.setAttribute("fillcolor", values[j].series.color);
  329. var str = document.createElement("v:stroke");
  330. str.setAttribute("opacity", "0.8");
  331. c.appendChild(str);
  332. str = document.createElement("v:fill");
  333. str.setAttribute("opacity", "0.6");
  334. c.appendChild(str);
  335. var s = c.style;
  336. s.position = "absolute";
  337. s.top = (y - r) + "px";
  338. s.left = (x - r) + "px";
  339. s.width = (r * 2) + "px";
  340. s.height = (r * 2) + "px";
  341. group.appendChild(c);
  342. if (applyTo) {
  343. applyTo(c, data[j].src);
  344. }
  345. }
  346. if (i == 0) {
  347. cmd.push("l");
  348. cmd.push(x + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
  349. cmd.push("l");
  350. cmd.push(Math.round(plot.axisX.getCoord(data[0][0].x, plotarea, plot)) + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
  351. } else {
  352. var values = data[i - 1];
  353. cmd.push("l");
  354. cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length - 1].y, plotarea, plot)));
  355. for (var j = values.length - 2; j >= 0; j--) {
  356. var x = Math.round(plot.axisX.getCoord(values[j].x, plotarea, plot));
  357. var y = Math.round(plot.axisY.getCoord(values[j].y, plotarea, plot));
  358. var lastx = Math.round(plot.axisX.getCoord(values[j + 1].x, plotarea, plot));
  359. var lasty = Math.round(plot.axisY.getCoord(values[j + 1].y, plotarea, plot));
  360. var dx = x - lastx;
  361. var dy = y - lasty;
  362. cmd.push("c");
  363. var cx = Math.round((x - (tension - 1) * (dx / tension)));
  364. cmd.push(cx + "," + lasty);
  365. cx = Math.round((x - (dx / tension)));
  366. cmd.push(cx + "," + y);
  367. cmd.push(x + "," + y);
  368. }
  369. }
  370. path.setAttribute("path", cmd.join(" ") + " x e");
  371. group.appendChild(path);
  372. }
  373. return group;
  374. }, DataBar:function (data, plotarea, plot, applyTo) {
  375. var area = plotarea.getArea();
  376. var group = dojo.charting.Plotters._group(plotarea);
  377. var n = data.length;
  378. var w = (area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower);
  379. var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot);
  380. for (var i = 0; i < n; i++) {
  381. var value = data[i].y;
  382. var yA = yOrigin;
  383. var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2) + 1;
  384. var y = plot.axisY.getCoord(value, plotarea, plot);
  385. var h = Math.abs(yA - y);
  386. if (value < plot.axisX.origin) {
  387. yA = y;
  388. y = yOrigin;
  389. }
  390. var bar = document.createElement("v:rect");
  391. bar.style.position = "absolute";
  392. bar.style.top = y + 1 + "px";
  393. bar.style.left = x + "px";
  394. bar.style.width = w + "px";
  395. bar.style.height = h + "px";
  396. bar.setAttribute("fillColor", data[i].series.color);
  397. bar.setAttribute("stroked", "false");
  398. bar.style.antialias = "false";
  399. var fill = document.createElement("v:fill");
  400. fill.setAttribute("opacity", "0.6");
  401. bar.appendChild(fill);
  402. if (applyTo) {
  403. applyTo(bar, data[i].src);
  404. }
  405. group.appendChild(bar);
  406. }
  407. return group;
  408. }, Line:function (data, plotarea, plot, applyTo) {
  409. var area = plotarea.getArea();
  410. var group = dojo.charting.Plotters._group(plotarea);
  411. if (data.length == 0) {
  412. return group;
  413. }
  414. var path = document.createElement("v:shape");
  415. path.setAttribute("strokeweight", "2px");
  416. path.setAttribute("strokecolor", data[0].series.color);
  417. path.setAttribute("fillcolor", "none");
  418. path.setAttribute("filled", "false");
  419. path.setAttribute("coordsize", (area.right - area.left) + "," + (area.bottom - area.top));
  420. path.style.position = "absolute";
  421. path.style.top = "0px";
  422. path.style.left = "0px";
  423. path.style.width = area.right - area.left + "px";
  424. path.style.height = area.bottom - area.top + "px";
  425. var stroke = document.createElement("v:stroke");
  426. stroke.setAttribute("opacity", "0.8");
  427. path.appendChild(stroke);
  428. var cmd = [];
  429. var r = 3;
  430. for (var i = 0; i < data.length; i++) {
  431. var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot));
  432. var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot));
  433. if (i == 0) {
  434. cmd.push("m");
  435. cmd.push(x + "," + y);
  436. } else {
  437. cmd.push("l");
  438. cmd.push(x + "," + y);
  439. }
  440. var c = document.createElement("v:oval");
  441. c.setAttribute("strokeweight", "1px");
  442. c.setAttribute("strokecolor", data[i].series.color);
  443. c.setAttribute("fillcolor", data[i].series.color);
  444. var str = document.createElement("v:stroke");
  445. str.setAttribute("opacity", "0.8");
  446. c.appendChild(str);
  447. str = document.createElement("v:fill");
  448. str.setAttribute("opacity", "0.6");
  449. c.appendChild(str);
  450. var s = c.style;
  451. s.position = "absolute";
  452. s.top = (y - r) + "px";
  453. s.left = (x - r) + "px";
  454. s.width = (r * 2) + "px";
  455. s.height = (r * 2) + "px";
  456. group.appendChild(c);
  457. if (applyTo) {
  458. applyTo(c, data[i].src);
  459. }
  460. }
  461. path.setAttribute("path", cmd.join(" ") + " e");
  462. group.appendChild(path);
  463. return group;
  464. }, CurvedLine:function (data, plotarea, plot, applyTo) {
  465. var tension = 3;
  466. var area = plotarea.getArea();
  467. var group = dojo.charting.Plotters._group(plotarea);
  468. if (data.length == 0) {
  469. return group;
  470. }
  471. var path = document.createElement("v:shape");
  472. path.setAttribute("strokeweight", "2px");
  473. path.setAttribute("strokecolor", data[0].series.color);
  474. path.setAttribute("fillcolor", "none");
  475. path.setAttribute("filled", "false");
  476. path.setAttribute("coordsize", (area.right - area.left) + "," + (area.bottom - area.top));
  477. path.style.position = "absolute";
  478. path.style.top = "0px";
  479. path.style.left = "0px";
  480. path.style.width = area.right - area.left + "px";
  481. path.style.height = area.bottom - area.top + "px";
  482. var stroke = document.createElement("v:stroke");
  483. stroke.setAttribute("opacity", "0.8");
  484. path.appendChild(stroke);
  485. var cmd = [];
  486. var r = 3;
  487. for (var i = 0; i < data.length; i++) {
  488. var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot));
  489. var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot));
  490. if (i == 0) {
  491. cmd.push("m");
  492. cmd.push(x + "," + y);
  493. } else {
  494. var lastx = Math.round(plot.axisX.getCoord(data[i - 1].x, plotarea, plot));
  495. var lasty = Math.round(plot.axisY.getCoord(data[i - 1].y, plotarea, plot));
  496. var dx = x - lastx;
  497. var dy = y - lasty;
  498. cmd.push("c");
  499. var cx = Math.round((x - (tension - 1) * (dx / tension)));
  500. cmd.push(cx + "," + lasty);
  501. cx = Math.round((x - (dx / tension)));
  502. cmd.push(cx + "," + y);
  503. cmd.push(x + "," + y);
  504. }
  505. var c = document.createElement("v:oval");
  506. c.setAttribute("strokeweight", "1px");
  507. c.setAttribute("strokecolor", data[i].series.color);
  508. c.setAttribute("fillcolor", data[i].series.color);
  509. var str = document.createElement("v:stroke");
  510. str.setAttribute("opacity", "0.8");
  511. c.appendChild(str);
  512. str = document.createElement("v:fill");
  513. str.setAttribute("opacity", "0.6");
  514. c.appendChild(str);
  515. var s = c.style;
  516. s.position = "absolute";
  517. s.top = (y - r) + "px";
  518. s.left = (x - r) + "px";
  519. s.width = (r * 2) + "px";
  520. s.height = (r * 2) + "px";
  521. group.appendChild(c);
  522. if (applyTo) {
  523. applyTo(c, data[i].src);
  524. }
  525. }
  526. path.setAttribute("path", cmd.join(" ") + " e");
  527. group.appendChild(path);
  528. return group;
  529. }, Area:function (data, plotarea, plot, applyTo) {
  530. var area = plotarea.getArea();
  531. var group = dojo.charting.Plotters._group(plotarea);
  532. if (data.length == 0) {
  533. return group;
  534. }
  535. var path = document.createElement("v:shape");
  536. path.setAttribute("strokeweight", "1px");
  537. path.setAttribute("strokecolor", data[0].series.color);
  538. path.setAttribute("fillcolor", data[0].series.color);
  539. path.setAttribute("coordsize", (area.right - area.left) + "," + (area.bottom - area.top));
  540. path.style.position = "absolute";
  541. path.style.top = "0px";
  542. path.style.left = "0px";
  543. path.style.width = area.right - area.left + "px";
  544. path.style.height = area.bottom - area.top + "px";
  545. var stroke = document.createElement("v:stroke");
  546. stroke.setAttribute("opacity", "0.8");
  547. path.appendChild(stroke);
  548. var fill = document.createElement("v:fill");
  549. fill.setAttribute("opacity", "0.4");
  550. path.appendChild(fill);
  551. var cmd = [];
  552. var r = 3;
  553. for (var i = 0; i < data.length; i++) {
  554. var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot));
  555. var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot));
  556. if (i == 0) {
  557. cmd.push("m");
  558. cmd.push(x + "," + y);
  559. } else {
  560. cmd.push("l");
  561. cmd.push(x + "," + y);
  562. }
  563. var c = document.createElement("v:oval");
  564. c.setAttribute("strokeweight", "1px");
  565. c.setAttribute("strokecolor", data[i].series.color);
  566. c.setAttribute("fillcolor", data[i].series.color);
  567. var str = document.createElement("v:stroke");
  568. str.setAttribute("opacity", "0.8");
  569. c.appendChild(str);
  570. str = document.createElement("v:fill");
  571. str.setAttribute("opacity", "0.6");
  572. c.appendChild(str);
  573. var s = c.style;
  574. s.position = "absolute";
  575. s.top = (y - r) + "px";
  576. s.left = (x - r) + "px";
  577. s.width = (r * 2) + "px";
  578. s.height = (r * 2) + "px";
  579. group.appendChild(c);
  580. if (applyTo) {
  581. applyTo(c, data[i].src);
  582. }
  583. }
  584. cmd.push("l");
  585. cmd.push(x + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
  586. cmd.push("l");
  587. cmd.push(Math.round(plot.axisX.getCoord(data[0].x, plotarea, plot)) + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
  588. path.setAttribute("path", cmd.join(" ") + " x e");
  589. group.appendChild(path);
  590. return group;
  591. }, CurvedArea:function (data, plotarea, plot, applyTo) {
  592. var tension = 3;
  593. var area = plotarea.getArea();
  594. var group = dojo.charting.Plotters._group(plotarea);
  595. if (data.length == 0) {
  596. return group;
  597. }
  598. var path = document.createElement("v:shape");
  599. path.setAttribute("strokeweight", "1px");
  600. path.setAttribute("strokecolor", data[0].series.color);
  601. path.setAttribute("fillcolor", data[0].series.color);
  602. path.setAttribute("coordsize", (area.right - area.left) + "," + (area.bottom - area.top));
  603. path.style.position = "absolute";
  604. path.style.top = "0px";
  605. path.style.left = "0px";
  606. path.style.width = area.right - area.left + "px";
  607. path.style.height = area.bottom - area.top + "px";
  608. var stroke = document.createElement("v:stroke");
  609. stroke.setAttribute("opacity", "0.8");
  610. path.appendChild(stroke);
  611. var fill = document.createElement("v:fill");
  612. fill.setAttribute("opacity", "0.4");
  613. path.appendChild(fill);
  614. var cmd = [];
  615. var r = 3;
  616. for (var i = 0; i < data.length; i++) {
  617. var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot));
  618. var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot));
  619. if (i == 0) {
  620. cmd.push("m");
  621. cmd.push(x + "," + y);
  622. } else {
  623. var lastx = Math.round(plot.axisX.getCoord(data[i - 1].x, plotarea, plot));
  624. var lasty = Math.round(plot.axisY.getCoord(data[i - 1].y, plotarea, plot));
  625. var dx = x - lastx;
  626. var dy = y - lasty;
  627. cmd.push("c");
  628. var cx = Math.round((x - (tension - 1) * (dx / tension)));
  629. cmd.push(cx + "," + lasty);
  630. cx = Math.round((x - (dx / tension)));
  631. cmd.push(cx + "," + y);
  632. cmd.push(x + "," + y);
  633. }
  634. var c = document.createElement("v:oval");
  635. c.setAttribute("strokeweight", "1px");
  636. c.setAttribute("strokecolor", data[i].series.color);
  637. c.setAttribute("fillcolor", data[i].series.color);
  638. var str = document.createElement("v:stroke");
  639. str.setAttribute("opacity", "0.8");
  640. c.appendChild(str);
  641. str = document.createElement("v:fill");
  642. str.setAttribute("opacity", "0.6");
  643. c.appendChild(str);
  644. var s = c.style;
  645. s.position = "absolute";
  646. s.top = (y - r) + "px";
  647. s.left = (x - r) + "px";
  648. s.width = (r * 2) + "px";
  649. s.height = (r * 2) + "px";
  650. group.appendChild(c);
  651. if (applyTo) {
  652. applyTo(c, data[i].src);
  653. }
  654. }
  655. cmd.push("l");
  656. cmd.push(x + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
  657. cmd.push("l");
  658. cmd.push(Math.round(plot.axisX.getCoord(data[0].x, plotarea, plot)) + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)));
  659. path.setAttribute("path", cmd.join(" ") + " x e");
  660. group.appendChild(path);
  661. return group;
  662. }, HighLow:function (data, plotarea, plot, applyTo) {
  663. var area = plotarea.getArea();
  664. var group = dojo.charting.Plotters._group(plotarea);
  665. var n = data.length;
  666. var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
  667. var w = part * 2;
  668. for (var i = 0; i < n; i++) {
  669. var high = data[i].high;
  670. var low = data[i].low;
  671. if (low > high) {
  672. var t = low;
  673. low = high;
  674. high = t;
  675. }
  676. var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
  677. var y = plot.axisY.getCoord(high, plotarea, plot);
  678. var h = plot.axisY.getCoord(low, plotarea, plot) - y;
  679. var bar = document.createElement("v:rect");
  680. bar.style.position = "absolute";
  681. bar.style.top = y + 1 + "px";
  682. bar.style.left = x + "px";
  683. bar.style.width = w + "px";
  684. bar.style.height = h + "px";
  685. bar.setAttribute("fillColor", data[i].series.color);
  686. bar.setAttribute("stroked", "false");
  687. bar.style.antialias = "false";
  688. var fill = document.createElement("v:fill");
  689. fill.setAttribute("opacity", "0.6");
  690. bar.appendChild(fill);
  691. if (applyTo) {
  692. applyTo(bar, data[i].src);
  693. }
  694. group.appendChild(bar);
  695. }
  696. return group;
  697. }, HighLowClose:function (data, plotarea, plot, applyTo) {
  698. var area = plotarea.getArea();
  699. var group = dojo.charting.Plotters._group(plotarea);
  700. var n = data.length;
  701. var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
  702. var w = part * 2;
  703. for (var i = 0; i < n; i++) {
  704. var high = data[i].high;
  705. var low = data[i].low;
  706. if (low > high) {
  707. var t = low;
  708. low = high;
  709. high = t;
  710. }
  711. var c = data[i].close;
  712. var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
  713. var y = plot.axisY.getCoord(high, plotarea, plot);
  714. var h = plot.axisY.getCoord(low, plotarea, plot) - y;
  715. var close = plot.axisY.getCoord(c, plotarea, plot);
  716. var g = document.createElement("div");
  717. var bar = document.createElement("v:rect");
  718. bar.style.position = "absolute";
  719. bar.style.top = y + 1 + "px";
  720. bar.style.left = x + "px";
  721. bar.style.width = w + "px";
  722. bar.style.height = h + "px";
  723. bar.setAttribute("fillColor", data[i].series.color);
  724. bar.setAttribute("stroked", "false");
  725. bar.style.antialias = "false";
  726. var fill = document.createElement("v:fill");
  727. fill.setAttribute("opacity", "0.6");
  728. bar.appendChild(fill);
  729. g.appendChild(bar);
  730. var line = document.createElement("v:line");
  731. line.setAttribute("strokecolor", data[i].series.color);
  732. line.setAttribute("strokeweight", "1px");
  733. line.setAttribute("from", x + "px," + close + "px");
  734. line.setAttribute("to", (x + w + (part * 2) - 2) + "px," + close + "px");
  735. var s = line.style;
  736. s.position = "absolute";
  737. s.top = "0px";
  738. s.left = "0px";
  739. s.antialias = "false";
  740. var str = document.createElement("v:stroke");
  741. str.setAttribute("opacity", "0.6");
  742. line.appendChild(str);
  743. g.appendChild(line);
  744. if (applyTo) {
  745. applyTo(g, data[i].src);
  746. }
  747. group.appendChild(g);
  748. }
  749. return group;
  750. }, HighLowOpenClose:function (data, plotarea, plot, applyTo) {
  751. var area = plotarea.getArea();
  752. var group = dojo.charting.Plotters._group(plotarea);
  753. var n = data.length;
  754. var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
  755. var w = part * 2;
  756. for (var i = 0; i < n; i++) {
  757. var high = data[i].high;
  758. var low = data[i].low;
  759. if (low > high) {
  760. var t = low;
  761. low = high;
  762. high = t;
  763. }
  764. var o = data[i].open;
  765. var c = data[i].close;
  766. var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
  767. var y = plot.axisY.getCoord(high, plotarea, plot);
  768. var h = plot.axisY.getCoord(low, plotarea, plot) - y;
  769. var open = plot.axisY.getCoord(o, plotarea, plot);
  770. var close = plot.axisY.getCoord(c, plotarea, plot);
  771. var g = document.createElement("div");
  772. var bar = document.createElement("v:rect");
  773. bar.style.position = "absolute";
  774. bar.style.top = y + 1 + "px";
  775. bar.style.left = x + "px";
  776. bar.style.width = w + "px";
  777. bar.style.height = h + "px";
  778. bar.setAttribute("fillColor", data[i].series.color);
  779. bar.setAttribute("stroked", "false");
  780. bar.style.antialias = "false";
  781. var fill = document.createElement("v:fill");
  782. fill.setAttribute("opacity", "0.6");
  783. bar.appendChild(fill);
  784. g.appendChild(bar);
  785. var line = document.createElement("v:line");
  786. line.setAttribute("strokecolor", data[i].series.color);
  787. line.setAttribute("strokeweight", "1px");
  788. line.setAttribute("from", (x - (part * 2)) + "px," + open + "px");
  789. line.setAttribute("to", (x + w - 2) + "px," + open + "px");
  790. var s = line.style;
  791. s.position = "absolute";
  792. s.top = "0px";
  793. s.left = "0px";
  794. s.antialias = "false";
  795. var str = document.createElement("v:stroke");
  796. str.setAttribute("opacity", "0.6");
  797. line.appendChild(str);
  798. g.appendChild(line);
  799. var line = document.createElement("v:line");
  800. line.setAttribute("strokecolor", data[i].series.color);
  801. line.setAttribute("strokeweight", "1px");
  802. line.setAttribute("from", x + "px," + close + "px");
  803. line.setAttribute("to", (x + w + (part * 2) - 2) + "px," + close + "px");
  804. var s = line.style;
  805. s.position = "absolute";
  806. s.top = "0px";
  807. s.left = "0px";
  808. s.antialias = "false";
  809. var str = document.createElement("v:stroke");
  810. str.setAttribute("opacity", "0.6");
  811. line.appendChild(str);
  812. g.appendChild(line);
  813. if (applyTo) {
  814. applyTo(g, data[i].src);
  815. }
  816. group.appendChild(g);
  817. }
  818. return group;
  819. }, Scatter:function (data, plotarea, plot, applyTo) {
  820. var r = 6;
  821. var mod = r / 2;
  822. var area = plotarea.getArea();
  823. var group = dojo.charting.Plotters._group(plotarea);
  824. for (var i = 0; i < data.length; i++) {
  825. var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot));
  826. var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot));
  827. var point = document.createElement("v:rect");
  828. point.setAttribute("strokecolor", data[i].series.color);
  829. point.setAttribute("fillcolor", data[i].series.color);
  830. var fill = document.createElement("v:fill");
  831. fill.setAttribute("opacity", "0.6");
  832. point.appendChild(fill);
  833. var s = point.style;
  834. s.position = "absolute";
  835. s.rotation = "45";
  836. s.top = (y - mod) + "px";
  837. s.left = (x - mod) + "px";
  838. s.width = r + "px";
  839. s.height = r + "px";
  840. group.appendChild(point);
  841. if (applyTo) {
  842. applyTo(point, data[i].src);
  843. }
  844. }
  845. return group;
  846. }, Bubble:function (data, plotarea, plot, applyTo) {
  847. var sizeFactor = 1;
  848. var area = plotarea.getArea();
  849. var group = dojo.charting.Plotters._group(plotarea);
  850. for (var i = 0; i < data.length; i++) {
  851. var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot));
  852. var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot));
  853. if (i == 0) {
  854. var raw = data[i].size;
  855. var dy = plot.axisY.getCoord(data[i].y + raw, plotarea, plot) - y;
  856. sizeFactor = dy / raw;
  857. }
  858. if (sizeFactor < 1) {
  859. sizeFactor = 1;
  860. }
  861. var r = (data[i].size / 2) * sizeFactor;
  862. var point = document.createElement("v:oval");
  863. point.setAttribute("strokecolor", data[i].series.color);
  864. point.setAttribute("fillcolor", data[i].series.color);
  865. var fill = document.createElement("v:fill");
  866. fill.setAttribute("opacity", "0.6");
  867. point.appendChild(fill);
  868. var s = point.style;
  869. s.position = "absolute";
  870. s.rotation = "45";
  871. s.top = (y - r) + "px";
  872. s.left = (x - r) + "px";
  873. s.width = (r * 2) + "px";
  874. s.height = (r * 2) + "px";
  875. group.appendChild(point);
  876. if (applyTo) {
  877. applyTo(point, data[i].src);
  878. }
  879. }
  880. return group;
  881. }});
  882. dojo.charting.Plotters["Default"] = dojo.charting.Plotters.Line;
  883. }