先来看看效果图
下面直接上源代码, html 文件
<html> <head> <meta charset = "utf-8"> <itement> 实时刷新折线图 </iteme> <tyle> .axis Path, .Axis Line {Fill: None; Stroke: Hitam; Bentuk-Rendering: Crispedges; } .AXIS TEXT {FONT-FAMILY: SANS-SERIF; Ukuran font: 11px; } .Overlay {fill: none; Pointer-Events: Semua; } .tooltip {width: 150px; Tinggi: otomatis; Posisi: Absolute; Font-Family: Simsun; font-size: 16px; Line-Height: 26px; Teks-Align: Kiri; Perbatasan: 1px solid black; Latar Belakang: Putih; Border-Radius: 5px; } .tooltip .title {border-bottom: 1px solid #000; Teks-Align: tengah; } .tooltip .descolor {width: 10px; Tinggi: 10px; float: kiri; margin: 9px 8px 1px 8px; } .tooltip .destext {display: inline; } .focusline {stroke: black; Stroke-Width: 1px; Stroke-Dasharray: 5,5; } </tyle> </head> <body> <script src = "http://d3js.org/d3.v3.js" charset = "utf-8"> </script> <skrip src = "linechart.js" charset = "utf-8"> </script> <SCRIPTSCRIPTEPET.JS "TEPP/UTF-8"> </script> <script> <SCRIPTEPTEPET.JS " xmlns: xlink = "http://www.w3.org/1999/xlink" zoomandpan = "magnify" style = "background-color: #ffffff;" ContentStyLeType = "Teks/CSS" viewbox = "0 0 2000.0 2000.0" Preserveaspectratio = "XMIDYMID Meet" xmlns = "http://www.w3.org/2000/svg" Versi = "1.0"> <defs> <simbol ID = "fillga" 0. "0." 0.0.0. PreserveasPectratio = "None Meet"> </smugh> <simbol id = "fillgeuge2" viewbox = "0 0 200.0 200.0" Preserveaspectratio = "None Meet"> </symbol> </efs> <use x = "0" y = "0" xmlns: xlink = "http://ww." xlink: href = "#fillgauge1" xlink: type = "sederhana" xlink: actuate = "onload" symboltype = "17" xlink: show = "embed"/> <use x = "20" y = "20" xmlns: xlink = "http:/www.w.w3.org/org/org/199 (xlink =" http://www.w3.org/org/org/199 (http: http:/www.www.w3. 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]]}]; var gauge1 = loadLinechart ("Fillgauge1", dataset); function newValue () {if (math.random ()> .5) {return math.round (math.random ()*100); } else {return (math.random ()*100) .tofixed (1); }} fungsi refreshline (gauge1) {// alert ("hehe"); // document.geteLementById ("fillgeuge1"). innerHtml = ""; var updateData = [{country: "cina", PDB: [[2000, newValue ()], [2001, newValue ()], [2002, newValue ()], [2003, newValue ()], [2004, newValue (), [2005, newValue ()], [2004, newValue (), [2005, newValue (),], [2006, newValue ()], [2007, newValue ()], [2008, newValue ()], [2009, newValue ()], [2010, newValue ()], [2011, newValue ()], [2012, newValue ()], [2013, newValue ()],}, {), {), {), {), {), {), {2012 NEWVALUE (2013, Galue (2012, [[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 ()]}]; gauge1.update (updateData); } self.setInterval ("Refreshline (Gauge1)", 5000); </script> </body> </html>linechart.js 负责加载和刷新折线图
function loadlinechart (elementId, dataset) {var svg = d3.select ("#" + elementId); var strs = svg.attr ("viewbox"). split (""); peringatan (dataset); var width = strs [2]; var tinggi = strs [3]; // 外边框 var padding = {atas: 50, kanan: 50, bawah: 50, kiri: 50}; var nama = array baru (); // 计算 GDP 的最大值 var gdpmax = 0; untuk (var i = 0; i <dataset.length; i ++) {var currgdp = d3.max (dataset [i] .gdp, fungsi (d) {return d [1];}); if (currgdp> gdpmax) gdpmax = Currgdp; } var gdpnumb = dataset [0] .gdp.length; untuk (var j = 0; j <gdpnumb; j ++) {nama [j] = (dataset [0] .gdp [j]) [0]; } peringatan (nama); var xscale = d3.scale.linear () .domain ([2000, 2013]) .range ([0, lebar - padding.left - padding.right]); // var xscale = d3.scale.ordinal () // .domain (nama) // .rangeroundbands ([0, lebar - padding.left - padding.right]); var yscale = d3.scale.linear () .domain ([0, gdmax * 1.1]) .range ([tinggi - padding.top - padding.bottom, 0]); // 创建一个直线生成器 var linepath = d3.svg.line () .x (function (d) {return xscale (d [0]);}) .y (fungsi (d) {return yscale (d [1]);}) .interpolate ("basis"); // 定义两个颜色 warna var = [d3.rgb (0, 0, 255), d3.rgb (0, 255, 0)]; // 添加路径 svg.selectall ("path") // 选择 <svg> 中所有的 <path> .data (dataset) // 绑定数据 .enter () // 选择 选择 部分 部分 选择 选择 选择 选择 选择 选择 添加足够数量的 添加足够数量的. {return linepath (d.gdp); // 添加垂直于 x 轴的对齐线 var vline = svg.append ("line") .attr ("class", "focusline") .style ("display", "none"); // 添加一个提示框 var tooltip = d3.select ("body"). Lampai ("div") .attr ("class", "tooltip") .style ("opacity", 0,0); var title = tooltip.append ("div") .attr ("class", "title"); var des = tooltip.selectall (". des") .data (dataset) .Enterer () .Append ("Div"); var descolor = des.append ("div") .attr ("class", "descolor"); var destext = des.append ("div") .attr ("class", "destext"); // 添加一个透明的监视鼠标事件用的矩形 svg.append ("rect") .attr ("class", "overlay") .attr ("x", padding.left) .attr ("y", padding.top) .attr ("width", width - padding.left - padding.right) .attr ("height", highding - padding. Tooltip.Style ("Left", (D3.Event.Pagex) + "PX") .Style ("Top", (D3.Event.PAGEY + 20) + "PX") .Style ("Opacity", 1.0); vline.style ("display", "none");}) .on ("mousemove", mousemove); function mouseMove () { / * 当鼠标在透明矩形内滑动时调用 * /// 折线的源数组 var data = dataset [0] .gdp; // 获取鼠标相对于透明矩形左上角的坐标 , 左上角坐标为 (0,0) var mousex = d3.mouse (ini) [0] - padding.left; var mousey = d3.mouse (ini) [1] - padding.top; // 通过比例尺的反函数计算原数据中的值 , 例如 x0 为某个年份 , y0 为 gdp 值 var x0 = xscale.invert (mousex); var y0 = yscale.invert (mousey); // 对 x0 四舍五入 , 如果 x0 是 2005.6 , 则返回 2006 ;如果是 2005.2 , 则返回 2005 x0 = Math.round (x0); // 查找在原数组中 x0 的值 , 并返回索引号 var bisect = d3.bisector (fungsi (d) {return d [0];}). Kiri; indeks var = bisect (data, x0); // 获取年份和 PDB 数据 tahun var = x0; var gdp = []; untuk (var k = 0; k <dataset.length; k ++) {gdp [k] = {country: dataset [k] .country, value: dataset [k] .gdp [index] [1]}; } // 设置提示框的标题文字(年份) title.html ("<strong>" + tahun + "年 </strong>"); // 设置颜色标记的颜色 descolor.style ("latar belakang-color", function (d, i) {return colors [i];}); // 设置描述文字的内容 destext.html (function (d, i) {return gdp [i] .country + "/t" + "<strong>" + gdp [i] .value + "</strong>";}); // 设置提示框的位置 tooltip.style ("kiri", (d3.event.pagex) + "px") .style ("atas", (d3.event.pagey + 20) + "px"); // 获取垂直对齐线的 x 坐标 var vlx = xscale (data [indeks] [0]) + padding.left; // 设定垂直对齐线的起点和终点 vline.attr ("x1", vlx) .attr ("y1", padding.top) .attr ("x2", vlx) .attr ("y2", tinggi - padding.bottom); } var markstep = 80; var gmark = svg.selectall (". gmark") .data (dataset) .Enterer () .Append ("g") .attr ("Transform", function (d, i) {return "translate (" + (padding.left + i * markstep) + "," + (tinggi - padding.bottom + 40) + ") (owepep)"; gmark.append ("rect") .attr ("x", 0) .attr ("y", 0) .attr ("lebar", 10) .attr ("tinggi", 10) .attr ("isi", fungsi (d, i) {return colors [i];}); gmark.append ("teks") .attr ("dx", 15) .attr ("dy", ".5em") .attr ("isi", "hitam") .text (function (d) {return d.country;}); // x 轴 var xaxis = d3.svg.axis () .scale (xscale) .ticks (5) .tickformat (d3.format ("d")) .orient ("Bottom"); // y 轴 var yaxis = d3.svg.axis () .scale (yscale) .orient ("kiri"); svg.append ("g") .attr ("class", "axis") .attr ("transform", "translate (" + padding.left + "," + (height - padding.bottom) + ")") .call (xaxis); svg.append ("g") .attr ("class", "y axis") .attr ("transform", "translate (" + Padding.Left + "," + Padding.top + ")") .call (yaxis); function updateLineChart () {this.update = function (updateData) {//xscale.domain(upDatedata,function(d) {return d.name}); var numValues = updateData.length; var updateGdPmax = 0; untuk (var i = 0; i <updateData.length; i ++) {var currgdp = d3.max (updateData [i] .gdp, function (d) {return d [1];}); if (Currgdp> updatePategdPmax) updateGdPmax = Currgdp; } yscale = d3.scale.linear () .domain ([0, updateGdPmax * 1.1]) .range ([tinggi - padding.top - padding.bottom, 0]); yaxis = d3.svg.axis () .scale (yscale) .orient ("kiri"); svg.selectall ("gyaxis") .call (yaxis); svg.selectall ("path") // 选择 <svg> 中所有的 <path> .data (updateData) // 绑定数据 .transition () .duration (2000) .ease ("linear") .attr ("d", function (d) {return linePath (d.gdp); // 返回直线生成器得到的路径}); }} return new UpdateLineChart ();}刚开始数据刷新了但是坐标轴木有刷新
引入
svg.selectall ("gyaxis") .call (yaxis);以上就是 d3.js 实现实时刷新折线图的全部内容 , 希望给大家学习 d3.js 带来帮助。