我正在尝试在现有折线图上添加垂直线。我的数据看起来像这样 - 列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的百分比?
答案 0 :(得分:8)
您可以通过附加具有相应y
坐标的单独行来执行此操作:
svg.append("line")
.attr("y1", y(0))
.attr("y2", y(100))
.attr("x1", ...)
.attr("x2", ...)
其中x1
和x2
的坐标相同,并确定垂直线的位置。