d3.js - 树状图显示调整为树状图
d3.js - Dendrogram display adjusted to the tree diagram
我用 d3.js
创建了 d3 dendrograms 来可视化对象之间的层次关系。图表的尺寸和边距用固定的高度和宽度值定义。
var width = 1000,
height = 800,
boxWidth = 150,
boxHeight = 35,
gap = {
width: 50,
height: 12
},
margin = {
top: 16,
right: 16,
bottom: 16,
left: 16
},
svg;
对于一些关系,显示正常,但对于许多关系,它不适合,图表是 'cut',我看不到整个图表。如何动态设置此宽度和高度属性并调整到图形的大小?
正确显示的示例:Codepen
显示不正确的示例:Codepen
让我们来解决这个问题,您需要先了解内容的边界框,然后再调整 svg 大小。为此,在这种特殊情况下,您只需查看框或节点即可忽略链接。
考虑到这一点,您可以在 renderRelationshipGraph
函数中填充 Nodes
和 return 计算值后执行以下操作:
function renderRelationshipGraph(data) {
// ...
var bbox = Nodes.reduce(function (max, d)
{
var w = d.x + boxWidth;
var h = d.y + boxHeight;
if (w > max[0]) {max[0] = w}
if (h > max[1]) {max[1] = h}
return max
}, [0,0])
return bbox
}
然后在主要代码更改中使用它来更新 svg 的高度和宽度:
svg = d3.select("#tree").append("svg")
.attr("width", width)
.attr("height", height);
svg.append("g");
var bbox = renderRelationshipGraph(data);
svg.attr("width", bbox[0])
.attr("height", bbox[1]);
您可以添加过渡并限制高度,但这会达到您要求的效果,最终结果会非常大。
我用 d3.js
创建了 d3 dendrograms 来可视化对象之间的层次关系。图表的尺寸和边距用固定的高度和宽度值定义。
var width = 1000,
height = 800,
boxWidth = 150,
boxHeight = 35,
gap = {
width: 50,
height: 12
},
margin = {
top: 16,
right: 16,
bottom: 16,
left: 16
},
svg;
对于一些关系,显示正常,但对于许多关系,它不适合,图表是 'cut',我看不到整个图表。如何动态设置此宽度和高度属性并调整到图形的大小?
正确显示的示例:Codepen
显示不正确的示例:Codepen
让我们来解决这个问题,您需要先了解内容的边界框,然后再调整 svg 大小。为此,在这种特殊情况下,您只需查看框或节点即可忽略链接。
考虑到这一点,您可以在 renderRelationshipGraph
函数中填充 Nodes
和 return 计算值后执行以下操作:
function renderRelationshipGraph(data) {
// ...
var bbox = Nodes.reduce(function (max, d)
{
var w = d.x + boxWidth;
var h = d.y + boxHeight;
if (w > max[0]) {max[0] = w}
if (h > max[1]) {max[1] = h}
return max
}, [0,0])
return bbox
}
然后在主要代码更改中使用它来更新 svg 的高度和宽度:
svg = d3.select("#tree").append("svg")
.attr("width", width)
.attr("height", height);
svg.append("g");
var bbox = renderRelationshipGraph(data);
svg.attr("width", bbox[0])
.attr("height", bbox[1]);
您可以添加过渡并限制高度,但这会达到您要求的效果,最终结果会非常大。