如何在D3中生成每年的轴刻度线?

use*_*812 4 axis d3.js

如何在D3中生成每年的刻度?

以下代码似乎适用于我的数据跨越数年,但它显示数月只有几年的数月(比如3年)?

var xAxisScale  = d3.scaleTime()
    .domain([new Date(min, 0, 1, 0), new Date(max, 0, 1, 0)])
    .rangeRound([100,width])

xAxisScale.ticks(d3.timeYear.every(1));
Run Code Online (Sandbox Code Playgroud)

Ger*_*ado 6

您可以tickFormat在轴生成器中明确设置刻度格式::

xAxis.tickFormat(d3.timeFormat("%Y"));
Run Code Online (Sandbox Code Playgroud)

检查片段,第一个轴从2000年到2016年,第二个轴从2014年到2016年.第三个是相同的,但ticks(d3.timeYear)每年只保留1个刻度:

var width = 400, height = 200;

var svg = d3.select("body")
  .append("svg")
  .attr("width", width)
  .attr("height", height);

var xAxisScale1 = d3.scaleTime()
    .domain([new Date(2000, 0, 1), new Date(2016, 0, 1)])
    .rangeRound([20,width - 20]);

var xAxisScale2 = d3.scaleTime()
    .domain([new Date(2014, 0, 1), new Date(2016, 0, 1, 0)])
    .rangeRound([20,width - 20]);

var xAxis1 = d3.axisBottom(xAxisScale1);

var xAxis2 = d3.axisBottom(xAxisScale2).tickFormat(d3.timeFormat("%Y"));

svg.append("g").call(xAxis1);

svg.append("g").attr("transform", "translate(0,40)").call(xAxis2);

svg.append("g").attr("transform", "translate(0,80)").call(xAxis2.ticks(d3.timeYear));
Run Code Online (Sandbox Code Playgroud)
<script src="https://d3js.org/d3.v4.min.js"></script>
Run Code Online (Sandbox Code Playgroud)