我使用的是D3树布局,例如:http://mbostock.github.com/d3/talk/20111018/tree.html
我已经根据我的需求对其进行了修改,并且遇到了一个问题。该示例也存在相同的问题,如果您打开了太多节点,那么它们就会变得紧凑,并使读取和交互变得困难。我想在重新调整舞台尺寸时定义节点之间的最小垂直空间,以允许这样的间距。
我尝试修改分离算法使其工作:
.separation(function (a, b) {
return (a.parent == b.parent ? 1 : 2) / a.depth;
})
这不起作用。我还尝试计算哪个深度有最多的孩子,然后告诉舞台的高度是儿童*空间之间的节点
。这让我更接近了,但仍然不准确。
depthCounts = [];
nodes.forEach(function(d, i) {
d.y = d.depth * 180;
if(!depthCounts[d.depth])
depthCounts[d.depth] = 0;
if(d.children)
{
depthCounts[d.depth] += d.children.length;
}
});
tree_resize(largest_depth(depthCounts) * spaceBetweenNodes);
我还尝试在下面的方法中更改节点的x
值,它计算y
分隔,但没有雪茄。我也会发布该更改,但我将其从我的代码中删除。
nodes.forEach(function(d, i) {
d.y = d.depth * 180;
});
如果您可以建议一种方法或知道一种方法,我可以在节点之间垂直完成最小间距,请发布。我将不胜感激。我可能错过了一些非常简单的东西。
我知道我不应该回应其他答案,但我没有足够的声誉来添加评论。
不管怎样,我只是想为使用最新d3.v3.js文件的人更新这个。(我假设这是因为新版本,因为接受答案中的行引用对我来说是错误的。)
d3.布局。您正在编辑的树函数位于第6236行和第6345行之间。d3_layout_treeVisitAfter从第6318行开始。层次结构变量在第6237行声明。关于树的位。elementsize仍然有效-我把它放在第6343行。
最后(我假设这是一个错误):当您创建树时,将尺寸放在方括号内,就像您通常使用“size”一样。所以:
var tree = d3.layout.tree()
.size(null)
.elementsize([50, 240]);
我在谷歌群组用户的帮助下解决了这个问题。我找不到帖子。解决方案要求你在一个地方修改D3.js,这是不推荐的,但这是我唯一能找到的解决这个问题的方法。
从第< code>5724行或该方法开始:< code > D3 _ layout _ treeVisitAfter
改变:
d3_layout_treeVisitAfter(root, function(node) {
node.x = (node.x - x0) / (x1 - x0) * size[0];
node.y = node.depth / y1 * size[1];
delete node._tree;
});
到:
d3_layout_treeVisitAfter(root, function(node) {
// make sure size is null, we will make it null when we create the tree
if(size === undefined || size == null)
{
node.x = (node.x - x0) * elementsize[0];
node.y = node.depth * elementsize[1];
}
else
{
node.x = (node.x - x0) / (x1 - x0) * size[0];
node.y = node.depth / y1 * size[1];
}
delete node._tree;
});
下面添加一个名为:elementsize
的新变量,并将其默认为 [ 1, 1 ]
到第 5731 行
var hierarchy = d3.layout.hierarchy().sort(null).value(null)
, separation = d3_layout_treeSeparation
, elementsize = [ 1, 1 ] // Right here
, size = [ 1, 1 ];
在它下面有一个名为< code > tree . size = function(x)的方法。在该定义下增加以下内容:
tree.elementsize = function(x) {
if (!arguments.length) return elementsize;
elementsize = x;
return tree;
};
最后,当你创建树的时候,你可以像这样改变元素大小
var tree = d3.layout.tree()
.size(null)
.elementsize(50, 240);
截至2016年,我能够实现这一目标,只需
tree.nodeSize([height, width])
https://github.com/mbostock/d3/wiki/Tree-Layout#nodeSize
API参考有点差,但是它非常简单。请确保在< code>tree.size([height,width])之后使用它,否则您将再次覆盖您的值。
更多参考:D3使用NodeSize在节点之间进行树布局分离
提示 页面模板源码免费开源,在uni-app的插件市场uView的 示例项目 中,在右上角选择"使用 HBuilderX 导入示例项目" 或者 "下载示例项目ZIP", 在HX运行项目即可看到和使用模板。 uView为用户制作了两个类型的分类页面,分别是左右联动,左右分开的场景。 这两个页面,为布局而非组件形式,可以根据自己的需求修改页面的结构,逻辑,样式。 左右联动 该场景左右可以联动,右边所有
我对Vert.x非常陌生,就像几天前一样。我来自一个JAX式的,安逸的世界。我可能大错特错,请指正。 我的问题是:如何使顶点公开自己的REST接口(子路由器),以及如何将其子路由器注册到应用程序的主路由器中? 我尝试过类似的东西,但是当我请求/产品/所有:( } }
我尝试按如下方式执行二叉树的垂直顺序遍历:1)找出每个节点与根节点之间的最小和最大水平距离2)创建一个hashmap,将水平距离映射到相应的节点(Map) 然而,我得到了不想要的输出,我认为在实现中有一些错误,因为算法对我来说似乎是正确的。 以下是完整的代码: 输出:{-1=[99999],0=[99999,12],-2=[99999],1=[99999],2=[99999]}那么我的apProc
我有一个工作的D3树,我正试图转换成角。是v3树。 组件代码为: 如有任何帮助,将不胜感激 干杯KH
我正在尝试打印一棵树,问题是我找不到任何其他方法,只能像这样打印它: 但有没有办法像这样打印它: 这是我的代码: 在这里,我为树节点创建了一个类,我知道代码很糟糕,但我仍然是初学者,我将在未来改进它。我使用列表来存储子列表和链表来对兄弟姐妹进行排序,因为它稍后在尝试打印实际树时会很有用。 我打印树的方式是这样的:打印当前节点,如果当前节点有任何子节点,则转到子节点,如果没有,则转到当前节点的父节点
垂直对齐 1. grid-template-areas 属性值保持换行,并使用空格保持每列垂直对齐。 例如: .foo { grid-template-areas: "header header" "nav main" "footer ...."; } 2. grid、grid-template