📄 chart.js
字号:
/* 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.widget.Chart");dojo.require("dojo.widget.*");dojo.require("dojo.gfx.color");dojo.require("dojo.gfx.color.hsl");dojo.declare("dojo.widget.Chart", null, function () { this.series = [];}, {isContainer:false, assignColors:function () { var hue = 30; var sat = 120; var lum = 120; var steps = Math.round(330 / this.series.length); for (var i = 0; i < this.series.length; i++) { var c = dojo.gfx.color.hsl2rgb(hue, sat, lum); if (!this.series[i].color) { this.series[i].color = dojo.gfx.color.rgb2hex(c[0], c[1], c[2]); } hue += steps; }}, parseData:function (table) { var thead = table.getElementsByTagName("thead")[0]; var tbody = table.getElementsByTagName("tbody")[0]; if (!(thead && tbody)) { dojo.raise("dojo.widget.Chart: supplied table must define a head and a body."); } var columns = thead.getElementsByTagName("tr")[0].getElementsByTagName("th"); for (var i = 1; i < columns.length; i++) { var key = "column" + i; var label = columns[i].innerHTML; var plotType = columns[i].getAttribute("plotType") || "line"; var color = columns[i].getAttribute("color"); var ds = new dojo.widget.Chart.DataSeries(key, label, plotType, color); this.series.push(ds); } var rows = tbody.rows; var xMin = Number.MAX_VALUE, xMax = Number.MIN_VALUE; var yMin = Number.MAX_VALUE, yMax = Number.MIN_VALUE; var ignore = ["accesskey", "align", "bgcolor", "class", "colspan", "height", "id", "nowrap", "rowspan", "style", "tabindex", "title", "valign", "width"]; for (var i = 0; i < rows.length; i++) { var row = rows[i]; var cells = row.cells; var x = Number.MIN_VALUE; for (var j = 0; j < cells.length; j++) { if (j == 0) { x = parseFloat(cells[j].innerHTML); xMin = Math.min(xMin, x); xMax = Math.max(xMax, x); } else { var ds = this.series[j - 1]; var y = parseFloat(cells[j].innerHTML); yMin = Math.min(yMin, y); yMax = Math.max(yMax, y); var o = {x:x, value:y}; var attrs = cells[j].attributes; for (var k = 0; k < attrs.length; k++) { var attr = attrs.item(k); var bIgnore = false; for (var l = 0; l < ignore.length; l++) { if (attr.nodeName.toLowerCase() == ignore[l]) { bIgnore = true; break; } } if (!bIgnore) { o[attr.nodeName] = attr.nodeValue; } } ds.add(o); } } } return {x:{min:xMin, max:xMax}, y:{min:yMin, max:yMax}};}});dojo.declare("dojo.widget.Chart.DataSeries", null, function (key, label, plotType, color) { this.id = "DataSeries" + dojo.widget.Chart.DataSeries.count++; this.key = key; this.label = label || this.id; this.plotType = plotType || "line"; this.color = color; this.values = [];}, {add:function (v) { if (v.x == null || v.value == null) { dojo.raise("dojo.widget.Chart.DataSeries.add: v must have both an 'x' and 'value' property."); } this.values.push(v);}, clear:function () { this.values = [];}, createRange:function (len) { var idx = this.values.length - 1; var length = (len || this.values.length); return {"index":idx, "length":length, "start":Math.max(idx - length, 0)};}, getMean:function (len) { var range = this.createRange(len); if (range.index < 0) { return 0; } var t = 0; var c = 0; for (var i = range.index; i >= range.start; i--) { var n = parseFloat(this.values[i].value); if (!isNaN(n)) { t += n; c++; } } t /= Math.max(c, 1); return t;}, getMovingAverage:function (len) { var range = this.createRange(len); if (range.index < 0) { return 0; } var t = 0; var c = 0; for (var i = range.index; i >= range.start; i--) { var n = parseFloat(this.values[i].value); if (!isNaN(n)) { t += n; c++; } } t /= Math.max(c, 1); return t;}, getVariance:function (len) { var range = this.createRange(len); if (range.index < 0) { return 0; } var t = 0; var s = 0; var c = 0; for (var i = range.index; i >= range.start; i--) { var n = parseFloat(this.values[i].value); if (!isNaN(n)) { t += n; s += Math.pow(n, 2); c++; } } return (s / c) - Math.pow(t / c, 2);}, getStandardDeviation:function (len) { return Math.sqrt(this.getVariance(len));}, getMax:function (len) { var range = this.createRange(len); if (range.index < 0) { return 0; } var t = 0; for (var i = range.index; i >= range.start; i--) { var n = parseFloat(this.values[i].value); if (!isNaN(n)) { t = Math.max(n, t); } } return t;}, getMin:function (len) { var range = this.createRange(len); if (range.index < 0) { return 0; } var t = 0; for (var i = range.index; i >= range.start; i--) { var n = parseFloat(this.values[i].value); if (!isNaN(n)) { t = Math.min(n, t); } } return t;}, getMedian:function (len) { var range = this.createRange(len); if (range.index < 0) { return 0; } var a = []; for (var i = range.index; i >= range.start; i--) { var n = parseFloat(this.values[i].value); if (!isNaN(n)) { var b = false; for (var j = 0; j < a.length && !b; j++) { if (n == a[j]) { b = true; } } if (!b) { a.push(n); } } } a.sort(); if (a.length > 0) { return a[Math.ceil(a.length / 2)]; } return 0;}, getMode:function (len) { var range = this.createRange(len); if (range.index < 0) { return 0; } var o = {}; var ret = 0; var m = 0; for (var i = range.index; i >= range.start; i--) { var n = parseFloat(this.values[i].value); if (!isNaN(n)) { if (!o[this.values[i].value]) { o[this.values[i].value] = 1; } else { o[this.values[i].value]++; } } } for (var p in o) { if (m < o[p]) { m = o[p]; ret = p; } } return parseFloat(ret);}});dojo.requireIf(dojo.render.svg.capable, "dojo.widget.svg.Chart");dojo.requireIf(!dojo.render.svg.capable && dojo.render.vml.capable, "dojo.widget.vml.Chart");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -