New file |
0,0 → 1,887 |
/* |
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.vml.Plotters"); |
dojo.require("dojo.lang.common"); |
if (dojo.render.vml.capable) { |
dojo.mixin(dojo.charting.Plotters, {_group:function (plotarea) { |
var group = document.createElement("div"); |
group.style.position = "absolute"; |
group.style.top = "0px"; |
group.style.left = "0px"; |
group.style.width = plotarea.size.width + "px"; |
group.style.height = plotarea.size.height + "px"; |
return group; |
}, Bar:function (plotarea, plot, kwArgs, applyTo) { |
var area = plotarea.getArea(); |
var group = dojo.charting.Plotters._group(plotarea); |
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 = Math.round(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.createElement("v:rect"); |
bar.style.position = "absolute"; |
bar.style.top = y + 1 + "px"; |
bar.style.left = x + "px"; |
bar.style.width = barWidth + "px"; |
bar.style.height = h + "px"; |
bar.setAttribute("fillColor", data[j][i].series.color); |
bar.setAttribute("stroked", "false"); |
bar.style.antialias = "false"; |
var fill = document.createElement("v:fill"); |
fill.setAttribute("opacity", "0.6"); |
bar.appendChild(fill); |
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 = dojo.charting.Plotters._group(plotarea); |
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.createElement("v:rect"); |
bar.style.position = "absolute"; |
bar.style.top = y + 1 + "px"; |
bar.style.left = xA + "px"; |
bar.style.width = w + "px"; |
bar.style.height = barH + "px"; |
bar.setAttribute("fillColor", data[j][i].series.color); |
bar.setAttribute("stroked", "false"); |
bar.style.antialias = "false"; |
var fill = document.createElement("v:fill"); |
fill.setAttribute("opacity", "0.6"); |
bar.appendChild(fill); |
if (applyTo) { |
applyTo(bar, data[j][i].src); |
} |
group.appendChild(bar); |
} |
} |
var space = 4; |
var n = plot.series.length; |
var h = ((area.bottom - area.top) - (space * (n - 1))) / n; |
var xOrigin = plot.axisX.getCoord(0, plotarea, plot); |
for (var i = 0; i < n; i++) { |
var series = plot.series[i]; |
var data = series.data.evaluate(kwArgs); |
var y = area.top + (h * i) + (space * i); |
var value = data[data.length - 1].y; |
var xA = xOrigin; |
var x = plot.axisX.getCoord(value, plotarea, plot); |
var w = Math.abs(xA - x); |
if (value > 0) { |
xA = x; |
x = xOrigin; |
} |
} |
return group; |
}, Gantt:function (plotarea, plot, kwArgs, applyTo) { |
var area = plotarea.getArea(); |
var group = dojo.charting.Plotters._group(plotarea); |
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.createElement("v:rect"); |
bar.style.position = "absolute"; |
bar.style.top = y + 1 + "px"; |
bar.style.left = x + "px"; |
bar.style.width = w + "px"; |
bar.style.height = barH + "px"; |
bar.setAttribute("fillColor", data[j][i].series.color); |
bar.setAttribute("stroked", "false"); |
bar.style.antialias = "false"; |
var fill = document.createElement("v:fill"); |
fill.setAttribute("opacity", "0.6"); |
bar.appendChild(fill); |
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 = dojo.charting.Plotters._group(plotarea); |
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.createElement("v:shape"); |
path.setAttribute("strokeweight", "1px"); |
path.setAttribute("strokecolor", data[i][0].series.color); |
path.setAttribute("fillcolor", data[i][0].series.color); |
path.setAttribute("coordsize", (area.right - area.left) + "," + (area.bottom - area.top)); |
path.style.position = "absolute"; |
path.style.top = "0px"; |
path.style.left = "0px"; |
path.style.width = area.right - area.left + "px"; |
path.style.height = area.bottom - area.top + "px"; |
var stroke = document.createElement("v:stroke"); |
stroke.setAttribute("opacity", "0.8"); |
path.appendChild(stroke); |
var fill = document.createElement("v:fill"); |
fill.setAttribute("opacity", "0.4"); |
path.appendChild(fill); |
var cmd = []; |
var r = 3; |
for (var j = 0; j < data[i].length; j++) { |
var values = data[i]; |
var x = Math.round(plot.axisX.getCoord(values[j].x, plotarea, plot)); |
var y = Math.round(plot.axisY.getCoord(values[j].y, plotarea, plot)); |
if (j == 0) { |
cmd.push("m"); |
cmd.push(x + "," + y); |
} else { |
cmd.push("l"); |
cmd.push(x + "," + y); |
} |
var c = document.createElement("v:oval"); |
c.setAttribute("strokeweight", "1px"); |
c.setAttribute("strokecolor", values[j].series.color); |
c.setAttribute("fillcolor", values[j].series.color); |
var str = document.createElement("v:stroke"); |
str.setAttribute("opacity", "0.8"); |
c.appendChild(str); |
str = document.createElement("v:fill"); |
str.setAttribute("opacity", "0.6"); |
c.appendChild(str); |
var s = c.style; |
s.position = "absolute"; |
s.top = (y - r) + "px"; |
s.left = (x - r) + "px"; |
s.width = (r * 2) + "px"; |
s.height = (r * 2) + "px"; |
group.appendChild(c); |
if (applyTo) { |
applyTo(c, data[j].src); |
} |
} |
if (i == 0) { |
cmd.push("l"); |
cmd.push(x + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot))); |
cmd.push("l"); |
cmd.push(Math.round(plot.axisX.getCoord(data[0][0].x, plotarea, plot)) + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot))); |
} 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 = Math.round(plot.axisX.getCoord(values[j].x, plotarea, plot)); |
var y = Math.round(plot.axisY.getCoord(values[j].y, plotarea, plot)); |
cmd.push("l"); |
cmd.push(x + "," + y); |
} |
} |
path.setAttribute("path", cmd.join(" ") + " x e"); |
group.appendChild(path); |
} |
return group; |
}, StackedCurvedArea:function (plotarea, plot, kwArgs, applyTo) { |
var tension = 3; |
var area = plotarea.getArea(); |
var group = dojo.charting.Plotters._group(plotarea); |
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.createElement("v:shape"); |
path.setAttribute("strokeweight", "1px"); |
path.setAttribute("strokecolor", data[i][0].series.color); |
path.setAttribute("fillcolor", data[i][0].series.color); |
path.setAttribute("coordsize", (area.right - area.left) + "," + (area.bottom - area.top)); |
path.style.position = "absolute"; |
path.style.top = "0px"; |
path.style.left = "0px"; |
path.style.width = area.right - area.left + "px"; |
path.style.height = area.bottom - area.top + "px"; |
var stroke = document.createElement("v:stroke"); |
stroke.setAttribute("opacity", "0.8"); |
path.appendChild(stroke); |
var fill = document.createElement("v:fill"); |
fill.setAttribute("opacity", "0.4"); |
path.appendChild(fill); |
var cmd = []; |
var r = 3; |
for (var j = 0; j < data[i].length; j++) { |
var values = data[i]; |
var x = Math.round(plot.axisX.getCoord(values[j].x, plotarea, plot)); |
var y = Math.round(plot.axisY.getCoord(values[j].y, plotarea, plot)); |
if (j == 0) { |
cmd.push("m"); |
cmd.push(x + "," + y); |
} else { |
var lastx = Math.round(plot.axisX.getCoord(values[j - 1].x, plotarea, plot)); |
var lasty = Math.round(plot.axisY.getCoord(values[j - 1].y, plotarea, plot)); |
var dx = x - lastx; |
var dy = y - lasty; |
cmd.push("c"); |
var cx = Math.round((x - (tension - 1) * (dx / tension))); |
cmd.push(cx + "," + lasty); |
cx = Math.round((x - (dx / tension))); |
cmd.push(cx + "," + y); |
cmd.push(x + "," + y); |
} |
var c = document.createElement("v:oval"); |
c.setAttribute("strokeweight", "1px"); |
c.setAttribute("strokecolor", values[j].series.color); |
c.setAttribute("fillcolor", values[j].series.color); |
var str = document.createElement("v:stroke"); |
str.setAttribute("opacity", "0.8"); |
c.appendChild(str); |
str = document.createElement("v:fill"); |
str.setAttribute("opacity", "0.6"); |
c.appendChild(str); |
var s = c.style; |
s.position = "absolute"; |
s.top = (y - r) + "px"; |
s.left = (x - r) + "px"; |
s.width = (r * 2) + "px"; |
s.height = (r * 2) + "px"; |
group.appendChild(c); |
if (applyTo) { |
applyTo(c, data[j].src); |
} |
} |
if (i == 0) { |
cmd.push("l"); |
cmd.push(x + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot))); |
cmd.push("l"); |
cmd.push(Math.round(plot.axisX.getCoord(data[0][0].x, plotarea, plot)) + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot))); |
} 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 = Math.round(plot.axisX.getCoord(values[j].x, plotarea, plot)); |
var y = Math.round(plot.axisY.getCoord(values[j].y, plotarea, plot)); |
var lastx = Math.round(plot.axisX.getCoord(values[j + 1].x, plotarea, plot)); |
var lasty = Math.round(plot.axisY.getCoord(values[j + 1].y, plotarea, plot)); |
var dx = x - lastx; |
var dy = y - lasty; |
cmd.push("c"); |
var cx = Math.round((x - (tension - 1) * (dx / tension))); |
cmd.push(cx + "," + lasty); |
cx = Math.round((x - (dx / tension))); |
cmd.push(cx + "," + y); |
cmd.push(x + "," + y); |
} |
} |
path.setAttribute("path", cmd.join(" ") + " x e"); |
group.appendChild(path); |
} |
return group; |
}, DataBar:function (data, plotarea, plot, applyTo) { |
var area = plotarea.getArea(); |
var group = dojo.charting.Plotters._group(plotarea); |
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) + 1; |
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.createElement("v:rect"); |
bar.style.position = "absolute"; |
bar.style.top = y + 1 + "px"; |
bar.style.left = x + "px"; |
bar.style.width = w + "px"; |
bar.style.height = h + "px"; |
bar.setAttribute("fillColor", data[i].series.color); |
bar.setAttribute("stroked", "false"); |
bar.style.antialias = "false"; |
var fill = document.createElement("v:fill"); |
fill.setAttribute("opacity", "0.6"); |
bar.appendChild(fill); |
if (applyTo) { |
applyTo(bar, data[i].src); |
} |
group.appendChild(bar); |
} |
return group; |
}, Line:function (data, plotarea, plot, applyTo) { |
var area = plotarea.getArea(); |
var group = dojo.charting.Plotters._group(plotarea); |
if (data.length == 0) { |
return group; |
} |
var path = document.createElement("v:shape"); |
path.setAttribute("strokeweight", "2px"); |
path.setAttribute("strokecolor", data[0].series.color); |
path.setAttribute("fillcolor", "none"); |
path.setAttribute("filled", "false"); |
path.setAttribute("coordsize", (area.right - area.left) + "," + (area.bottom - area.top)); |
path.style.position = "absolute"; |
path.style.top = "0px"; |
path.style.left = "0px"; |
path.style.width = area.right - area.left + "px"; |
path.style.height = area.bottom - area.top + "px"; |
var stroke = document.createElement("v:stroke"); |
stroke.setAttribute("opacity", "0.8"); |
path.appendChild(stroke); |
var cmd = []; |
var r = 3; |
for (var i = 0; i < data.length; i++) { |
var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot)); |
var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot)); |
if (i == 0) { |
cmd.push("m"); |
cmd.push(x + "," + y); |
} else { |
cmd.push("l"); |
cmd.push(x + "," + y); |
} |
var c = document.createElement("v:oval"); |
c.setAttribute("strokeweight", "1px"); |
c.setAttribute("strokecolor", data[i].series.color); |
c.setAttribute("fillcolor", data[i].series.color); |
var str = document.createElement("v:stroke"); |
str.setAttribute("opacity", "0.8"); |
c.appendChild(str); |
str = document.createElement("v:fill"); |
str.setAttribute("opacity", "0.6"); |
c.appendChild(str); |
var s = c.style; |
s.position = "absolute"; |
s.top = (y - r) + "px"; |
s.left = (x - r) + "px"; |
s.width = (r * 2) + "px"; |
s.height = (r * 2) + "px"; |
group.appendChild(c); |
if (applyTo) { |
applyTo(c, data[i].src); |
} |
} |
path.setAttribute("path", cmd.join(" ") + " e"); |
group.appendChild(path); |
return group; |
}, CurvedLine:function (data, plotarea, plot, applyTo) { |
var tension = 3; |
var area = plotarea.getArea(); |
var group = dojo.charting.Plotters._group(plotarea); |
if (data.length == 0) { |
return group; |
} |
var path = document.createElement("v:shape"); |
path.setAttribute("strokeweight", "2px"); |
path.setAttribute("strokecolor", data[0].series.color); |
path.setAttribute("fillcolor", "none"); |
path.setAttribute("filled", "false"); |
path.setAttribute("coordsize", (area.right - area.left) + "," + (area.bottom - area.top)); |
path.style.position = "absolute"; |
path.style.top = "0px"; |
path.style.left = "0px"; |
path.style.width = area.right - area.left + "px"; |
path.style.height = area.bottom - area.top + "px"; |
var stroke = document.createElement("v:stroke"); |
stroke.setAttribute("opacity", "0.8"); |
path.appendChild(stroke); |
var cmd = []; |
var r = 3; |
for (var i = 0; i < data.length; i++) { |
var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot)); |
var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot)); |
if (i == 0) { |
cmd.push("m"); |
cmd.push(x + "," + y); |
} else { |
var lastx = Math.round(plot.axisX.getCoord(data[i - 1].x, plotarea, plot)); |
var lasty = Math.round(plot.axisY.getCoord(data[i - 1].y, plotarea, plot)); |
var dx = x - lastx; |
var dy = y - lasty; |
cmd.push("c"); |
var cx = Math.round((x - (tension - 1) * (dx / tension))); |
cmd.push(cx + "," + lasty); |
cx = Math.round((x - (dx / tension))); |
cmd.push(cx + "," + y); |
cmd.push(x + "," + y); |
} |
var c = document.createElement("v:oval"); |
c.setAttribute("strokeweight", "1px"); |
c.setAttribute("strokecolor", data[i].series.color); |
c.setAttribute("fillcolor", data[i].series.color); |
var str = document.createElement("v:stroke"); |
str.setAttribute("opacity", "0.8"); |
c.appendChild(str); |
str = document.createElement("v:fill"); |
str.setAttribute("opacity", "0.6"); |
c.appendChild(str); |
var s = c.style; |
s.position = "absolute"; |
s.top = (y - r) + "px"; |
s.left = (x - r) + "px"; |
s.width = (r * 2) + "px"; |
s.height = (r * 2) + "px"; |
group.appendChild(c); |
if (applyTo) { |
applyTo(c, data[i].src); |
} |
} |
path.setAttribute("path", cmd.join(" ") + " e"); |
group.appendChild(path); |
return group; |
}, Area:function (data, plotarea, plot, applyTo) { |
var area = plotarea.getArea(); |
var group = dojo.charting.Plotters._group(plotarea); |
if (data.length == 0) { |
return group; |
} |
var path = document.createElement("v:shape"); |
path.setAttribute("strokeweight", "1px"); |
path.setAttribute("strokecolor", data[0].series.color); |
path.setAttribute("fillcolor", data[0].series.color); |
path.setAttribute("coordsize", (area.right - area.left) + "," + (area.bottom - area.top)); |
path.style.position = "absolute"; |
path.style.top = "0px"; |
path.style.left = "0px"; |
path.style.width = area.right - area.left + "px"; |
path.style.height = area.bottom - area.top + "px"; |
var stroke = document.createElement("v:stroke"); |
stroke.setAttribute("opacity", "0.8"); |
path.appendChild(stroke); |
var fill = document.createElement("v:fill"); |
fill.setAttribute("opacity", "0.4"); |
path.appendChild(fill); |
var cmd = []; |
var r = 3; |
for (var i = 0; i < data.length; i++) { |
var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot)); |
var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot)); |
if (i == 0) { |
cmd.push("m"); |
cmd.push(x + "," + y); |
} else { |
cmd.push("l"); |
cmd.push(x + "," + y); |
} |
var c = document.createElement("v:oval"); |
c.setAttribute("strokeweight", "1px"); |
c.setAttribute("strokecolor", data[i].series.color); |
c.setAttribute("fillcolor", data[i].series.color); |
var str = document.createElement("v:stroke"); |
str.setAttribute("opacity", "0.8"); |
c.appendChild(str); |
str = document.createElement("v:fill"); |
str.setAttribute("opacity", "0.6"); |
c.appendChild(str); |
var s = c.style; |
s.position = "absolute"; |
s.top = (y - r) + "px"; |
s.left = (x - r) + "px"; |
s.width = (r * 2) + "px"; |
s.height = (r * 2) + "px"; |
group.appendChild(c); |
if (applyTo) { |
applyTo(c, data[i].src); |
} |
} |
cmd.push("l"); |
cmd.push(x + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot))); |
cmd.push("l"); |
cmd.push(Math.round(plot.axisX.getCoord(data[0].x, plotarea, plot)) + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot))); |
path.setAttribute("path", cmd.join(" ") + " x e"); |
group.appendChild(path); |
return group; |
}, CurvedArea:function (data, plotarea, plot, applyTo) { |
var tension = 3; |
var area = plotarea.getArea(); |
var group = dojo.charting.Plotters._group(plotarea); |
if (data.length == 0) { |
return group; |
} |
var path = document.createElement("v:shape"); |
path.setAttribute("strokeweight", "1px"); |
path.setAttribute("strokecolor", data[0].series.color); |
path.setAttribute("fillcolor", data[0].series.color); |
path.setAttribute("coordsize", (area.right - area.left) + "," + (area.bottom - area.top)); |
path.style.position = "absolute"; |
path.style.top = "0px"; |
path.style.left = "0px"; |
path.style.width = area.right - area.left + "px"; |
path.style.height = area.bottom - area.top + "px"; |
var stroke = document.createElement("v:stroke"); |
stroke.setAttribute("opacity", "0.8"); |
path.appendChild(stroke); |
var fill = document.createElement("v:fill"); |
fill.setAttribute("opacity", "0.4"); |
path.appendChild(fill); |
var cmd = []; |
var r = 3; |
for (var i = 0; i < data.length; i++) { |
var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot)); |
var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot)); |
if (i == 0) { |
cmd.push("m"); |
cmd.push(x + "," + y); |
} else { |
var lastx = Math.round(plot.axisX.getCoord(data[i - 1].x, plotarea, plot)); |
var lasty = Math.round(plot.axisY.getCoord(data[i - 1].y, plotarea, plot)); |
var dx = x - lastx; |
var dy = y - lasty; |
cmd.push("c"); |
var cx = Math.round((x - (tension - 1) * (dx / tension))); |
cmd.push(cx + "," + lasty); |
cx = Math.round((x - (dx / tension))); |
cmd.push(cx + "," + y); |
cmd.push(x + "," + y); |
} |
var c = document.createElement("v:oval"); |
c.setAttribute("strokeweight", "1px"); |
c.setAttribute("strokecolor", data[i].series.color); |
c.setAttribute("fillcolor", data[i].series.color); |
var str = document.createElement("v:stroke"); |
str.setAttribute("opacity", "0.8"); |
c.appendChild(str); |
str = document.createElement("v:fill"); |
str.setAttribute("opacity", "0.6"); |
c.appendChild(str); |
var s = c.style; |
s.position = "absolute"; |
s.top = (y - r) + "px"; |
s.left = (x - r) + "px"; |
s.width = (r * 2) + "px"; |
s.height = (r * 2) + "px"; |
group.appendChild(c); |
if (applyTo) { |
applyTo(c, data[i].src); |
} |
} |
cmd.push("l"); |
cmd.push(x + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot))); |
cmd.push("l"); |
cmd.push(Math.round(plot.axisX.getCoord(data[0].x, plotarea, plot)) + "," + Math.round(plot.axisY.getCoord(plot.axisX.origin, plotarea, plot))); |
path.setAttribute("path", cmd.join(" ") + " x e"); |
group.appendChild(path); |
return group; |
}, HighLow:function (data, plotarea, plot, applyTo) { |
var area = plotarea.getArea(); |
var group = dojo.charting.Plotters._group(plotarea); |
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.createElement("v:rect"); |
bar.style.position = "absolute"; |
bar.style.top = y + 1 + "px"; |
bar.style.left = x + "px"; |
bar.style.width = w + "px"; |
bar.style.height = h + "px"; |
bar.setAttribute("fillColor", data[i].series.color); |
bar.setAttribute("stroked", "false"); |
bar.style.antialias = "false"; |
var fill = document.createElement("v:fill"); |
fill.setAttribute("opacity", "0.6"); |
bar.appendChild(fill); |
if (applyTo) { |
applyTo(bar, data[i].src); |
} |
group.appendChild(bar); |
} |
return group; |
}, HighLowClose:function (data, plotarea, plot, applyTo) { |
var area = plotarea.getArea(); |
var group = dojo.charting.Plotters._group(plotarea); |
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.createElement("div"); |
var bar = document.createElement("v:rect"); |
bar.style.position = "absolute"; |
bar.style.top = y + 1 + "px"; |
bar.style.left = x + "px"; |
bar.style.width = w + "px"; |
bar.style.height = h + "px"; |
bar.setAttribute("fillColor", data[i].series.color); |
bar.setAttribute("stroked", "false"); |
bar.style.antialias = "false"; |
var fill = document.createElement("v:fill"); |
fill.setAttribute("opacity", "0.6"); |
bar.appendChild(fill); |
g.appendChild(bar); |
var line = document.createElement("v:line"); |
line.setAttribute("strokecolor", data[i].series.color); |
line.setAttribute("strokeweight", "1px"); |
line.setAttribute("from", x + "px," + close + "px"); |
line.setAttribute("to", (x + w + (part * 2) - 2) + "px," + close + "px"); |
var s = line.style; |
s.position = "absolute"; |
s.top = "0px"; |
s.left = "0px"; |
s.antialias = "false"; |
var str = document.createElement("v:stroke"); |
str.setAttribute("opacity", "0.6"); |
line.appendChild(str); |
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 = dojo.charting.Plotters._group(plotarea); |
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.createElement("div"); |
var bar = document.createElement("v:rect"); |
bar.style.position = "absolute"; |
bar.style.top = y + 1 + "px"; |
bar.style.left = x + "px"; |
bar.style.width = w + "px"; |
bar.style.height = h + "px"; |
bar.setAttribute("fillColor", data[i].series.color); |
bar.setAttribute("stroked", "false"); |
bar.style.antialias = "false"; |
var fill = document.createElement("v:fill"); |
fill.setAttribute("opacity", "0.6"); |
bar.appendChild(fill); |
g.appendChild(bar); |
var line = document.createElement("v:line"); |
line.setAttribute("strokecolor", data[i].series.color); |
line.setAttribute("strokeweight", "1px"); |
line.setAttribute("from", (x - (part * 2)) + "px," + open + "px"); |
line.setAttribute("to", (x + w - 2) + "px," + open + "px"); |
var s = line.style; |
s.position = "absolute"; |
s.top = "0px"; |
s.left = "0px"; |
s.antialias = "false"; |
var str = document.createElement("v:stroke"); |
str.setAttribute("opacity", "0.6"); |
line.appendChild(str); |
g.appendChild(line); |
var line = document.createElement("v:line"); |
line.setAttribute("strokecolor", data[i].series.color); |
line.setAttribute("strokeweight", "1px"); |
line.setAttribute("from", x + "px," + close + "px"); |
line.setAttribute("to", (x + w + (part * 2) - 2) + "px," + close + "px"); |
var s = line.style; |
s.position = "absolute"; |
s.top = "0px"; |
s.left = "0px"; |
s.antialias = "false"; |
var str = document.createElement("v:stroke"); |
str.setAttribute("opacity", "0.6"); |
line.appendChild(str); |
g.appendChild(line); |
if (applyTo) { |
applyTo(g, data[i].src); |
} |
group.appendChild(g); |
} |
return group; |
}, Scatter:function (data, plotarea, plot, applyTo) { |
var r = 6; |
var mod = r / 2; |
var area = plotarea.getArea(); |
var group = dojo.charting.Plotters._group(plotarea); |
for (var i = 0; i < data.length; i++) { |
var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot)); |
var y = Math.round(plot.axisY.getCoord(data[i].y, plotarea, plot)); |
var point = document.createElement("v:rect"); |
point.setAttribute("strokecolor", data[i].series.color); |
point.setAttribute("fillcolor", data[i].series.color); |
var fill = document.createElement("v:fill"); |
fill.setAttribute("opacity", "0.6"); |
point.appendChild(fill); |
var s = point.style; |
s.position = "absolute"; |
s.rotation = "45"; |
s.top = (y - mod) + "px"; |
s.left = (x - mod) + "px"; |
s.width = r + "px"; |
s.height = r + "px"; |
group.appendChild(point); |
if (applyTo) { |
applyTo(point, data[i].src); |
} |
} |
return group; |
}, Bubble:function (data, plotarea, plot, applyTo) { |
var sizeFactor = 1; |
var area = plotarea.getArea(); |
var group = dojo.charting.Plotters._group(plotarea); |
for (var i = 0; i < data.length; i++) { |
var x = Math.round(plot.axisX.getCoord(data[i].x, plotarea, plot)); |
var y = Math.round(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 r = (data[i].size / 2) * sizeFactor; |
var point = document.createElement("v:oval"); |
point.setAttribute("strokecolor", data[i].series.color); |
point.setAttribute("fillcolor", data[i].series.color); |
var fill = document.createElement("v:fill"); |
fill.setAttribute("opacity", "0.6"); |
point.appendChild(fill); |
var s = point.style; |
s.position = "absolute"; |
s.rotation = "45"; |
s.top = (y - r) + "px"; |
s.left = (x - r) + "px"; |
s.width = (r * 2) + "px"; |
s.height = (r * 2) + "px"; |
group.appendChild(point); |
if (applyTo) { |
applyTo(point, data[i].src); |
} |
} |
return group; |
}}); |
dojo.charting.Plotters["Default"] = dojo.charting.Plotters.Line; |
} |
|