我有一个使用 d3.js 的堆积面积图。我有一个函数可以调整大小并重绘 window.resize 上的可视化。逻辑是根据窗口大小去除 10% 的边距并缩放 x/y 轴。
在这里你可以看到它:
http://porwal.info/direct/demos/d3graphs/area.html
如果窗口大小未接近全尺寸,则当我调整窗口大小(放大或缩小)时,该逻辑起作用。如果高度接近全高,则图形超出预期边界。例如,如果您按 F11 全屏,则图表会溢出。它不仅仅是 F11,而且如果我最大化,有时如果工作正常,有时它会溢出。
相关的js文件是
http://porwal.info/direct/demos/d3graphs/js/area.js
此外,相关的调整大小功能:
function setACDimensions() {
ac_container_width=$(window).innerWidth();
ac_container_height=Math.round(0.8*$(window).innerHeight());
$(ac_container).height(ac_container_height);
$(ac_container).width(ac_container_width);
var margin=(ac_margin > 10)? 10 : ac_margin;
var factor= 1 - 2*margin/100;
ac_width = Math.round(factor*ac_container_width);
ac_height = Math.round(factor*ac_container_height);
ac_origin_x=Math.round(ac_container_width * margin/100);
ac_origin_y=Math.round(ac_container_height * margin/100);
}
function resizeAreaGraph() {
setACDimensions();
area_vis.attr("width", ac_width)
.attr("height", ac_height)
.attr("transform", "translate(" + ac_origin_x + "," + ac_origin_y + ")");
redrawAreaGraph();
};
function redrawAreaGraph() {
if(!area_graph_exists) {
initAreaGraph();
} else {
bindAreaData();
}
if(area_graph_exists) {
area_paths.data(area_stack);
area_paths.select("path")
.transition()
.attr("d", function(d) { return area_fn(d.values); });
area_paths.select("text")
.datum(function(d) { return { name: d.name, value: d.values[d.values.length - 1]}; })
.attr("transform", function(d) {
return "translate(" + xx(d.value.year) + "," + yy(d.value.y0 + d.value.y / 2) + ")";
})
.text(function(d) { return d.name; });
area_vis.select("g .x_axis")
.attr("transform", "translate(0," + ac_height + ")")
.call(xAxis);
area_vis.select("g .y_axis").call(yAxis);
}
}
(完整的代码可以在我上面给出的链接的 js 文件中看到)。