Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
D3.js 无法水平绘制参考线nvd3气泡图_D3.js_Nvd3.js_Bubble Chart - Fatal编程技术网

D3.js 无法水平绘制参考线nvd3气泡图

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

我试图在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('line')
      .attr({ x1: x(0), y1: 10, x2: x(3), y2: 10 })
      .style("stroke", "#000");
    
    这将在JSFIDLE的左上角形成一条黑线。但是,您希望在图表上画一条线,其中
    y=10
    。这就引出了第二点

  • 之前,您试图在距离SVG顶部仅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
    。这就引出了第二点

  • 之前,您试图在距离SVG顶部仅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轴之前开始的