时间:2021-05-28
前言
需求是实现一个生命体征的体温单,x轴是时间线,y轴有多个体征项。效果不是特别复杂,但是行业特殊性,所以也没有现成可用的,所以用 d3.js 实现了一个多y轴的折线图。
基础
这张图只用了d3.js的一些最基本用法,数据量也比较小,所以也用不到多么牛逼的用法,只涉及到了比例尺 scale ,轴 axis ,画线和点,最后我添加了一个缩放效果。
效果
在线预览
具体实现
1.初始化一个svg作为容器,之后所有的点线面都是在这个容器里边画了
svg.select('#id') .append('svg') .attr('width', width) .attr('height', height)2.定义比例尺 scale ,定义域 domain 显示的刻度范围,值域 range 实际数据刻度
// x轴以时间为刻度this.x = d3 .scaleTime() .domain([this.beginTime, this.endTime]) .range([0, this.width]);// y轴按照像素值为刻度,所有数据需按照比例转换计算this.y = d3 .scaleLinear() .domain([0, this.height]) .range([this.height, 0]);3.定义轴 axis , axis 需要和 scale 结合使用,作为参数传入 axis(scale) 。
其中, ticks 表示刻度数量,传入数值即可,注意一点, ticks 默认会取 2,5,10 这三个数中的一个,如果你传入一个其他的数,它会根据实际尺寸找一个接近的值(这里还涉及到倍数情况下,详细了解可查阅官方api);
如果刻度想要自定义需要利用 tickValues([NO1,NO2,NO3...]) 实现; tickSize 表示刻度尺寸,设置为容器svg的宽高即实现了全图标尺效果。
this.xAxis = d3 .axisTop(this.x) // .ticks(d3.timeHour.every(4)) .tickValues(d3.timeHour.range(this.beginTime, this.endTime, 4)) .tickSize(this.height) .tickFormat(function (d, i) { // return d.getHours(); return; });this.yAxis = d3 .axisLeft() .scale(this.y) .tickValues(d3.range(0, this.height, this.height / 40)) .tickSize(-this.width) .tickFormat(function (d, i) { return; });4.定义折线模板
// 折线模板this.line = d3 .line() .x(function (d) { return that.x(d.datetime); }) .y(function (d) { return that.y(d.svgValue); });5.以上就完成了画布的基本框架,剩下的事情就是数据渲染。
该表中,顶部的时间轴和左侧y轴是自定义加上的,首先在容器中分配出来两块区域用来画轴;再根据容器的宽高按比例具体实现。
源代码地址:https://github.com/zhangxiongcn/multiple-Y-axis-line-chart
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言小编之前已经跟大家分享过了《D3.js实现柱状图的方法详解》和《D3.js实现折线图的方法详解》这两篇文章,已经介绍过柱状图和折线图了。下面就来说说和这两种
本文实例讲述了Android开发自定义控件之折线图实现方法。分享给大家供大家参考,具体如下:前言折线图是Android开发中经常会碰到的效果,但由于涉及自定义V
在制作EXCEL表图形中,有时如果将曲线设置成从Y轴开始,将大大提高美观度1、输入需要汇总曲线图的数据。2、选中数据做折线图。3、得到折线图。4、对X轴进行设置
Excel两个Y轴一个X轴的折线图怎么做?有表如下图,做出以年份为X轴,收入支出为左边和右边的Y轴,1、做出关于年份和收入的折线图,步骤如下图,结果如下图:2、
微信小程序使用echarts,实现左右双Y轴,动态获取数据,生成折线图本来使用的是wxcharts,但发现实现不了左右双y轴的效果,就换成echarts要实现这