意外的d3.stack()输出

时间:2014-12-10 20:13:09

标签: javascript d3.js

我第一次使用d3的堆栈布局来生成流图。

此代码:

var w = 600,
    h = 350; 
var x = d3.scale.linear().range([0, w])
    y = d3.scale.linear().range([h, 0])
//...
d3.csv("filePath", function(error, input)){
    var data = parseData(input);
    setDomains(data); //sets x and y domain values. These are return expected values
    var svg = d3.select("body").append("svg")
            .attr("width", w)
            .attr("height", h) //.attr("height", h*3) is used to produce second result
            .append("g")
            //.attr("transform", "translate(0, 250)"); is used to produce second result

   var stack = d3.layout.stack().offset("silhouette"),
       layers = stack(data);

   var area = d3.svg.area()
        .interpolate("basis")
        .x(function (d, i) {return x(d.x);})
        .y0(function (d) {return y(d.y0);})
        .y1(function (d) {return y(d.y0 + d.y);});

    svg.selectAll(".layer")
        .data(layers)
        .enter().append("path")
        .attr("class", "layer")
        .attr("d", function (d) {return area(d);})
        .style("fill", function (d, i) {return color(d[0].type);});

给我这个输出:

enter image description here

通过增加svg的高度并将父g向下翻译240px(参见代码中的注释),我得到了我的预期结果: enter image description here

这些图像的比例有点偏离 - 实际上,我得到了相同的图形,但它比预期高出约250个像素。

我试图理解为什么会这样?

如果需要,我可以发布setDomains(),但我的x()y()函数在调试时返回给定输入的预期输出 - 即调用y(maxDataVal)返回{{ 1}},正如所料。我认为这与我对0不理解的事情有关,希望在上面可以看出这一点。

0 个答案:

没有答案