平行座標チャートを作成しましたが、レスポンシブにしたいと思います。
応答性をテストする目的で、最初にMike Bostock によるこの例を応答性にすると考えました。
私が直面している問題は、「svg」を「body」タグ内に直接配置すると、完全に機能することです。しかし、いくつかの div 内に「svg」を配置すると、ウィンドウのサイズが変更されるとチャートがトリミングされます。また、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 リンクは次のとおりです。コードの何が問題なのか、誰でも指摘できますか?