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

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.svg.Plotters");
  9. dojo.require("dojo.lang.common");
  10. if (dojo.render.svg.capable) {
  11. dojo.require("dojo.svg");
  12. dojo.mixin(dojo.charting.Plotters, {Bar:function (plotarea, plot, kwArgs, applyTo) {
  13. var area = plotarea.getArea();
  14. var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
  15. var n = plot.series.length;
  16. var data = [];
  17. for (var i = 0; i < n; i++) {
  18. var tmp = plot.series[i].data.evaluate(kwArgs);
  19. data.push(tmp);
  20. }
  21. var space = 8;
  22. var nPoints = data[0].length;
  23. if (nPoints == 0) {
  24. return group;
  25. }
  26. var width = ((area.right - area.left) - (space * (nPoints - 1))) / nPoints;
  27. var barWidth = width / n;
  28. var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot);
  29. for (var i = 0; i < nPoints; i++) {
  30. var xStart = area.left + (width * i) + (space * i);
  31. for (var j = 0; j < n; j++) {
  32. var value = data[j][i].y;
  33. var yA = yOrigin;
  34. var x = xStart + (barWidth * j);
  35. var y = plot.axisY.getCoord(value, plotarea, plot);
  36. var h = Math.abs(yA - y);
  37. if (value < plot.axisX.origin) {
  38. yA = y;
  39. y = yOrigin;
  40. }
  41. var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
  42. bar.setAttribute("fill", data[j][i].series.color);
  43. bar.setAttribute("stroke-width", "0");
  44. bar.setAttribute("x", x);
  45. bar.setAttribute("y", y);
  46. bar.setAttribute("width", barWidth);
  47. bar.setAttribute("height", h);
  48. bar.setAttribute("fill-opacity", "0.6");
  49. if (applyTo) {
  50. applyTo(bar, data[j][i].src);
  51. }
  52. group.appendChild(bar);
  53. }
  54. }
  55. return group;
  56. }, HorizontalBar:function (plotarea, plot, kwArgs, applyTo) {
  57. var area = plotarea.getArea();
  58. var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
  59. var n = plot.series.length;
  60. var data = [];
  61. for (var i = 0; i < n; i++) {
  62. var tmp = plot.series[i].data.evaluate(kwArgs);
  63. data.push(tmp);
  64. }
  65. var space = 6;
  66. var nPoints = data[0].length;
  67. if (nPoints == 0) {
  68. return group;
  69. }
  70. var h = ((area.bottom - area.top) - (space * (nPoints - 1))) / nPoints;
  71. var barH = h / n;
  72. var xOrigin = plot.axisX.getCoord(0, plotarea, plot);
  73. for (var i = 0; i < nPoints; i++) {
  74. var yStart = area.top + (h * i) + (space * i);
  75. for (var j = 0; j < n; j++) {
  76. var value = data[j][i].y;
  77. var y = yStart + (barH * j);
  78. var xA = xOrigin;
  79. var x = plot.axisX.getCoord(value, plotarea, plot);
  80. var w = Math.abs(x - xA);
  81. if (value > 0) {
  82. x = xOrigin;
  83. }
  84. var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
  85. bar.setAttribute("fill", data[j][i].series.color);
  86. bar.setAttribute("stroke-width", "0");
  87. bar.setAttribute("x", xA);
  88. bar.setAttribute("y", y);
  89. bar.setAttribute("width", w);
  90. bar.setAttribute("height", barH);
  91. bar.setAttribute("fill-opacity", "0.6");
  92. if (applyTo) {
  93. applyTo(bar, data[j][i].src);
  94. }
  95. group.appendChild(bar);
  96. }
  97. }
  98. return group;
  99. }, Gantt:function (plotarea, plot, kwArgs, applyTo) {
  100. var area = plotarea.getArea();
  101. var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
  102. var n = plot.series.length;
  103. var data = [];
  104. for (var i = 0; i < n; i++) {
  105. var tmp = plot.series[i].data.evaluate(kwArgs);
  106. data.push(tmp);
  107. }
  108. var space = 2;
  109. var nPoints = data[0].length;
  110. if (nPoints == 0) {
  111. return group;
  112. }
  113. var h = ((area.bottom - area.top) - (space * (nPoints - 1))) / nPoints;
  114. var barH = h / n;
  115. for (var i = 0; i < nPoints; i++) {
  116. var yStart = area.top + (h * i) + (space * i);
  117. for (var j = 0; j < n; j++) {
  118. var high = data[j][i].high;
  119. var low = data[j][i].low;
  120. if (low > high) {
  121. var t = high;
  122. high = low;
  123. low = t;
  124. }
  125. var x = plot.axisX.getCoord(low, plotarea, plot);
  126. var w = plot.axisX.getCoord(high, plotarea, plot) - x;
  127. var y = yStart + (barH * j);
  128. var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
  129. bar.setAttribute("fill", data[j][i].series.color);
  130. bar.setAttribute("stroke-width", "0");
  131. bar.setAttribute("x", x);
  132. bar.setAttribute("y", y);
  133. bar.setAttribute("width", w);
  134. bar.setAttribute("height", barH);
  135. bar.setAttribute("fill-opacity", "0.6");
  136. if (applyTo) {
  137. applyTo(bar, data[j][i].src);
  138. }
  139. group.appendChild(bar);
  140. }
  141. }
  142. return group;
  143. }, StackedArea:function (plotarea, plot, kwArgs, applyTo) {
  144. var area = plotarea.getArea();
  145. var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
  146. var n = plot.series.length;
  147. var data = [];
  148. var totals = [];
  149. for (var i = 0; i < n; i++) {
  150. var tmp = plot.series[i].data.evaluate(kwArgs);
  151. for (var j = 0; j < tmp.length; j++) {
  152. if (i == 0) {
  153. totals.push(tmp[j].y);
  154. } else {
  155. totals[j] += tmp[j].y;
  156. }
  157. tmp[j].y = totals[j];
  158. }
  159. data.push(tmp);
  160. }
  161. for (var i = n - 1; i >= 0; i--) {
  162. var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
  163. path.setAttribute("fill", data[i][0].series.color);
  164. path.setAttribute("fill-opacity", "0.4");
  165. path.setAttribute("stroke", data[i][0].series.color);
  166. path.setAttribute("stroke-width", "1");
  167. path.setAttribute("stroke-opacity", "0.85");
  168. var cmd = [];
  169. var r = 3;
  170. for (var j = 0; j < data[i].length; j++) {
  171. var values = data[i];
  172. var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
  173. var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
  174. if (j == 0) {
  175. cmd.push("M");
  176. } else {
  177. cmd.push("L");
  178. }
  179. cmd.push(x + "," + y);
  180. var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
  181. c.setAttribute("cx", x);
  182. c.setAttribute("cy", y);
  183. c.setAttribute("r", "3");
  184. c.setAttribute("fill", values[j].series.color);
  185. c.setAttribute("fill-opacity", "0.6");
  186. c.setAttribute("stroke-width", "1");
  187. c.setAttribute("stroke-opacity", "0.85");
  188. group.appendChild(c);
  189. if (applyTo) {
  190. applyTo(c, data[i].src);
  191. }
  192. }
  193. if (i == 0) {
  194. cmd.push("L");
  195. cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
  196. cmd.push("L");
  197. cmd.push(plot.axisX.getCoord(data[0][0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
  198. cmd.push("Z");
  199. } else {
  200. var values = data[i - 1];
  201. cmd.push("L");
  202. cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length - 1].y, plotarea, plot)));
  203. for (var j = values.length - 2; j >= 0; j--) {
  204. var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
  205. var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
  206. cmd.push("L");
  207. cmd.push(x + "," + y);
  208. }
  209. }
  210. path.setAttribute("d", cmd.join(" ") + " Z");
  211. group.appendChild(path);
  212. }
  213. return group;
  214. }, StackedCurvedArea:function (plotarea, plot, kwArgs, applyTo) {
  215. var tension = 3;
  216. var area = plotarea.getArea();
  217. var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
  218. var n = plot.series.length;
  219. var data = [];
  220. var totals = [];
  221. for (var i = 0; i < n; i++) {
  222. var tmp = plot.series[i].data.evaluate(kwArgs);
  223. for (var j = 0; j < tmp.length; j++) {
  224. if (i == 0) {
  225. totals.push(tmp[j].y);
  226. } else {
  227. totals[j] += tmp[j].y;
  228. }
  229. tmp[j].y = totals[j];
  230. }
  231. data.push(tmp);
  232. }
  233. for (var i = n - 1; i >= 0; i--) {
  234. var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
  235. path.setAttribute("fill", data[i][0].series.color);
  236. path.setAttribute("fill-opacity", "0.4");
  237. path.setAttribute("stroke", data[i][0].series.color);
  238. path.setAttribute("stroke-width", "1");
  239. path.setAttribute("stroke-opacity", "0.85");
  240. var cmd = [];
  241. var r = 3;
  242. for (var j = 0; j < data[i].length; j++) {
  243. var values = data[i];
  244. var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
  245. var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
  246. var dx = area.left + 1;
  247. var dy = area.bottom;
  248. if (j > 0) {
  249. dx = x - plot.axisX.getCoord(values[j - 1].x, plotarea, plot);
  250. dy = plot.axisY.getCoord(values[j - 1].y, plotarea, plot);
  251. }
  252. if (j == 0) {
  253. cmd.push("M");
  254. } else {
  255. cmd.push("C");
  256. var cx = x - (tension - 1) * (dx / tension);
  257. cmd.push(cx + "," + dy);
  258. cx = x - (dx / tension);
  259. cmd.push(cx + "," + y);
  260. }
  261. cmd.push(x + "," + y);
  262. var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
  263. c.setAttribute("cx", x);
  264. c.setAttribute("cy", y);
  265. c.setAttribute("r", "3");
  266. c.setAttribute("fill", values[j].series.color);
  267. c.setAttribute("fill-opacity", "0.6");
  268. c.setAttribute("stroke-width", "1");
  269. c.setAttribute("stroke-opacity", "0.85");
  270. group.appendChild(c);
  271. if (applyTo) {
  272. applyTo(c, data[i].src);
  273. }
  274. }
  275. if (i == 0) {
  276. cmd.push("L");
  277. cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
  278. cmd.push("L");
  279. cmd.push(plot.axisX.getCoord(data[0][0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
  280. cmd.push("Z");
  281. } else {
  282. var values = data[i - 1];
  283. cmd.push("L");
  284. cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length - 1].y, plotarea, plot)));
  285. for (var j = values.length - 2; j >= 0; j--) {
  286. var x = plot.axisX.getCoord(values[j].x, plotarea, plot);
  287. var y = plot.axisY.getCoord(values[j].y, plotarea, plot);
  288. var dx = x - plot.axisX.getCoord(values[j + 1].x, plotarea, plot);
  289. var dy = plot.axisY.getCoord(values[j + 1].y, plotarea, plot);
  290. cmd.push("C");
  291. var cx = x - (tension - 1) * (dx / tension);
  292. cmd.push(cx + "," + dy);
  293. cx = x - (dx / tension);
  294. cmd.push(cx + "," + y);
  295. cmd.push(x + "," + y);
  296. }
  297. }
  298. path.setAttribute("d", cmd.join(" ") + " Z");
  299. group.appendChild(path);
  300. }
  301. return group;
  302. }, DataBar:function (data, plotarea, plot, applyTo) {
  303. var area = plotarea.getArea();
  304. var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
  305. var n = data.length;
  306. var w = (area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower);
  307. var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot);
  308. for (var i = 0; i < n; i++) {
  309. var value = data[i].y;
  310. var yA = yOrigin;
  311. var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
  312. var y = plot.axisY.getCoord(value, plotarea, plot);
  313. var h = Math.abs(yA - y);
  314. if (value < plot.axisX.origin) {
  315. yA = y;
  316. y = yOrigin;
  317. }
  318. var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
  319. bar.setAttribute("fill", data[i].series.color);
  320. bar.setAttribute("stroke-width", "0");
  321. bar.setAttribute("x", x);
  322. bar.setAttribute("y", y);
  323. bar.setAttribute("width", w);
  324. bar.setAttribute("height", h);
  325. bar.setAttribute("fill-opacity", "0.6");
  326. if (applyTo) {
  327. applyTo(bar, data[i].src);
  328. }
  329. group.appendChild(bar);
  330. }
  331. return group;
  332. }, Line:function (data, plotarea, plot, applyTo) {
  333. var area = plotarea.getArea();
  334. var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
  335. if (data.length == 0) {
  336. return line;
  337. }
  338. var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
  339. line.appendChild(path);
  340. path.setAttribute("fill", "none");
  341. path.setAttribute("stroke", data[0].series.color);
  342. path.setAttribute("stroke-width", "2");
  343. path.setAttribute("stroke-opacity", "0.85");
  344. if (data[0].series.label != null) {
  345. path.setAttribute("title", data[0].series.label);
  346. }
  347. var cmd = [];
  348. for (var i = 0; i < data.length; i++) {
  349. var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
  350. var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
  351. if (i == 0) {
  352. cmd.push("M");
  353. } else {
  354. cmd.push("L");
  355. }
  356. cmd.push(x + "," + y);
  357. var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
  358. c.setAttribute("cx", x);
  359. c.setAttribute("cy", y);
  360. c.setAttribute("r", "3");
  361. c.setAttribute("fill", data[i].series.color);
  362. c.setAttribute("fill-opacity", "0.6");
  363. c.setAttribute("stroke-width", "1");
  364. c.setAttribute("stroke-opacity", "0.85");
  365. line.appendChild(c);
  366. if (applyTo) {
  367. applyTo(c, data[i].src);
  368. }
  369. }
  370. path.setAttribute("d", cmd.join(" "));
  371. return line;
  372. }, CurvedLine:function (data, plotarea, plot, applyTo) {
  373. var tension = 3;
  374. var area = plotarea.getArea();
  375. var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
  376. if (data.length == 0) {
  377. return line;
  378. }
  379. var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
  380. line.appendChild(path);
  381. path.setAttribute("fill", "none");
  382. path.setAttribute("stroke", data[0].series.color);
  383. path.setAttribute("stroke-width", "2");
  384. path.setAttribute("stroke-opacity", "0.85");
  385. if (data[0].series.label != null) {
  386. path.setAttribute("title", data[0].series.label);
  387. }
  388. var cmd = [];
  389. for (var i = 0; i < data.length; i++) {
  390. var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
  391. var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
  392. var dx = area.left + 1;
  393. var dy = area.bottom;
  394. if (i > 0) {
  395. dx = x - plot.axisX.getCoord(data[i - 1].x, plotarea, plot);
  396. dy = plot.axisY.getCoord(data[i - 1].y, plotarea, plot);
  397. }
  398. if (i == 0) {
  399. cmd.push("M");
  400. } else {
  401. cmd.push("C");
  402. var cx = x - (tension - 1) * (dx / tension);
  403. cmd.push(cx + "," + dy);
  404. cx = x - (dx / tension);
  405. cmd.push(cx + "," + y);
  406. }
  407. cmd.push(x + "," + y);
  408. var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
  409. c.setAttribute("cx", x);
  410. c.setAttribute("cy", y);
  411. c.setAttribute("r", "3");
  412. c.setAttribute("fill", data[i].series.color);
  413. c.setAttribute("fill-opacity", "0.6");
  414. c.setAttribute("stroke-width", "1");
  415. c.setAttribute("stroke-opacity", "0.85");
  416. line.appendChild(c);
  417. if (applyTo) {
  418. applyTo(c, data[i].src);
  419. }
  420. }
  421. path.setAttribute("d", cmd.join(" "));
  422. return line;
  423. }, Area:function (data, plotarea, plot, applyTo) {
  424. var area = plotarea.getArea();
  425. var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
  426. if (data.length == 0) {
  427. return line;
  428. }
  429. var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
  430. line.appendChild(path);
  431. path.setAttribute("fill", data[0].series.color);
  432. path.setAttribute("fill-opacity", "0.4");
  433. path.setAttribute("stroke", data[0].series.color);
  434. path.setAttribute("stroke-width", "1");
  435. path.setAttribute("stroke-opacity", "0.85");
  436. if (data[0].series.label != null) {
  437. path.setAttribute("title", data[0].series.label);
  438. }
  439. var cmd = [];
  440. for (var i = 0; i < data.length; i++) {
  441. var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
  442. var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
  443. if (i == 0) {
  444. cmd.push("M");
  445. } else {
  446. cmd.push("L");
  447. }
  448. cmd.push(x + "," + y);
  449. var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
  450. c.setAttribute("cx", x);
  451. c.setAttribute("cy", y);
  452. c.setAttribute("r", "3");
  453. c.setAttribute("fill", data[i].series.color);
  454. c.setAttribute("fill-opacity", "0.6");
  455. c.setAttribute("stroke-width", "1");
  456. c.setAttribute("stroke-opacity", "0.85");
  457. line.appendChild(c);
  458. if (applyTo) {
  459. applyTo(c, data[i].src);
  460. }
  461. }
  462. cmd.push("L");
  463. cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
  464. cmd.push("L");
  465. cmd.push(plot.axisX.getCoord(data[0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
  466. cmd.push("Z");
  467. path.setAttribute("d", cmd.join(" "));
  468. return line;
  469. }, CurvedArea:function (data, plotarea, plot, applyTo) {
  470. var tension = 3;
  471. var area = plotarea.getArea();
  472. var line = document.createElementNS(dojo.svg.xmlns.svg, "g");
  473. if (data.length == 0) {
  474. return line;
  475. }
  476. var path = document.createElementNS(dojo.svg.xmlns.svg, "path");
  477. line.appendChild(path);
  478. path.setAttribute("fill", data[0].series.color);
  479. path.setAttribute("fill-opacity", "0.4");
  480. path.setAttribute("stroke", data[0].series.color);
  481. path.setAttribute("stroke-width", "1");
  482. path.setAttribute("stroke-opacity", "0.85");
  483. if (data[0].series.label != null) {
  484. path.setAttribute("title", data[0].series.label);
  485. }
  486. var cmd = [];
  487. for (var i = 0; i < data.length; i++) {
  488. var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
  489. var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
  490. var dx = area.left + 1;
  491. var dy = area.bottom;
  492. if (i > 0) {
  493. dx = x - plot.axisX.getCoord(data[i - 1].x, plotarea, plot);
  494. dy = plot.axisY.getCoord(data[i - 1].y, plotarea, plot);
  495. }
  496. if (i == 0) {
  497. cmd.push("M");
  498. } else {
  499. cmd.push("C");
  500. var cx = x - (tension - 1) * (dx / tension);
  501. cmd.push(cx + "," + dy);
  502. cx = x - (dx / tension);
  503. cmd.push(cx + "," + y);
  504. }
  505. cmd.push(x + "," + y);
  506. var c = document.createElementNS(dojo.svg.xmlns.svg, "circle");
  507. c.setAttribute("cx", x);
  508. c.setAttribute("cy", y);
  509. c.setAttribute("r", "3");
  510. c.setAttribute("fill", data[i].series.color);
  511. c.setAttribute("fill-opacity", "0.6");
  512. c.setAttribute("stroke-width", "1");
  513. c.setAttribute("stroke-opacity", "0.85");
  514. line.appendChild(c);
  515. if (applyTo) {
  516. applyTo(c, data[i].src);
  517. }
  518. }
  519. cmd.push("L");
  520. cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
  521. cmd.push("L");
  522. cmd.push(plot.axisX.getCoord(data[0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot));
  523. cmd.push("Z");
  524. path.setAttribute("d", cmd.join(" "));
  525. return line;
  526. }, HighLow:function (data, plotarea, plot, applyTo) {
  527. var area = plotarea.getArea();
  528. var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
  529. var n = data.length;
  530. var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
  531. var w = part * 2;
  532. for (var i = 0; i < n; i++) {
  533. var high = data[i].high;
  534. var low = data[i].low;
  535. if (low > high) {
  536. var t = low;
  537. low = high;
  538. high = t;
  539. }
  540. var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
  541. var y = plot.axisY.getCoord(high, plotarea, plot);
  542. var h = plot.axisY.getCoord(low, plotarea, plot) - y;
  543. var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
  544. bar.setAttribute("fill", data[i].series.color);
  545. bar.setAttribute("stroke-width", "0");
  546. bar.setAttribute("x", x);
  547. bar.setAttribute("y", y);
  548. bar.setAttribute("width", w);
  549. bar.setAttribute("height", h);
  550. bar.setAttribute("fill-opacity", "0.6");
  551. if (applyTo) {
  552. applyTo(bar, data[i].src);
  553. }
  554. group.appendChild(bar);
  555. }
  556. return group;
  557. }, HighLowClose:function (data, plotarea, plot, applyTo) {
  558. var area = plotarea.getArea();
  559. var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
  560. var n = data.length;
  561. var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
  562. var w = part * 2;
  563. for (var i = 0; i < n; i++) {
  564. var high = data[i].high;
  565. var low = data[i].low;
  566. if (low > high) {
  567. var t = low;
  568. low = high;
  569. high = t;
  570. }
  571. var c = data[i].close;
  572. var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
  573. var y = plot.axisY.getCoord(high, plotarea, plot);
  574. var h = plot.axisY.getCoord(low, plotarea, plot) - y;
  575. var close = plot.axisY.getCoord(c, plotarea, plot);
  576. var g = document.createElementNS(dojo.svg.xmlns.svg, "g");
  577. var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
  578. bar.setAttribute("fill", data[i].series.color);
  579. bar.setAttribute("stroke-width", "0");
  580. bar.setAttribute("x", x);
  581. bar.setAttribute("y", y);
  582. bar.setAttribute("width", w);
  583. bar.setAttribute("height", h);
  584. bar.setAttribute("fill-opacity", "0.6");
  585. g.appendChild(bar);
  586. var line = document.createElementNS(dojo.svg.xmlns.svg, "line");
  587. line.setAttribute("x1", x);
  588. line.setAttribute("x2", x + w + (part * 2));
  589. line.setAttribute("y1", close);
  590. line.setAttribute("y2", close);
  591. line.setAttribute("style", "stroke:" + data[i].series.color + ";stroke-width:1px;stroke-opacity:0.6;");
  592. g.appendChild(line);
  593. if (applyTo) {
  594. applyTo(g, data[i].src);
  595. }
  596. group.appendChild(g);
  597. }
  598. return group;
  599. }, HighLowOpenClose:function (data, plotarea, plot, applyTo) {
  600. var area = plotarea.getArea();
  601. var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
  602. var n = data.length;
  603. var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4;
  604. var w = part * 2;
  605. for (var i = 0; i < n; i++) {
  606. var high = data[i].high;
  607. var low = data[i].low;
  608. if (low > high) {
  609. var t = low;
  610. low = high;
  611. high = t;
  612. }
  613. var o = data[i].open;
  614. var c = data[i].close;
  615. var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2);
  616. var y = plot.axisY.getCoord(high, plotarea, plot);
  617. var h = plot.axisY.getCoord(low, plotarea, plot) - y;
  618. var open = plot.axisY.getCoord(o, plotarea, plot);
  619. var close = plot.axisY.getCoord(c, plotarea, plot);
  620. var g = document.createElementNS(dojo.svg.xmlns.svg, "g");
  621. var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect");
  622. bar.setAttribute("fill", data[i].series.color);
  623. bar.setAttribute("stroke-width", "0");
  624. bar.setAttribute("x", x);
  625. bar.setAttribute("y", y);
  626. bar.setAttribute("width", w);
  627. bar.setAttribute("height", h);
  628. bar.setAttribute("fill-opacity", "0.6");
  629. g.appendChild(bar);
  630. var line = document.createElementNS(dojo.svg.xmlns.svg, "line");
  631. line.setAttribute("x1", x - (part * 2));
  632. line.setAttribute("x2", x + w);
  633. line.setAttribute("y1", open);
  634. line.setAttribute("y2", open);
  635. line.setAttribute("style", "stroke:" + data[i].series.color + ";stroke-width:1px;stroke-opacity:0.6;");
  636. g.appendChild(line);
  637. var line = document.createElementNS(dojo.svg.xmlns.svg, "line");
  638. line.setAttribute("x1", x);
  639. line.setAttribute("x2", x + w + (part * 2));
  640. line.setAttribute("y1", close);
  641. line.setAttribute("y2", close);
  642. line.setAttribute("style", "stroke:" + data[i].series.color + ";stroke-width:1px;stroke-opacity:0.6;");
  643. g.appendChild(line);
  644. if (applyTo) {
  645. applyTo(g, data[i].src);
  646. }
  647. group.appendChild(g);
  648. }
  649. return group;
  650. }, Scatter:function (data, plotarea, plot, applyTo) {
  651. var r = 7;
  652. var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
  653. for (var i = 0; i < data.length; i++) {
  654. var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
  655. var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
  656. var point = document.createElementNS(dojo.svg.xmlns.svg, "path");
  657. point.setAttribute("fill", data[i].series.color);
  658. point.setAttribute("stroke-width", "0");
  659. point.setAttribute("d", "M " + x + "," + (y - r) + " " + "Q " + x + "," + y + " " + (x + r) + "," + y + " " + "Q " + x + "," + y + " " + x + "," + (y + r) + " " + "Q " + x + "," + y + " " + (x - r) + "," + y + " " + "Q " + x + "," + y + " " + x + "," + (y - r) + " " + "Z");
  660. if (applyTo) {
  661. applyTo(point, data[i].src);
  662. }
  663. group.appendChild(point);
  664. }
  665. return group;
  666. }, Bubble:function (data, plotarea, plot, applyTo) {
  667. var group = document.createElementNS(dojo.svg.xmlns.svg, "g");
  668. var sizeFactor = 1;
  669. for (var i = 0; i < data.length; i++) {
  670. var x = plot.axisX.getCoord(data[i].x, plotarea, plot);
  671. var y = plot.axisY.getCoord(data[i].y, plotarea, plot);
  672. if (i == 0) {
  673. var raw = data[i].size;
  674. var dy = plot.axisY.getCoord(data[i].y + raw, plotarea, plot) - y;
  675. sizeFactor = dy / raw;
  676. }
  677. if (sizeFactor < 1) {
  678. sizeFactor = 1;
  679. }
  680. var point = document.createElementNS(dojo.svg.xmlns.svg, "circle");
  681. point.setAttribute("fill", data[i].series.color);
  682. point.setAttribute("fill-opacity", "0.8");
  683. point.setAttribute("stroke", data[i].series.color);
  684. point.setAttribute("stroke-width", "1");
  685. point.setAttribute("cx", x);
  686. point.setAttribute("cy", y);
  687. point.setAttribute("r", (data[i].size / 2) * sizeFactor);
  688. if (applyTo) {
  689. applyTo(point, data[i].src);
  690. }
  691. group.appendChild(point);
  692. }
  693. return group;
  694. }});
  695. dojo.charting.Plotters["Default"] = dojo.charting.Plotters.Line;
  696. }