【问题标题】:unable to horizontal draw reference line nvd3 bubble chart无法水平绘制参考线 nvd3 气泡图
【发布时间】:2014-06-30 19:32:38
【问题描述】:

我正在尝试在 nvd3 气泡图中绘制一条水平线(供参考)。我试图在 svg 图表上附加一条线

.append('line')
    .attr({
        x1: x(0),
        y1: 10,
        x2: x(3),
        y2: 10
});

但我没有成功。 Here 是小提琴。请注意,y1y2 的值是相同的(即 10),因为我正在尝试绘制一条水平线(y=10)。

【问题讨论】:

    标签: d3.js nvd3.js bubble-chart


    【解决方案1】:

    您的代码有两个问题。

    1. 您需要设置您的线路的stroke。试试这个:

      d3.select('#chart svg')
        .append('line')
        .attr({ x1: x(0), y1: 10, x2: x(3), y2: 10 })
        .style("stroke", "#000");
      

      这将在您的 JSFiddle 的左上角形成一条黑线。但是,您希望在图表上画线 y=10。这就引出了第二点。

    2. 之前,您试图在距离 SVG 顶部仅 10 像素的 y1=y2=10 处绘制线。此外,您使用的是自己的 x 规模。相反,您需要使用图表的 x 轴和 y 轴刻度在图表中的对应点绘制线条。 NVD3 的每个轴的刻度都可由chart.axis.scale() 访问(请参阅this SO question),因此您可以执行以下操作:

      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 像素,因此您需要适当地调整线条的位置。)如果您进行这些更改,您会得到下图。请参阅更新的 JSFiddle here

    您还可以通过调整窗口大小来确保您的行更新,如下所示:

    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() 是如何工作的。
    • @Dinesh:我不确定我是否理解,线路在y=10。还有x你看不懂吗?
    • 线在坐标区上方。我想在 y 轴上的 y(value) = 10 处绘制一条水平线。即使对于x,我也在考虑图中的轴值。当我们在y=2,4,8,16 and 32 处看到网格上的水平线时,我想在y=10 处绘制。
    • @Dinesh:好吧,我想我现在明白了,看看我更新的答案。
    • 谢谢。但我对 x 轴进行了类似的尝试——我想要一条网格线 y=10。但该行从 y 轴之前开始
    猜你喜欢
    • 2020-03-24
    • 1970-01-01
    • 2014-08-16
    • 2022-06-30
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    相关资源
    最近更新 更多