我已经制作了一个平行坐标图,现在我想让它响应。
为了测试响应能力,我想首先让Mike Bostock 的这个例子是响应式的。
我面临的问题是,如果我将“svg”直接放在“body”标签内,它会完美运行。但是当我将“svg”放在一些 div 中时,调整窗口大小时图表会被裁剪。此外,svg 的高度被提到为 70%,如果我将其设为 80%,则图表将被裁剪而无需调整大小。我知道还有另一种选择是使用 viewBox 和 preserveAspectRatio,但我使用这种方法是因为它很容易理解,对于我或任何其他阅读我的代码的人来说。这是方法:
d3.csv("data.csv",function(data){
....
function resize(){
width = parseInt(d3.select("#mychart").style("width")) - margin.left - margin.right,
height = parseInt(d3.select("#mychart").style("height")) - margin.top - margin.bottom;
x.rangePoints([0, width], 1);
svg.select("#mychart")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom);
x.domain(dimensions = d3.keys(cars[0]).filter(function(d) {
return d != "name" && (y[d] = d3.scale.linear()
.domain(d3.extent(cars, function(p) { return +p[d]; }))
.range([height, 0]));
}));
svg.selectAll(".line").attr("d", path);
g = svg.selectAll(".dimension")
.attr("transform", function(d) { return "translate(" + x(d) + ")"; });
g.selectAll(".axis")
.each(function(d) {d3.select(this).call(axis.scale(y[d])); })
.append("text")
.style("text-anchor", "middle")
.attr("y", -9)
.text(function(d) { return d; });
}
d3.select(window).on('resize', resize);
resize();
});
这是完整代码的 plunker 链接。有人可以指出代码有什么问题吗?