Home  >  Article  >  Web Front-end  >  Detailed explanation of the steps to implement a custom multi-y-axis line chart with d3.js

Detailed explanation of the steps to implement a custom multi-y-axis line chart with d3.js

php中世界最好的语言
php中世界最好的语言Original
2018-06-01 09:26:182529browse

This time I will bring you a detailed explanation of the steps to implement a custom multi-y-axis line chart with d3.js. What are the precautions for d3.js to implement a custom multi-y-axis line chart? Here are the actual cases. , let’s take a look.

Preface

The requirement is to implement a body temperature sheet with vital signs. The x-axis is the timeline, and the y-axis has multiple physical sign items. The effect is not particularly complex, but due to the particularity of the industry, it is not readily available, so d3.js is used to implement a multi-y-axis line chart.

Basics

This picture only uses some of the most basic uses of d3.js, and the amount of data is relatively small, so it cannot be used What an awesome usage, it only involves scale, axis, drawing lines and points, and finally I added a scaling effect.

Effect

Online preview

Detailed implementation

1. Initialize an svg as a container, and then all points, lines and surfaces will be drawn in this container

svg.select('#id')
  .append('svg')
  .attr('width', width)
  .attr('height', height)

2. Define the scalescale , definition domain domain Displayed scale range, value domainrange Actual data scale

// 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. Define axis axis , axis needs to be used in conjunction with scale , and is passed in as a parameter axis(scale).

Among them, ticks represents the number of ticks, just pass in the value. Note that ticks will take one of the three numbers 2,5,10 by default , if you pass in another number, it will find a close value based on the actual size (this also involves multiples, please refer to the official API for details);

If you want to customize the scale, you need Use tickValues([NO1,NO2,NO3...]) to achieve; tickSize represents the scale size. Setting it to the width and height of the container svg achieves the full-scale ruler effect.

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. Define the polyline template

// 折线模板
this.line = d3
 .line()
 .x(function (d) {
  return that.x(d.datetime);
 })
 .y(function (d) {
  return that.y(d.svgValue);
 });

5. The above completes the basic framework of the canvas, and the remaining thing is data rendering.

In this table, the time axis at the top and the y-axis on the left are customized. First, two areas are allocated in the container to draw the axes; then they are implemented in proportion to the width and height of the container.

I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the php Chinese website!

Recommended reading:

How to use js to count the number of page tags

JS reflection and dependency injection use case analysis

The above is the detailed content of Detailed explanation of the steps to implement a custom multi-y-axis line chart with d3.js. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn