先来看看效果图
下面直接上源代码 , html 文件
<html> <kopf> <meta charset = "utf-8"> <title> 实时刷新折线图 </title> <style> .AXIS-Pfad, .AXIS-Zeile {fill: Keine; Schlaganfall: Schwarz; Formrenderung: knusprig; } .axis text {Schriftfamilie: sans-serif; Schriftgröße: 11px; } .overlay {fill: keine; Zeiger-Events: Alle; } .tooltip {width: 150px; Höhe: Auto; Position: absolut; Schriftfamilie: Simsun; Schriftgröße: 16px; Zeilenhöhe: 26px; Text-Align: links; Grenze: 1PX Solid Black; Hintergrundfarbe: weiß; Border-Radius: 5px; } .tooltip .title {Border-Bottom: 1px Solid #000; Text-Align: Mitte; } .tooltip .descolor {width: 10px; Höhe: 10px; float: links; Rand: 9px 8px 1px 8px; } .tooltip .DESTEXT {display: inline; } .focusline {stroke: schwarz; Schlaganfall: 1PX; Stroke-Daasharray: 5,5; } </style> </head> <body> <script src = "http://d3js.org/d3.v3.js" charset = "utf-8"> </script> <script src = "lineChart.js" charset = "utf-8"> </script> <svg contentsTentype = "tect/ecmascript". xmlns: xlink = "http://www.w3.org/1999/xlink" zoomandpan = "Magnify" style = "background-color: #ffffff;" contentStyletyp = "text/css" viewbox = "0 0 2000.0 2000.0" PreserveSpectratio = "Xmidymid Meet" xmlns = "http://www.w3.org/2000/svg" Version = "1.0"> <defs> <symbol id = "fillGauge1" PreserveSpectratio = "Keine Meet"> </symbol> <symbol id = "fillGauge2" ViewBox = "0 0 200.0 200.0" PreserveSpectratio = "Keine Meet"> </symbol> </defs> <verwenden x = "0" y = "0" xmlns: xlink = "http://wwwwwwwwwwwww.w.w.w.w.w.ww. xlink: href = "#fillgauge1" xlink: type = "einfach" xlink: actuate = "onload" symboltype = "17" xlink: show = "eingebettet"/> use x = "20" y = "20" xmlns: xlink = "http://ww.w.w.w3.Org/199/xlink" xlink:href="#fillgauge2" xlink:type="simple" xlink:actuate="onLoad" symboltype="17" xlink:show="embed"/></svg><script> var dataset = [ { country: "china", gdp: [[2000,11920],[2001,13170],[2002,14550], [2003,16500],[2004,19440],[2005,22870], [2006,27930],[2007,35040],[2008,45470], [2009,51050],[2010,59490],[2011,73140], [2012,83860],[2013,103550]] }, { country: "usa", gdp: [[2000,47310],[2001,41590],[2002,39800], [2003,43020],[2004,46550],[2005,45710], [2006,43560],[2007,43560],[2008,48490], [2009.50350], [2010, 54950], [2011, 59050], [2012, 59370], [2013, 48980]]}]; Funktion newValue () {if (math.random ()> .5) {return math.round (math.random ()*100); } else {return (math.random ()*100) .tofixed (1); }} Funktion Refreshline (Gauge1) {// alert ("hehe"); // document.getElementById ("fillGauge1"). Innerhtml = ""; var updateData =[ { country: "china", gdp: [[2000,NewValue()],[2001,NewValue()],[2002,NewValue()], [2003,NewValue()],[2004,NewValue()],[2005,NewValue()], [2006, NewValue ()], [2007, NewValue ()], [2008, NewValue ()], [2009, NewValue ()], [2010, NewValue ()], [2011, NewValue ()], [2012, NewValue ()], [2013, Newvalue ()]}, {Country: {Country: {{usa: {usa: ", gdp: gdp: gdp: gdp: gdp: gdp: gdp: gdp: gdp: gdp: gdp. [[2000,NewValue()],[2001,NewValue()],[2002,NewValue()], [2003,NewValue()],[2004,NewValue()],[2005,NewValue()], [2006,NewValue()],[2007,NewValue()],[2008,NewValue()], [2009, newValue ()], [2010, newValue ()], [2011, newValue ()], [2012, newValue ()], [2013, newValue ()]]}]; guge1.update (aktualisiertata); } self.setInterval ("Refreshline (Gauge1)", 5000); </script> </body> </html>lineechart.js 负责加载和刷新折线图
Funktion loadLinechArt (elementId, dataset) {var svg = d3.Select ("#" + elementId); var strs = svg.attr ("viewbox"). split (""); Alert (Datensatz); var width = strs [2]; var hohe = strs [3]; // 外边框 var padding = {top: 50, rechts: 50, unten: 50, links: 50}; var names = new array (); // 计算 BIP 的最大值 var gdpmax = 0; für (var i = 0; i <dataset.length; i ++) {var currgdp = d3.max (dataset [i] .gdp, Funktion (d) {return d [1];}); if (currGDP> GDPMAX) GDPMAX = CurrGDP; } var gdpnumb = dataset [0] .gdp.length; für (var j = 0; j <gdpnumb; j ++) {names [j] = (Dataset [0] .gdp [j]) [0]; } alert (Namen); var xscale = d3.scale.lineear () .domain ([2000, 2013]) .Range ([0, width - padding.left - padding.Right]); // var xscale = d3.scale.ordinal () // .domain (Namen) // .rangeroundbands ([0, width - padding.left - padding.Right]); var yscale = d3.scale.Linear () .Domain ([0, GDPMAX * 1.1]) .Range ([Höhe - Polsterung.Top - padding.bottom, 0]); // 创建一个直线生成器 var linePath = d3.svg.line () .x (Funktion (d) {return xscale (d [0]);}) .y (Funktion (d) {return yScale (d [1]);}) .Interpolat ("Basis"); // 定义两个颜色 var colors = [d3.rgb (0, 0, 255), d3.rgb (0, 255, 0)]; //添加路径 svg.selectAll("path") //选择<svg>中所有的<path> .data(dataset) //绑定数据 .enter() //选择enter部分 .append("path") //添加足够数量的<path>元素 .attr("transform", "translate(" + padding.left + "," + padding.top + ")") .attr("d", function (d) {return linePath (d.gdp); // 添加垂直于 x 轴的对齐线 var vline = svg.append ("line") .attr ("class", "focusline") .style ("display", "keine"); // 添加一个提示框 var tooltip = d3.Select ("body") .Append ("div") .attr ("Klasse", "tOoltip") .style ("Deckkraft", 0.0); var title = tooltip.append ("div") .attr ("class", "title"); var des = tooltip.selectAll (". Des") .Data (Datensatz) .Enter () .Append ("div"); var descolor = Des.Append ("div") .attr ("Klasse", "Descolor"); var destext = Des.Append ("div") .attr ("Klasse", "Destext"); // 添加一个透明的监视鼠标事件用的矩形 Svg.Append ("rect") .attr ("Klasse", "Overlay") .Attr ("x", padding.left) .attr ("y", padding.top) .attr ("width", width - padding.left - padding.Right) .attr ("Height - Padding - Padding - Padding. Tooltip.Style ("links", (d3.event.pagex) + "px") .style ("top", (d3.event.pagey + 20) + "px") .Style ("Opazität", 1,0); vline.Style ("Display", "keine"); function mousEmove () { / * 当鼠标在透明矩形内滑动时调用 * /// 折线的源数组 var data = dataset [0] .gdp; // 获取鼠标相对于透明矩形左上角的坐标 , 左上角坐标为 (0,0) var mousex = d3.mouse (this) [0] - padding.left; var mausy = d3.mouse (this) [1] - padding.top; // 通过比例尺的反函数计算原数据中的值 , 例如 x0 为某个年份 , y0 为 BIP 值 var x0 = xscale.invert (mousex); var y0 = yscale.invert (mausy); // 对 x0 四舍五入 , 如果 x0 是 2005.6 , 2006 ;如果是 2005.2 则返回 则返回 2005 x0 = math.round (x0); // 查找在原数组中 x0 的值 , 并返回索引号 var bisct = d3.bisector (Funktion (d) {return d [0];}). var index = bisekt (Daten, x0); // 获取年份和 BIP 数据 var Jahr = x0; var bid = []; für (var k = 0; k <dataset.length; k ++) {GDP [k] = {landes: dataset [k] .country, Wert: dataset [k] .gdp [index] [1]}; } // 设置提示框的标题文字(年份) title.html ("<strong>" + Jahr + "年 </strong>"); // 设置颜色标记的颜色 Descolor.Style ("Hintergrundfarbe", Funktion (d, i) {return colors [i];}); // 设置描述文字的内容 Destext.html (Funktion (d, i) {return bid [i] .country + "/t" + "<strong>" + GDP [i] .Value + "</strong>";}); // 设置提示框的位置 tooltip.style ("links", (d3.event.pagex) + "px") .style ("top", (d3.event.pagey + 20) + "px"); // 获取垂直对齐线的 x 坐标 var vlx = xscale (Daten [index] [0]) + padding.left; // 设定垂直对齐线的起点和终点 vline.attr ("x1", vlx) .attr ("y1", padding.top) .attr ("x2", vlx) .attr ("y2", Höhe - padding.bottom); } var markstep = 80; var gmark = svg.selectAll (". gmark") .data (dataset) .enter () .Append ("g") .Attr ("Transformation", Funktion (d, i) {return "translate (" + (padding.left + i * markstep) + "," + (Höhe - Padding.Bottom + 40) + ")") "). gmark.Append ("rect") .attr ("x", 0) .attr ("y", 0) .attr ("width", 10) .attr ("Höhe", 10) .attr ("fill", function (d, i) {return farben [i];}); gmark.Append ("text") .attr ("dx", 15) .attr ("dy", ".5em") .attr ("fill", "schwarz") .Text (Funktion (d) {return D.Country;}); // x 轴 var xaxis = d3.svg.axis () .scale (xscale) .ticks (5) .TickFormat (d3.Format ("d") .Orient ("boden"); // y 轴 var yaxis = d3.svg.axis () .scale (yscale) .orient ("links"); svg.append ("g") .attr ("Klasse", "axis") .attr ("Transformation", "Translate (" + padding.left + "," + (Höhe - padding.bottom) + ") .call (xaxis); svg.append ("g") .attr ("Klasse", "y axis") .attr ("Transformation", "Translate (" + padding.left + "," + padding.top + ")") .call (yaxis); function updatelinechart () {this.update = function (aktualisiertata) {//xscale.domain(updatedata,Function(d) {Return D.Name}); var numvalues = aktualisiertata.length; var upupdategdpmax = 0; für (var i = 0; i <aktualisiertata.length; i ++) {var currgdp = d3.max (aktualisiertata [i] .gdp, Funktion (d) {return d [1];}); if (currGDP> updategdpmax) updategdpmax = currgdp; } yscale = d3.scale.lineear () .domain ([0, updategdpmax * 1.1]) .Range ([Höhe - padding.top - padding.bottom, 0]); yaxis = d3.svg.axis () .scale (yscale) .orient ("links"); svg.Selectall ("gyaxis") .call (yaxis); svg.Selectall ("path") // 选择 <svg> 中所有的 <path> .data (aktualisiertata) // 绑定数据 .Transition () .Duration (2000) .Eeas ("linear") .attr ("d", function (d) {return linepath (d.gdp); //}); }} neu updatelinechart () zurückgeben;}刚开始数据刷新了但是坐标轴木有刷新
引入
svg.Selectall ("gyaxis") .call (yaxis);以上就是 d3.js 实现实时刷新折线图的全部内容 , 希望给大家学习 d3.js 带来帮助。