d3.js实现自定义多y轴折线图的示例代码

 更新时间:2018年05月30日 11:18:38   作者:虾饼蘸蟹酱  
本篇文章主要介绍了d3.js实现自定义多y轴折线图的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

前言

需求是实现一个生命体征的体温单,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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • JavaScript强制类型转换和隐式类型转换操作示例

    JavaScript强制类型转换和隐式类型转换操作示例

    这篇文章主要介绍了JavaScript强制类型转换和隐式类型转换操作,结合实例形式分析了javascript字符串、数字等显示类型转换,以及运算、判断等情况下的隐式类型转换相关操作技巧,需要的朋友可以参考下
    2019-05-05
  • JavaScript实现简单的四则运算计算器完整实例

    JavaScript实现简单的四则运算计算器完整实例

    这篇文章主要介绍了JavaScript实现简单的四则运算计算器,结合完整实例形式分析了javascript基于表单相应实现加减乘除数学运算的操作技巧,需要的朋友可以参考下
    2017-04-04
  • Javascript 虚拟 DOM详解

    Javascript 虚拟 DOM详解

    这篇文章主要为大家介绍了Javascript 虚拟 DOM,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • ES6中解构赋值实现变量批量赋值解放双手

    ES6中解构赋值实现变量批量赋值解放双手

    这篇文章主要为大家介绍了ES6中解构赋值实现变量批量赋值解放双手,变量的解构赋值,听起来很复杂,简单点说可以理解成批量操作变量赋值
    2022-04-04
  • Easyui Tree获取当前选择节点的所有顶级父节点

    Easyui Tree获取当前选择节点的所有顶级父节点

    这篇文章主要介绍了Easyui Tree获取当前选择节点的所有顶级父节点,以及easyUI Tree显示选中节点的所有父节点的实现代码,需要的朋友可以参考下
    2017-02-02
  • 小程序Scroll-view上拉滚动刷新数据

    小程序Scroll-view上拉滚动刷新数据

    这篇文章主要为大家详细介绍了小程序Scroll-view上拉滚动刷新数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • JS实现即点即编辑功能代码

    JS实现即点即编辑功能代码

    以前在网上都看到过类似的功能,不过没自己想要实现过,这次刚好做静态页面中有这样的一个需求,就试着自己做做看,做完发现也不是什么很难的事情。
    2008-10-10
  • 微信小程序js时间戳与日期格式的转换方法

    微信小程序js时间戳与日期格式的转换方法

    这篇文章主要给大家介绍了关于微信小程序js时间戳与日期格式的转换方法,在小程序中使用时间选择器时,获取到的时间可能是一个时间戳,这并不是我们想要的,这时候我们得将获取到的时间戳进行转换,需要的朋友可以参考下
    2023-10-10
  • js实现简单的打印表格

    js实现简单的打印表格

    这篇文章主要为大家详细介绍了js实现简单的打印表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01
  • JavaScript面向对象之私有静态变量实例分析

    JavaScript面向对象之私有静态变量实例分析

    这篇文章主要介绍了JavaScript面向对象之私有静态变量,结合实例形式分析了私有静态变量的定义与使用方法,需要的朋友可以参考下
    2016-01-01

最新评论