我第一次使用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);});
给我这个输出:
通过增加svg的高度并将父g
向下翻译240px(参见代码中的注释),我得到了我的预期结果:
这些图像的比例有点偏离 - 实际上,我得到了相同的图形,但它比预期高出约250个像素。
我试图理解为什么会这样?
如果需要,我可以发布setDomains()
,但我的x()
和y()
函数在调试时返回给定输入的预期输出 - 即调用y(maxDataVal)
返回{{ 1}},正如所料。我认为这与我对0
不理解的事情有关,希望在上面可以看出这一点。