d3.js网格线悬挂在x轴上?

时间:2016-08-12 08:08:14

标签: javascript d3.js

我正在尝试将网格线添加到折线图的背面,但网格线不会在x轴的最后一个条目处结束。见下面的plnk;

http://plnkr.co/edit/j8qQ19m4l4jgdCsRu1da?p=preview

供参考,我正在寻找类似的东西;

enter image description here

虽然,我不确定在x轴上添加空白条目以将折线图推入中间是多么容易。

无论如何,我希望有人可以帮忙解决这个问题!

由于

JS

var x = d3.time.scale()
  .domain([new Date(2016, 0, 1), new Date(2016, 11, 31)])
  .range([0, width]);

var y = d3.scale.linear()
  .domain([0, 100])
  .range([height, 0]);

var xAxis = d3.svg.axis()
  .scale(x)
  .orient("bottom")
  .ticks(d3.time.months)
  .tickFormat(d3.time.format("%B"))
  .tickSize(-height, 0, 0)
  .innerTickSize(-height)
  .tickPadding(15)

var yAxis = d3.svg.axis()
  .scale(y)
  .orient("left")
  .innerTickSize(-width)
  .outerTickSize(0)
  .tickPadding(15)
  .tickSize(-width, 0, 0)

var line = d3.svg.line()
  .x(function(d) {
    return x(new Date(2016, moment(d.date, 'MMMM').format('M') - 1, 1));
  })
  .y(function(d) {
    return y(d.close);
  });

var svg = d3.select("body").append("svg")
  .attr("width", width + margin.left + margin.right)
  .attr("height", height + margin.top + margin.bottom)
  .append("g")
  .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

d3.tsv("data.tsv", type, function(error, data) {

  svg.append("g")
    .attr("class", "x axis")
    .attr("transform", "translate(0," + height + ")")
    .call(xAxis)

  svg.append("g")
    .attr("class", "y axis")
    .call(yAxis)

  svg.append("path")
    .data([data])
    .attr("class", "line")
    .attr("d", line);

});

function type(d) {
  d.date = d.date;
  d.close = +d.close;
  return d;
}

TSV

date    close
January 50
February    100
March   75
April   90
May 85
June    40
July    30
August  35
September   12
October 72
November    77
December    5

1 个答案:

答案 0 :(得分:2)

由于您的约会。您有以下内容:

 .domain([new Date(2016, 0, 1), new Date(2016, 11, 31)])

这会产生12月份的滴答,然后是你的TSV值为December 5的剩余时间。如果你想回去一个月,可以这么说,只需将其编辑到前一个月:

 .domain([new Date(2016, 0, 1), new Date(2016, 10, 31)])

更新了Plnkr:http://plnkr.co/edit/vKlCFpBvDi097337HJyW?p=preview