如何将固定范围垂直线添加到D3.js图表

时间:2015-02-01 18:11:03

标签: javascript d3.js

我正在尝试在现有折线图上添加垂直线。我的数据看起来像这样 - 列PC是一个计算的百分比 - 垂直线应该从图表上的0到100%延伸:

var data = [
{"Month":"2014-06" , "PC" : 38 , "items" : 72 }, 
{"Month":"2014-07" , "PC" : 33 , "items" : 68 }, 
{"Month":"2014-08" , "PC" : 28 , "items" : 80 }, 
{"Month":"2014-09" , "PC" : 16 , "items" : 93 }
]

我将y轴精确构建如下,其中我强制范围为0到100,因为数据值实际上并不覆盖整个范围:

var y = d3.scale.linear()
.range([height, 0], 0.5);
y.domain([0, 100]);
var yAxis = d3.svg.axis().scale(y).orient("left").tickFormat(function(d) { return d + "%"; }).ticks(10);

要创建垂直线,我试试这个:

 var linev = d3.svg.line()
    .x(function(d, i) { 
      return x(data[2].Month); })
.y(function(d, i) { return y(i); }); 

 svgx.append("path")
      .datum(data)
    .style("fill", "none")
     .style("stroke", "black")
    .style("stroke-width", "1px")
      .attr("d", linev);
}

线形成,但是我不能让它在轴的0到100%的相同范围内延伸,因为我没有得到这条线:

  

.y(function(d,i){return y(i);});

如何使该组y值覆盖图表上所有点的y值,对应于0到100的百分比?

1 个答案:

答案 0 :(得分:8)

您可以通过附加具有相应y坐标的单独行来执行此操作:

svg.append("line")
   .attr("y1", y(0))
   .attr("y2", y(100))
   .attr("x1", ...)
   .attr("x2", ...)

其中x1x2的坐标相同,并确定垂直线的位置。