先来看看效果图

下面直接上源代码,html文件

实时刷新折线图

.axis path,

.axis line{

fill: none;

stroke: black;

shape-rendering: crispEdges;

}

.axis text {

font-family: sans-serif;

font-size: 11px;

}

.overlay {

fill: none;

pointer-events: all;

}

.tooltip{

width: 150px;

height: auto;

position: absolute;

font-family: simsun;

font-size: 16px;

line-height: 26px;

text-align: left;

border: 1px solid black;

background-color: white;

border-radius: 5px;

}

.tooltip .title{

border-bottom: 1px solid #000;

text-align: center;

}

.tooltip .desColor{

width: 10px;

height: 10px;

float: left;

margin: 9px 8px 1px 8px;

}

.tooltip .desText{

display: inline;

}

.focusLine {

stroke: black;

stroke-width: 1px;

stroke-dasharray: 5,5;

}

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);

}

}

function 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: "usa",

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()]]

}

];

gauge1.update(updateData);

}

self.setInterval("refreshLine(gauge1)",5000);

lineChart.js负责加载和刷新折线图

function loadLineChart(elementId, dataset) {

var svg = d3.select("#" + elementId);

var strs = svg.attr("viewBox").split(" ");

alert(dataset);

var width = strs[2];

var height = strs[3];

//外边框

var padding = {

top : 50,

right : 50,

bottom : 50,

left : 50

};

var names = new Array();

//计算GDP的最大值

var gdpmax = 0;

for (var i = 0; i < dataset.length; i++) {

var currGdp = d3.max(dataset[i].gdp, function (d) {

return d[1];

});

if (currGdp > gdpmax)

gdpmax = currGdp;

}

var gdpnumb = dataset[0].gdp.length;

for (var j = 0; j < gdpnumb; j++) {

names[j] = (dataset[0].gdp[j])[0];

}

alert(names);

var xScale = d3.scale.linear()

.domain([2000, 2013])

.range([0, width - padding.left - padding.right]);

// var xScale = d3.scale.ordinal()

// .domain(names)

// .rangeRoundBands([0, width - padding.left - padding.right]);

var yScale = d3.scale.linear()

.domain([0, gdpmax * 1.1])

.range([height - padding.top - padding.bottom, 0]);

//创建一个直线生成器

var linePath = d3.svg.line()

.x(function (d) {

return xScale(d[0]);

})

.y(function (d) {

return yScale(d[1]);

})

.interpolate("basis");

//定义两个颜色

var colors = [d3.rgb(0, 0, 255), d3.rgb(0, 255, 0)];

//添加路径

svg.selectAll("path") //选择中所有的

.data(dataset) //绑定数据

.enter() //选择enter部分

.append("path") //添加足够数量的元素

.attr("transform", "translate(" + padding.left + "," + padding.top + ")")

.attr("d", function (d) {

return linePath(d.gdp); //返回直线生成器得到的路径

})

.attr("fill", "none")

.attr("stroke-width", 3)

.attr("stroke", function (d, i) {

return colors[i];

});

//添加垂直于x轴的对齐线

var vLine = svg.append("line")

.attr("class", "focusLine")

.style("display", "none");

//添加一个提示框

var tooltip = d3.select("body")

.append("div")

.attr("class", "tooltip")

.style("opacity", 0.0);

var title = tooltip.append("div")

.attr("class", "title");

var des = tooltip.selectAll(".des")

.data(dataset)

.enter()

.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", height - padding.top - padding.bottom)

.on("mouseover", function () {

tooltip.style("left", (d3.event.pageX) + "px")

.style("top", (d3.event.pageY + 20) + "px")

.style("opacity", 1.0);

vLine.style("display", null);

})

.on("mouseout", function () {

tooltip.style("opacity", 0.0);

vLine.style("display", "none");

})

.on("mousemove", mousemove);

function mousemove() {

/* 当鼠标在透明矩形内滑动时调用 */

//折线的源数组

var data = dataset[0].gdp;

//获取鼠标相对于透明矩形左上角的坐标,左上角坐标为(0,0)

var mouseX = d3.mouse(this)[0] - padding.left;

var mouseY = d3.mouse(this)[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(function (d) {

return d[0];

}).left;

var index = bisect(data, x0);

//获取年份和gdp数据

var year = x0;

var gdp = [];

for (var k = 0; k < dataset.length; k++) {

gdp[k] = {

country : dataset[k].country,

value : dataset[k].gdp[index][1]

};

}

//设置提示框的标题文字(年份)

title.html("" + year + "年");

//设置颜色标记的颜色

desColor.style("background-color", function (d, i) {

return colors[i];

});

//设置描述文字的内容

desText.html(function (d, i) {

return gdp[i].country + "\t" + "" + gdp[i].value + "";

});

//设置提示框的位置

tooltip.style("left", (d3.event.pageX) + "px")

.style("top", (d3.event.pageY + 20) + "px");

//获取垂直对齐线的x坐标

var vlx = xScale(data[index][0]) + padding.left;

//设定垂直对齐线的起点和终点

vLine.attr("x1", vlx)

.attr("y1", padding.top)

.attr("x2", vlx)

.attr("y2", height - padding.bottom);

}

var markStep = 80;

var gMark = svg.selectAll(".gMark")

.data(dataset)

.enter()

.append("g")

.attr("transform", function (d, i) {

return "translate(" + (padding.left + i * markStep) + "," + (height - padding.bottom + 40) + ")";

});

gMark.append("rect")

.attr("x", 0)

.attr("y", 0)

.attr("width", 10)

.attr("height", 10)

.attr("fill", function (d, i) {

return colors[i];

});

gMark.append("text")

.attr("dx", 15)

.attr("dy", ".5em")

.attr("fill", "black")

.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("left");

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;

for (var i = 0; i < updateData.length; i++) {

var currGdp = d3.max(updateData[i].gdp, function (d) {

return d[1];

});

if (currGdp > updategdpmax)

updategdpmax = currGdp;

}

yScale = d3.scale.linear()

.domain([0, updategdpmax * 1.1])

.range([height - padding.top - padding.bottom, 0]);

yAxis = d3.svg.axis()

.scale(yScale)

.orient("left");

svg.selectAll("g.y.axis")

.call(yAxis);

svg.selectAll("path") //选择中所有的

.data(updateData) //绑定数据

.transition()

.duration(2000)

.ease("linear")

.attr("d", function (d) {

return linePath(d.gdp); //返回直线生成器得到的路径

});

}

}

return new updateLineChart();

}

刚开始数据刷新了但是坐标轴木有刷新

引入

svg.selectAll("g.y.axis")

.call(yAxis);

以上就是d3.js实现实时刷新折线图的全部内容,希望给大家学习d3.js带来帮助。

html 实时曲线 js,基于d3.js实现实时刷新的折线图相关推荐

  1. 基于D3.js实现分类多标签的Tree型结构可视化

    全文共5270个字,4张图,预计阅读时间25分钟. 关键词: 可视化,D3.js,python,前端,代码 why 今天新来的实习生需要对部分分类文本进行多标签的检测,即根据已构建好的一.二级标签Ex ...

  2. 基于vue的组织架构树组件_Vue组件基于D3.js布局显示树

    基于vue的组织架构树组件 Vue.D3.tree (Vue.D3.tree) Update documentationVue components to display graphics based ...

  3. 链接neo4j图形数据库的图像化显示(基于d3.js/neovis.js/neod3.js)

    一.基于D3.js (自由度高,写起来麻烦) 二.基于neovis.js (基于d3库,简洁,但样式固定,自由度低.) 三.基于neo4jd3.js (融合neovis与d3,数据格式可用d3\neo ...

  4. pdfh5.js 基于pdf.js和jQuery,web/h5/移动端PDF预览手势缩放插件。

    pdfh5.js 基于pdf.js和jQuery,web/h5/移动端PDF预览手势缩放插件. 注意:本地绝对路径地址不能加载,跨域问题用代理或者服务端解决. svg模式渲染存在缺陷,只能渲染普通pd ...

  5. 数据可视化js框架 d3.js入门

    数据可视化js框架 d3.js入门 [一] 选择元素绑定数据 1.下载.引入d3.js 2.d3.select():选择所有指定元素的第一个 3.d3.selectAll() :选择指定元素的全部 e ...

  6. dagre-d3 基于d3.js v3版本以上

    基于d3 v3 和 v4 的变化 https://github.com/dagrejs/dagre-d3/commit/ebbb84f03bd169061f40d7a1df82cb3b51860187 ...

  7. 一个JS框架D3.js

    最近有点不务正业,好吧,诚恳一点面对现实.许多时候我想等我把某些问题,完全想明白,完全理解透,再写点东西:事实往往相反,发现等我真正接近,把某些东西理解好,我自己再也不屑写点东西分享了,没有精神气也好 ...

  8. A better way to learn D3 js - iLearning D3.js

    iLearning D3.js Basic is an iPad app to learn and code with D3. In 1.1 version, new tutorial is prov ...

  9. html文件中包含相关的d3.js文件,D3.js进阶系列之CSV表格文件的读取详解

    前言 之前在入门系列的教程中,我们常用 d3.json()函数来读取 json 格式的文件.json 格式很强大,但对于普通用户可能不太适合,普通用户更喜欢的是用 Microsoft Excel 或 ...

最新文章

  1. android默认exported_android:exported 属性详解
  2. 数据库字段名不统一的教训
  3. WebRTC第六步:下载webrtc
  4. linux软件包管理学习归档-2020-0624
  5. 关于数据库事务启用后的查询操作
  6. 《面向模式的软件体系结构3-资源管理模式》读书笔记(3)--- Eager Acquisition模式...
  7. Emit学习-进阶篇-异常处理
  8. 1486. 数组异或操作
  9. 八皇后问题程序及注解
  10. 在linux中安装pdf,linux 中安装PDF阅读器FoxitReader
  11. python 爬虫获取商家信息_Python爬取商家联系电话以及各种数据的方法
  12. 金融危机背景下大学生就业
  13. 抽35块树莓派新品单片机送给可爱的你们
  14. latex写加上标题不显示页眉页脚
  15. Web Scraper爬取信息
  16. MySQL常见错误:Starting MySQL...The server quit without updating PID file (/usr/local/mysql/data/localhos
  17. verilog的时钟分频与时钟使能
  18. 平方根计算在加速度传感器中的应用
  19. 10种最热门的编程语言出道至今历史排行情况-2020年TIOBE最新
  20. mysql 什么是主键_mysql – 主键应该是什么?

热门文章

  1. Oracle 判断正负数函数 sign
  2. linux进程的通信文件映射,Linux进程间通信 -- mmap函数的使用
  3. 全球及中国二手车贷款行业运行分析及项目动态研究报告2021年版
  4. stm32学习笔记——通用计时器基本原理
  5. 《和平精英》SS3赛季战神灵敏度来了,还有赛季手册最全套装
  6. 视觉工程师出差过多必会出现的问题
  7. 怎么让鼠标带黄色光圈?
  8. Word中的TIF图像保存后再打开就模糊了
  9. python数据分析与应用第五章实训 2_第五章实训(二)
  10. coursera 吴恩达四卷积神经网络第四周 Art Generation with Neural Style Transfer