d3制作折线图 发表于 2018-08-27 | 分类于 前端 , 数据可视化 代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 <style> .container { margin: 30px auto; width: 600px; height: 300px; border: 1px solid #000; } .axis path, .axis line, .line { stroke: #000; fill: none; } </style><div class="tablebox"> <div class="container"> <svg width="100%" height="100%"></svg> </div> <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script> <script> window.onload = function() { var width = 600, height = 300; // SVG画布边缘与图表内容的距离 var padding = { top: 50, right: 50, bottom: 70, left: 50 }; // 创建一个分组用来组合要画的图表元素 var main = d3.select('.container svg').append('g') .classed('main', true) .attr('transform', "translate(" + padding.top + ',' + padding.left + ')'); // 模拟数据 var dataset = [ {x: '2018-01-01', y: 11}, {x: '2018-01-02', y: 35}, {x: '2018-01-03', y: 23}, {x: '2018-01-04', y: 78}, {x: '2018-01-05', y: 55}, {x: '2018-01-06', y: 18}, {x: '2018-01-07', y: 98}, {x: '2018-01-08', y: 100}, {x: '2018-01-09', y: 22}, {x: '2018-01-10', y: 65} ]; // 创建x轴的比例尺(线性比例尺) var format = d3.time.format("%Y-%m-%d"); /* var xScale = d3.scale.linear() .domain(d3.extent(dataset, function(d) { return d.x; })) .range([0, width - padding.left - padding.right]);*/ var xScale = d3.time.scale() .domain([format.parse(dataset[0].x), format.parse(dataset[dataset.length-1].x)]) .range([0, width - padding.left - padding.right]); // 创建y轴的比例尺(线性比例尺) var yScale = d3.scale.linear() .domain([0, d3.max(dataset,function(d) { return d.y; })]) .range([height - padding.top - padding.bottom, 0]); // 创建x轴 var xAxis = d3.svg.axis() .scale(xScale) .orient('bottom') .tickFormat(d3.time.format("%Y-%m-%d")); // 创建y轴 var yAxis = d3.svg.axis() .scale(yScale) .orient('left'); // 添加SVG元素并与x轴进行“绑定” main.append('g') .attr('class', 'x axis') .attr('transform', 'translate(0,' + (height - padding.top - padding.bottom) + ')') .call(xAxis) .selectAll("text") .attr("transform", "rotate(-70)") .style("text-anchor", "end"); ; // 添加SVG元素并与y轴进行“绑定” main.append('g') .attr('class', 'axis') .call(yAxis); // 添加折线 var line = d3.svg.line() .x(function(d) { return xScale(format.parse(d.x)) }) .y(function(d) { return yScale(d.y); }) // 选择线条的类型 .interpolate('linear'); // 添加path元素,并通过line()计算出值来赋值 main.append('path') .attr('class', 'line') .attr('d', line(dataset)); // 添加点 main.selectAll('circle') .data(dataset) .enter() .append('circle') .attr('cx', function(d) { return xScale(format.parse(d.x)); }) .attr('cy', function(d) { return yScale(d.y); }) .attr('r', 5) .attr('fill', function(d, i) { return getColor(i); }); }; function getColor(idx) { var palette = [ '#2ec7c9', '#b6a2de', '#5ab1ef', '#ffb980', '#d87a80', '#8d98b3', '#e5cf0d', '#97b552', '#95706d', '#dc69aa', '#07a2a4', '#9a7fd1', '#588dd5', '#f5994e', '#c05050', '#59678c', '#c9ab00', '#7eb00a', '#6f5553', '#c14089' ] return palette[idx % palette.length]; } </script></div> 结果点击查看 d3_demo.html 另外一个随机多折线demo d3_demo2.html 使用ECharts.js 制作折线图请点击访问ECharts.js 制作折线图 参考地址d3制作折线图横坐标轴为日期日期转换问题刻度数多折线