D3.js 无法水平绘制参考线nvd3气泡图
我试图在nvd3气泡图中画一条水平线(供参考)。我试图在svg图表中添加一行D3.js 无法水平绘制参考线nvd3气泡图,d3.js,nvd3.js,bubble-chart,D3.js,Nvd3.js,Bubble Chart,我试图在nvd3气泡图中画一条水平线(供参考)。我试图在svg图表中添加一行 .append('line') .attr({ x1: x(0), y1: 10, x2: x(3), y2: 10 }); 但我并不成功。这是小提琴。请注意,y1和y2的值是相同的(即10),因为我试图画一条水平线(y=10)。您的代码有两个问题 您需要设置行的笔划。试试这个: d3.select('#chart svg') .append
.append('line')
.attr({
x1: x(0),
y1: 10,
x2: x(3),
y2: 10
});
但我并不成功。这是小提琴。请注意,
y1
和y2
的值是相同的(即10),因为我试图画一条水平线(y=10
)。您的代码有两个问题
笔划
。试试这个:
d3.select('#chart svg')
.append('line')
.attr({ x1: x(0), y1: 10, x2: x(3), y2: 10 })
.style("stroke", "#000");
这将在JSFIDLE的左上角形成一条黑线。但是,您希望在图表上画一条线,其中y=10
。这就引出了第二点y1=y2=10
处画一条线。此外,您还使用了自己的x
量表。相反,您需要使用图表的x轴和y轴比例在图表中的相应点绘制直线。NVD3的每个轴的刻度都可以通过chart.axis.scale()
(请参阅)访问,因此您可以执行以下操作:
d3.select('#chart svg')
.append('line')
.attr({
x1: 75 + chart.xAxis.scale()(0),
y1: 30 + chart.yAxis.scale()(10),
x2: 75 + chart.xAxis.scale()(3),
y2: 30 + chart.yAxis.scale()(10)
})
.style("stroke", "#000");
(请注意,图表上有75像素的左边距和30像素的上边距,因此您需要适当调整线条的位置。)如果进行这些更改,您将看到下图。请参阅更新的JSFIDLE。
nv.utils.windowResize(function(){
chart.update();
line.attr({
x1: 75 + chart.xAxis.scale()(0),
y1: 30 + chart.yAxis.scale()(10),
x2: 75 + chart.xAxis.scale()(3),
y2: 30 + chart.yAxis.scale()(10)
})
});
您的代码有两个问题
笔划
。试试这个:
d3.select('#chart svg')
.append('line')
.attr({ x1: x(0), y1: 10, x2: x(3), y2: 10 })
.style("stroke", "#000");
这将在JSFIDLE的左上角形成一条黑线。但是,您希望在图表上画一条线,其中y=10
。这就引出了第二点y1=y2=10
处画一条线。此外,您还使用了自己的x
量表。相反,您需要使用图表的x轴和y轴比例在图表中的相应点绘制直线。NVD3的每个轴的刻度都可以通过chart.axis.scale()
(请参阅)访问,因此您可以执行以下操作:
d3.select('#chart svg')
.append('line')
.attr({
x1: 75 + chart.xAxis.scale()(0),
y1: 30 + chart.yAxis.scale()(10),
x2: 75 + chart.xAxis.scale()(3),
y2: 30 + chart.yAxis.scale()(10)
})
.style("stroke", "#000");
(请注意,图表上有75像素的左边距和30像素的上边距,因此您需要适当调整线条的位置。)如果进行这些更改,您将看到下图。请参阅更新的JSFIDLE。
nv.utils.windowResize(function(){
chart.update();
line.attr({
x1: 75 + chart.xAxis.scale()(0),
y1: 30 + chart.yAxis.scale()(10),
x2: 75 + chart.xAxis.scale()(3),
y2: 30 + chart.yAxis.scale()(10)
})
});
谢谢但是为什么线不是在y=10?我无法理解这个刻度x()是如何工作的。@迪内什:我不确定我是否理解,这行是在
y=10
。你不明白吗?这条线在轴的上方。我想在y轴上y(值)=10处绘制一条水平线。即使是关于x
,我也在考虑绘图上的轴值。当我们看到网格上的水平线位于y=2,4,8,16和32时,我想在y=10时绘制@Dinesh:好的,我想我现在明白了,请看我更新的答案。谢谢。但是我试着对x轴做类似的处理——我想要一条网格线y=10。但是这条线是从y轴之前开始的。但是为什么线不是在y=10?我无法理解这个刻度x()是如何工作的。@迪内什:我不确定我是否理解,这行是在y=10
。你不明白吗?这条线在轴的上方。我想在y轴上y(值)=10处绘制一条水平线。即使是关于x
,我也在考虑绘图上的轴值。当我们看到网格上的水平线位于y=2,4,8,16和32时,我想在y=10时绘制@Dinesh:好的,我想我现在明白了,请看我更新的答案。谢谢。但是我试着对x轴做类似的处理——我想要一条网格线y=10。但是这条线是从y轴之前开始的