⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plotters.js

📁 初学者
💻 JS
📖 第 1 页 / 共 2 页
字号:
/*	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 = [];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -