| /* |
| Copyright (c) 2004-2006, The Dojo Foundation |
| All Rights Reserved. |
| |
| Licensed under the Academic Free License version 2.1 or above OR the |
| modified BSD license. For more information on Dojo licensing, see: |
| |
| http://dojotoolkit.org/community/licensing.shtml |
| */ |
| |
| |
| |
| dojo.provide("dojo.charting.svg.Plotters"); |
| dojo.require("dojo.lang.common"); |
| if (dojo.render.svg.capable) { |
| dojo.require("dojo.svg"); |
| dojo.mixin(dojo.charting.Plotters, {Bar:function (plotarea, plot, kwArgs, applyTo) { |
| var area = plotarea.getArea(); |
| var group = document.createElementNS(dojo.svg.xmlns.svg, "g"); |
| var n = plot.series.length; |
| var data = []; |
| for (var i = 0; i < n; i++) { |
| var tmp = plot.series[i].data.evaluate(kwArgs); |
| data.push(tmp); |
| } |
| var space = 8; |
| var nPoints = data[0].length; |
| if (nPoints == 0) { |
| return group; |
| } |
| var width = ((area.right - area.left) - (space * (nPoints - 1))) / nPoints; |
| var barWidth = width / n; |
| var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot); |
| for (var i = 0; i < nPoints; i++) { |
| var xStart = area.left + (width * i) + (space * i); |
| for (var j = 0; j < n; j++) { |
| var value = data[j][i].y; |
| var yA = yOrigin; |
| var x = xStart + (barWidth * j); |
| var y = plot.axisY.getCoord(value, plotarea, plot); |
| var h = Math.abs(yA - y); |
| if (value < plot.axisX.origin) { |
| yA = y; |
| y = yOrigin; |
| } |
| var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect"); |
| bar.setAttribute("fill", data[j][i].series.color); |
| bar.setAttribute("stroke-width", "0"); |
| bar.setAttribute("x", x); |
| bar.setAttribute("y", y); |
| bar.setAttribute("width", barWidth); |
| bar.setAttribute("height", h); |
| bar.setAttribute("fill-opacity", "0.6"); |
| if (applyTo) { |
| applyTo(bar, data[j][i].src); |
| } |
| group.appendChild(bar); |
| } |
| } |
| return group; |
| }, HorizontalBar:function (plotarea, plot, kwArgs, applyTo) { |
| var area = plotarea.getArea(); |
| var group = document.createElementNS(dojo.svg.xmlns.svg, "g"); |
| var n = plot.series.length; |
| var data = []; |
| for (var i = 0; i < n; i++) { |
| var tmp = plot.series[i].data.evaluate(kwArgs); |
| data.push(tmp); |
| } |
| var space = 6; |
| var nPoints = data[0].length; |
| if (nPoints == 0) { |
| return group; |
| } |
| var h = ((area.bottom - area.top) - (space * (nPoints - 1))) / nPoints; |
| var barH = h / n; |
| var xOrigin = plot.axisX.getCoord(0, plotarea, plot); |
| for (var i = 0; i < nPoints; i++) { |
| var yStart = area.top + (h * i) + (space * i); |
| for (var j = 0; j < n; j++) { |
| var value = data[j][i].y; |
| var y = yStart + (barH * j); |
| var xA = xOrigin; |
| var x = plot.axisX.getCoord(value, plotarea, plot); |
| var w = Math.abs(x - xA); |
| if (value > 0) { |
| x = xOrigin; |
| } |
| var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect"); |
| bar.setAttribute("fill", data[j][i].series.color); |
| bar.setAttribute("stroke-width", "0"); |
| bar.setAttribute("x", xA); |
| bar.setAttribute("y", y); |
| bar.setAttribute("width", w); |
| bar.setAttribute("height", barH); |
| bar.setAttribute("fill-opacity", "0.6"); |
| if (applyTo) { |
| applyTo(bar, data[j][i].src); |
| } |
| group.appendChild(bar); |
| } |
| } |
| return group; |
| }, Gantt:function (plotarea, plot, kwArgs, applyTo) { |
| var area = plotarea.getArea(); |
| var group = document.createElementNS(dojo.svg.xmlns.svg, "g"); |
| var n = plot.series.length; |
| var data = []; |
| for (var i = 0; i < n; i++) { |
| var tmp = plot.series[i].data.evaluate(kwArgs); |
| data.push(tmp); |
| } |
| var space = 2; |
| var nPoints = data[0].length; |
| if (nPoints == 0) { |
| return group; |
| } |
| var h = ((area.bottom - area.top) - (space * (nPoints - 1))) / nPoints; |
| var barH = h / n; |
| for (var i = 0; i < nPoints; i++) { |
| var yStart = area.top + (h * i) + (space * i); |
| for (var j = 0; j < n; j++) { |
| var high = data[j][i].high; |
| var low = data[j][i].low; |
| if (low > high) { |
| var t = high; |
| high = low; |
| low = t; |
| } |
| var x = plot.axisX.getCoord(low, plotarea, plot); |
| var w = plot.axisX.getCoord(high, plotarea, plot) - x; |
| var y = yStart + (barH * j); |
| var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect"); |
| bar.setAttribute("fill", data[j][i].series.color); |
| bar.setAttribute("stroke-width", "0"); |
| bar.setAttribute("x", x); |
| bar.setAttribute("y", y); |
| bar.setAttribute("width", w); |
| bar.setAttribute("height", barH); |
| bar.setAttribute("fill-opacity", "0.6"); |
| if (applyTo) { |
| applyTo(bar, data[j][i].src); |
| } |
| group.appendChild(bar); |
| } |
| } |
| return group; |
| }, StackedArea:function (plotarea, plot, kwArgs, applyTo) { |
| var area = plotarea.getArea(); |
| var group = document.createElementNS(dojo.svg.xmlns.svg, "g"); |
| var n = plot.series.length; |
| var data = []; |
| var totals = []; |
| for (var i = 0; i < n; i++) { |
| var tmp = plot.series[i].data.evaluate(kwArgs); |
| for (var j = 0; j < tmp.length; j++) { |
| if (i == 0) { |
| totals.push(tmp[j].y); |
| } else { |
| totals[j] += tmp[j].y; |
| } |
| tmp[j].y = totals[j]; |
| } |
| data.push(tmp); |
| } |
| for (var i = n - 1; i >= 0; i--) { |
| var path = document.createElementNS(dojo.svg.xmlns.svg, "path"); |
| path.setAttribute("fill", data[i][0].series.color); |
| path.setAttribute("fill-opacity", "0.4"); |
| path.setAttribute("stroke", data[i][0].series.color); |
| path.setAttribute("stroke-width", "1"); |
| path.setAttribute("stroke-opacity", "0.85"); |
| var cmd = []; |
| var r = 3; |
| for (var j = 0; j < data[i].length; j++) { |
| var values = data[i]; |
| var x = plot.axisX.getCoord(values[j].x, plotarea, plot); |
| var y = plot.axisY.getCoord(values[j].y, plotarea, plot); |
| if (j == 0) { |
| cmd.push("M"); |
| } else { |
| cmd.push("L"); |
| } |
| cmd.push(x + "," + y); |
| var c = document.createElementNS(dojo.svg.xmlns.svg, "circle"); |
| c.setAttribute("cx", x); |
| c.setAttribute("cy", y); |
| c.setAttribute("r", "3"); |
| c.setAttribute("fill", values[j].series.color); |
| c.setAttribute("fill-opacity", "0.6"); |
| c.setAttribute("stroke-width", "1"); |
| c.setAttribute("stroke-opacity", "0.85"); |
| group.appendChild(c); |
| if (applyTo) { |
| applyTo(c, data[i].src); |
| } |
| } |
| if (i == 0) { |
| cmd.push("L"); |
| cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)); |
| cmd.push("L"); |
| cmd.push(plot.axisX.getCoord(data[0][0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)); |
| cmd.push("Z"); |
| } else { |
| var values = data[i - 1]; |
| cmd.push("L"); |
| cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length - 1].y, plotarea, plot))); |
| for (var j = values.length - 2; j >= 0; j--) { |
| var x = plot.axisX.getCoord(values[j].x, plotarea, plot); |
| var y = plot.axisY.getCoord(values[j].y, plotarea, plot); |
| cmd.push("L"); |
| cmd.push(x + "," + y); |
| } |
| } |
| path.setAttribute("d", cmd.join(" ") + " Z"); |
| group.appendChild(path); |
| } |
| return group; |
| }, StackedCurvedArea:function (plotarea, plot, kwArgs, applyTo) { |
| var tension = 3; |
| var area = plotarea.getArea(); |
| var group = document.createElementNS(dojo.svg.xmlns.svg, "g"); |
| var n = plot.series.length; |
| var data = []; |
| var totals = []; |
| for (var i = 0; i < n; i++) { |
| var tmp = plot.series[i].data.evaluate(kwArgs); |
| for (var j = 0; j < tmp.length; j++) { |
| if (i == 0) { |
| totals.push(tmp[j].y); |
| } else { |
| totals[j] += tmp[j].y; |
| } |
| tmp[j].y = totals[j]; |
| } |
| data.push(tmp); |
| } |
| for (var i = n - 1; i >= 0; i--) { |
| var path = document.createElementNS(dojo.svg.xmlns.svg, "path"); |
| path.setAttribute("fill", data[i][0].series.color); |
| path.setAttribute("fill-opacity", "0.4"); |
| path.setAttribute("stroke", data[i][0].series.color); |
| path.setAttribute("stroke-width", "1"); |
| path.setAttribute("stroke-opacity", "0.85"); |
| var cmd = []; |
| var r = 3; |
| for (var j = 0; j < data[i].length; j++) { |
| var values = data[i]; |
| var x = plot.axisX.getCoord(values[j].x, plotarea, plot); |
| var y = plot.axisY.getCoord(values[j].y, plotarea, plot); |
| var dx = area.left + 1; |
| var dy = area.bottom; |
| if (j > 0) { |
| dx = x - plot.axisX.getCoord(values[j - 1].x, plotarea, plot); |
| dy = plot.axisY.getCoord(values[j - 1].y, plotarea, plot); |
| } |
| if (j == 0) { |
| cmd.push("M"); |
| } else { |
| cmd.push("C"); |
| var cx = x - (tension - 1) * (dx / tension); |
| cmd.push(cx + "," + dy); |
| cx = x - (dx / tension); |
| cmd.push(cx + "," + y); |
| } |
| cmd.push(x + "," + y); |
| var c = document.createElementNS(dojo.svg.xmlns.svg, "circle"); |
| c.setAttribute("cx", x); |
| c.setAttribute("cy", y); |
| c.setAttribute("r", "3"); |
| c.setAttribute("fill", values[j].series.color); |
| c.setAttribute("fill-opacity", "0.6"); |
| c.setAttribute("stroke-width", "1"); |
| c.setAttribute("stroke-opacity", "0.85"); |
| group.appendChild(c); |
| if (applyTo) { |
| applyTo(c, data[i].src); |
| } |
| } |
| if (i == 0) { |
| cmd.push("L"); |
| cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)); |
| cmd.push("L"); |
| cmd.push(plot.axisX.getCoord(data[0][0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)); |
| cmd.push("Z"); |
| } else { |
| var values = data[i - 1]; |
| cmd.push("L"); |
| cmd.push(x + "," + Math.round(plot.axisY.getCoord(values[values.length - 1].y, plotarea, plot))); |
| for (var j = values.length - 2; j >= 0; j--) { |
| var x = plot.axisX.getCoord(values[j].x, plotarea, plot); |
| var y = plot.axisY.getCoord(values[j].y, plotarea, plot); |
| var dx = x - plot.axisX.getCoord(values[j + 1].x, plotarea, plot); |
| var dy = plot.axisY.getCoord(values[j + 1].y, plotarea, plot); |
| cmd.push("C"); |
| var cx = x - (tension - 1) * (dx / tension); |
| cmd.push(cx + "," + dy); |
| cx = x - (dx / tension); |
| cmd.push(cx + "," + y); |
| cmd.push(x + "," + y); |
| } |
| } |
| path.setAttribute("d", cmd.join(" ") + " Z"); |
| group.appendChild(path); |
| } |
| return group; |
| }, DataBar:function (data, plotarea, plot, applyTo) { |
| var area = plotarea.getArea(); |
| var group = document.createElementNS(dojo.svg.xmlns.svg, "g"); |
| var n = data.length; |
| var w = (area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower); |
| var yOrigin = plot.axisY.getCoord(plot.axisX.origin, plotarea, plot); |
| for (var i = 0; i < n; i++) { |
| var value = data[i].y; |
| var yA = yOrigin; |
| var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2); |
| var y = plot.axisY.getCoord(value, plotarea, plot); |
| var h = Math.abs(yA - y); |
| if (value < plot.axisX.origin) { |
| yA = y; |
| y = yOrigin; |
| } |
| var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect"); |
| bar.setAttribute("fill", data[i].series.color); |
| bar.setAttribute("stroke-width", "0"); |
| bar.setAttribute("x", x); |
| bar.setAttribute("y", y); |
| bar.setAttribute("width", w); |
| bar.setAttribute("height", h); |
| bar.setAttribute("fill-opacity", "0.6"); |
| if (applyTo) { |
| applyTo(bar, data[i].src); |
| } |
| group.appendChild(bar); |
| } |
| return group; |
| }, Line:function (data, plotarea, plot, applyTo) { |
| var area = plotarea.getArea(); |
| var line = document.createElementNS(dojo.svg.xmlns.svg, "g"); |
| if (data.length == 0) { |
| return line; |
| } |
| var path = document.createElementNS(dojo.svg.xmlns.svg, "path"); |
| line.appendChild(path); |
| path.setAttribute("fill", "none"); |
| path.setAttribute("stroke", data[0].series.color); |
| path.setAttribute("stroke-width", "2"); |
| path.setAttribute("stroke-opacity", "0.85"); |
| if (data[0].series.label != null) { |
| path.setAttribute("title", data[0].series.label); |
| } |
| var cmd = []; |
| for (var i = 0; i < data.length; i++) { |
| var x = plot.axisX.getCoord(data[i].x, plotarea, plot); |
| var y = plot.axisY.getCoord(data[i].y, plotarea, plot); |
| if (i == 0) { |
| cmd.push("M"); |
| } else { |
| cmd.push("L"); |
| } |
| cmd.push(x + "," + y); |
| var c = document.createElementNS(dojo.svg.xmlns.svg, "circle"); |
| c.setAttribute("cx", x); |
| c.setAttribute("cy", y); |
| c.setAttribute("r", "3"); |
| c.setAttribute("fill", data[i].series.color); |
| c.setAttribute("fill-opacity", "0.6"); |
| c.setAttribute("stroke-width", "1"); |
| c.setAttribute("stroke-opacity", "0.85"); |
| line.appendChild(c); |
| if (applyTo) { |
| applyTo(c, data[i].src); |
| } |
| } |
| path.setAttribute("d", cmd.join(" ")); |
| return line; |
| }, CurvedLine:function (data, plotarea, plot, applyTo) { |
| var tension = 3; |
| var area = plotarea.getArea(); |
| var line = document.createElementNS(dojo.svg.xmlns.svg, "g"); |
| if (data.length == 0) { |
| return line; |
| } |
| var path = document.createElementNS(dojo.svg.xmlns.svg, "path"); |
| line.appendChild(path); |
| path.setAttribute("fill", "none"); |
| path.setAttribute("stroke", data[0].series.color); |
| path.setAttribute("stroke-width", "2"); |
| path.setAttribute("stroke-opacity", "0.85"); |
| if (data[0].series.label != null) { |
| path.setAttribute("title", data[0].series.label); |
| } |
| var cmd = []; |
| for (var i = 0; i < data.length; i++) { |
| var x = plot.axisX.getCoord(data[i].x, plotarea, plot); |
| var y = plot.axisY.getCoord(data[i].y, plotarea, plot); |
| var dx = area.left + 1; |
| var dy = area.bottom; |
| if (i > 0) { |
| dx = x - plot.axisX.getCoord(data[i - 1].x, plotarea, plot); |
| dy = plot.axisY.getCoord(data[i - 1].y, plotarea, plot); |
| } |
| if (i == 0) { |
| cmd.push("M"); |
| } else { |
| cmd.push("C"); |
| var cx = x - (tension - 1) * (dx / tension); |
| cmd.push(cx + "," + dy); |
| cx = x - (dx / tension); |
| cmd.push(cx + "," + y); |
| } |
| cmd.push(x + "," + y); |
| var c = document.createElementNS(dojo.svg.xmlns.svg, "circle"); |
| c.setAttribute("cx", x); |
| c.setAttribute("cy", y); |
| c.setAttribute("r", "3"); |
| c.setAttribute("fill", data[i].series.color); |
| c.setAttribute("fill-opacity", "0.6"); |
| c.setAttribute("stroke-width", "1"); |
| c.setAttribute("stroke-opacity", "0.85"); |
| line.appendChild(c); |
| if (applyTo) { |
| applyTo(c, data[i].src); |
| } |
| } |
| path.setAttribute("d", cmd.join(" ")); |
| return line; |
| }, Area:function (data, plotarea, plot, applyTo) { |
| var area = plotarea.getArea(); |
| var line = document.createElementNS(dojo.svg.xmlns.svg, "g"); |
| if (data.length == 0) { |
| return line; |
| } |
| var path = document.createElementNS(dojo.svg.xmlns.svg, "path"); |
| line.appendChild(path); |
| path.setAttribute("fill", data[0].series.color); |
| path.setAttribute("fill-opacity", "0.4"); |
| path.setAttribute("stroke", data[0].series.color); |
| path.setAttribute("stroke-width", "1"); |
| path.setAttribute("stroke-opacity", "0.85"); |
| if (data[0].series.label != null) { |
| path.setAttribute("title", data[0].series.label); |
| } |
| var cmd = []; |
| for (var i = 0; i < data.length; i++) { |
| var x = plot.axisX.getCoord(data[i].x, plotarea, plot); |
| var y = plot.axisY.getCoord(data[i].y, plotarea, plot); |
| if (i == 0) { |
| cmd.push("M"); |
| } else { |
| cmd.push("L"); |
| } |
| cmd.push(x + "," + y); |
| var c = document.createElementNS(dojo.svg.xmlns.svg, "circle"); |
| c.setAttribute("cx", x); |
| c.setAttribute("cy", y); |
| c.setAttribute("r", "3"); |
| c.setAttribute("fill", data[i].series.color); |
| c.setAttribute("fill-opacity", "0.6"); |
| c.setAttribute("stroke-width", "1"); |
| c.setAttribute("stroke-opacity", "0.85"); |
| line.appendChild(c); |
| if (applyTo) { |
| applyTo(c, data[i].src); |
| } |
| } |
| cmd.push("L"); |
| cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)); |
| cmd.push("L"); |
| cmd.push(plot.axisX.getCoord(data[0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)); |
| cmd.push("Z"); |
| path.setAttribute("d", cmd.join(" ")); |
| return line; |
| }, CurvedArea:function (data, plotarea, plot, applyTo) { |
| var tension = 3; |
| var area = plotarea.getArea(); |
| var line = document.createElementNS(dojo.svg.xmlns.svg, "g"); |
| if (data.length == 0) { |
| return line; |
| } |
| var path = document.createElementNS(dojo.svg.xmlns.svg, "path"); |
| line.appendChild(path); |
| path.setAttribute("fill", data[0].series.color); |
| path.setAttribute("fill-opacity", "0.4"); |
| path.setAttribute("stroke", data[0].series.color); |
| path.setAttribute("stroke-width", "1"); |
| path.setAttribute("stroke-opacity", "0.85"); |
| if (data[0].series.label != null) { |
| path.setAttribute("title", data[0].series.label); |
| } |
| var cmd = []; |
| for (var i = 0; i < data.length; i++) { |
| var x = plot.axisX.getCoord(data[i].x, plotarea, plot); |
| var y = plot.axisY.getCoord(data[i].y, plotarea, plot); |
| var dx = area.left + 1; |
| var dy = area.bottom; |
| if (i > 0) { |
| dx = x - plot.axisX.getCoord(data[i - 1].x, plotarea, plot); |
| dy = plot.axisY.getCoord(data[i - 1].y, plotarea, plot); |
| } |
| if (i == 0) { |
| cmd.push("M"); |
| } else { |
| cmd.push("C"); |
| var cx = x - (tension - 1) * (dx / tension); |
| cmd.push(cx + "," + dy); |
| cx = x - (dx / tension); |
| cmd.push(cx + "," + y); |
| } |
| cmd.push(x + "," + y); |
| var c = document.createElementNS(dojo.svg.xmlns.svg, "circle"); |
| c.setAttribute("cx", x); |
| c.setAttribute("cy", y); |
| c.setAttribute("r", "3"); |
| c.setAttribute("fill", data[i].series.color); |
| c.setAttribute("fill-opacity", "0.6"); |
| c.setAttribute("stroke-width", "1"); |
| c.setAttribute("stroke-opacity", "0.85"); |
| line.appendChild(c); |
| if (applyTo) { |
| applyTo(c, data[i].src); |
| } |
| } |
| cmd.push("L"); |
| cmd.push(x + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)); |
| cmd.push("L"); |
| cmd.push(plot.axisX.getCoord(data[0].x, plotarea, plot) + "," + plot.axisY.getCoord(plot.axisX.origin, plotarea, plot)); |
| cmd.push("Z"); |
| path.setAttribute("d", cmd.join(" ")); |
| return line; |
| }, HighLow:function (data, plotarea, plot, applyTo) { |
| var area = plotarea.getArea(); |
| var group = document.createElementNS(dojo.svg.xmlns.svg, "g"); |
| var n = data.length; |
| var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4; |
| var w = part * 2; |
| for (var i = 0; i < n; i++) { |
| var high = data[i].high; |
| var low = data[i].low; |
| if (low > high) { |
| var t = low; |
| low = high; |
| high = t; |
| } |
| var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2); |
| var y = plot.axisY.getCoord(high, plotarea, plot); |
| var h = plot.axisY.getCoord(low, plotarea, plot) - y; |
| var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect"); |
| bar.setAttribute("fill", data[i].series.color); |
| bar.setAttribute("stroke-width", "0"); |
| bar.setAttribute("x", x); |
| bar.setAttribute("y", y); |
| bar.setAttribute("width", w); |
| bar.setAttribute("height", h); |
| bar.setAttribute("fill-opacity", "0.6"); |
| if (applyTo) { |
| applyTo(bar, data[i].src); |
| } |
| group.appendChild(bar); |
| } |
| return group; |
| }, HighLowClose:function (data, plotarea, plot, applyTo) { |
| var area = plotarea.getArea(); |
| var group = document.createElementNS(dojo.svg.xmlns.svg, "g"); |
| var n = data.length; |
| var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4; |
| var w = part * 2; |
| for (var i = 0; i < n; i++) { |
| var high = data[i].high; |
| var low = data[i].low; |
| if (low > high) { |
| var t = low; |
| low = high; |
| high = t; |
| } |
| var c = data[i].close; |
| var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2); |
| var y = plot.axisY.getCoord(high, plotarea, plot); |
| var h = plot.axisY.getCoord(low, plotarea, plot) - y; |
| var close = plot.axisY.getCoord(c, plotarea, plot); |
| var g = document.createElementNS(dojo.svg.xmlns.svg, "g"); |
| var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect"); |
| bar.setAttribute("fill", data[i].series.color); |
| bar.setAttribute("stroke-width", "0"); |
| bar.setAttribute("x", x); |
| bar.setAttribute("y", y); |
| bar.setAttribute("width", w); |
| bar.setAttribute("height", h); |
| bar.setAttribute("fill-opacity", "0.6"); |
| g.appendChild(bar); |
| var line = document.createElementNS(dojo.svg.xmlns.svg, "line"); |
| line.setAttribute("x1", x); |
| line.setAttribute("x2", x + w + (part * 2)); |
| line.setAttribute("y1", close); |
| line.setAttribute("y2", close); |
| line.setAttribute("style", "stroke:" + data[i].series.color + ";stroke-width:1px;stroke-opacity:0.6;"); |
| g.appendChild(line); |
| if (applyTo) { |
| applyTo(g, data[i].src); |
| } |
| group.appendChild(g); |
| } |
| return group; |
| }, HighLowOpenClose:function (data, plotarea, plot, applyTo) { |
| var area = plotarea.getArea(); |
| var group = document.createElementNS(dojo.svg.xmlns.svg, "g"); |
| var n = data.length; |
| var part = ((area.right - area.left) / (plot.axisX.range.upper - plot.axisX.range.lower)) / 4; |
| var w = part * 2; |
| for (var i = 0; i < n; i++) { |
| var high = data[i].high; |
| var low = data[i].low; |
| if (low > high) { |
| var t = low; |
| low = high; |
| high = t; |
| } |
| var o = data[i].open; |
| var c = data[i].close; |
| var x = plot.axisX.getCoord(data[i].x, plotarea, plot) - (w / 2); |
| var y = plot.axisY.getCoord(high, plotarea, plot); |
| var h = plot.axisY.getCoord(low, plotarea, plot) - y; |
| var open = plot.axisY.getCoord(o, plotarea, plot); |
| var close = plot.axisY.getCoord(c, plotarea, plot); |
| var g = document.createElementNS(dojo.svg.xmlns.svg, "g"); |
| var bar = document.createElementNS(dojo.svg.xmlns.svg, "rect"); |
| bar.setAttribute("fill", data[i].series.color); |
| bar.setAttribute("stroke-width", "0"); |
| bar.setAttribute("x", x); |
| bar.setAttribute("y", y); |
| bar.setAttribute("width", w); |
| bar.setAttribute("height", h); |
| bar.setAttribute("fill-opacity", "0.6"); |
| g.appendChild(bar); |
| var line = document.createElementNS(dojo.svg.xmlns.svg, "line"); |
| line.setAttribute("x1", x - (part * 2)); |
| line.setAttribute("x2", x + w); |
| line.setAttribute("y1", open); |
| line.setAttribute("y2", open); |
| line.setAttribute("style", "stroke:" + data[i].series.color + ";stroke-width:1px;stroke-opacity:0.6;"); |
| g.appendChild(line); |
| var line = document.createElementNS(dojo.svg.xmlns.svg, "line"); |
| line.setAttribute("x1", x); |
| line.setAttribute("x2", x + w + (part * 2)); |
| line.setAttribute("y1", close); |
| line.setAttribute("y2", close); |
| line.setAttribute("style", "stroke:" + data[i].series.color + ";stroke-width:1px;stroke-opacity:0.6;"); |
| g.appendChild(line); |
| if (applyTo) { |
| applyTo(g, data[i].src); |
| } |
| group.appendChild(g); |
| } |
| return group; |
| }, Scatter:function (data, plotarea, plot, applyTo) { |
| var r = 7; |
| var group = document.createElementNS(dojo.svg.xmlns.svg, "g"); |
| for (var i = 0; i < data.length; i++) { |
| var x = plot.axisX.getCoord(data[i].x, plotarea, plot); |
| var y = plot.axisY.getCoord(data[i].y, plotarea, plot); |
| var point = document.createElementNS(dojo.svg.xmlns.svg, "path"); |
| point.setAttribute("fill", data[i].series.color); |
| point.setAttribute("stroke-width", "0"); |
| 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"); |
| if (applyTo) { |
| applyTo(point, data[i].src); |
| } |
| group.appendChild(point); |
| } |
| return group; |
| }, Bubble:function (data, plotarea, plot, applyTo) { |
| var group = document.createElementNS(dojo.svg.xmlns.svg, "g"); |
| var sizeFactor = 1; |
| for (var i = 0; i < data.length; i++) { |
| var x = plot.axisX.getCoord(data[i].x, plotarea, plot); |
| var y = plot.axisY.getCoord(data[i].y, plotarea, plot); |
| if (i == 0) { |
| var raw = data[i].size; |
| var dy = plot.axisY.getCoord(data[i].y + raw, plotarea, plot) - y; |
| sizeFactor = dy / raw; |
| } |
| if (sizeFactor < 1) { |
| sizeFactor = 1; |
| } |
| var point = document.createElementNS(dojo.svg.xmlns.svg, "circle"); |
| point.setAttribute("fill", data[i].series.color); |
| point.setAttribute("fill-opacity", "0.8"); |
| point.setAttribute("stroke", data[i].series.color); |
| point.setAttribute("stroke-width", "1"); |
| point.setAttribute("cx", x); |
| point.setAttribute("cy", y); |
| point.setAttribute("r", (data[i].size / 2) * sizeFactor); |
| if (applyTo) { |
| applyTo(point, data[i].src); |
| } |
| group.appendChild(point); |
| } |
| return group; |
| }}); |
| dojo.charting.Plotters["Default"] = dojo.charting.Plotters.Line; |
| } |
| |