D3线充当封闭路径

时间:2012-12-03 13:51:38

标签: javascript line d3.js

更新:以下是此问题的一个示例 - http://jsfiddle.net/Hffks/2/

我正在尝试使用D3来编码折线图,并且我的线在末尾被关闭,我的意思是它充当了第一个和最后一个点相同的闭合路径。我的数据采用以下JSON格式:

[ entityA : [ { time : 1230000,  // time since epoch
             attribute1 : 123 // numeric value 
             attribute2 : 123 // numeric value
            },
              { time : 1230010,  // time since epoch
              attribute1 : 123 // numeric value 
              attribute2 : 123 // numeric value
            } ],
  entityB : [ { ... // same format as above
  ...
 ]

我正在使用一行的标准声明(带有x和y函数的d3.svg.line):

var line = d3.svg.line()
        .x(function(d) {
            return x_scale(d.c_date)); 
        })
        .y(function(d) { 
            return y_scale(d.total); 
        });

然后在for循环中迭代实体,我附加了一个“svg:path”:

canvas.append("svg:path")
            .attr("d", line(data[entity]))

关于图形的其他所有工作:点被正确放置,每个实体有多个独立的线,绘制轴等。但是,每条独立线都充当封闭路径。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:17)

默认情况下填充路径。如果您将fill设置为“无”并将stroke设置为“黑色”,您会看到路径未关闭,它似乎就是。

工作小提琴:http://jsfiddle.net/Hffks/3/

答案 1 :(得分:0)

我的代码是这样的:

var width = 400;
var height = 400;

var svg = d3.select('body')
  .append('svg')
  .attr('width', width)
  .attr('height', height);


//The data for our line
var lineData = [{
    "x": 1,
    "y": 5
  },
  {
    "x": 20,
    "y": 20
  },
  {
    "x": 40,
    "y": 10
  },
  {
    "x": 60,
    "y": 40
  },
  {
    "x": 80,
    "y": 5
  },
  {
    "x": 100,
    "y": 60
  }
];

//The line SVG Path we draw
var lineGraph = svg.append("path")
  .attr("d", d3.line()
    .x(d => d.x)
    .y(d => d.y)
    .curve(d3.curveLinear)(lineData))
    //.curve(d3.curveBasis)(lineData)) //Draws smooth joints- yumuşak birleşim noktası(mafsal) çizer
  .attr("stroke", "blue")
  .attr("stroke-width", 2)
  .attr("fill", "none");

您可以在此处查看d3版本5.9.2:https://jsfiddle.net/jsfiddleCem/u31omp5z/8/