我有问题生成一个好看的家谱与Javascript。
要求:
- 每个子节点都应该连接到树中的两个父节点,而不是像某些图中那样只连接到一个父节点
- 我喜欢配偶在树上挨着对方(相同的垂直位置)
- 我想把节点按年代纵向组织,这样你就可以一眼看到同一年代出生的人。
- 随着时间的推移,一个人可以有多个配偶,每个人都有孩子
- 父母和孩子可以在树中自由添加,所以不仅仅是“从一个人向上追溯血统”
我尝试过的最接近这个的方法是:
1.* * Cytoscape JS,Dagre作为布局引擎,曲线样式:滑行边缘已启用。**
(随机数据图表。实线为亲子关系,虚线为配偶)
问题是配偶之间并不一致。Dagre历来支持将“rank”作为节点的参数,这意味着您可以强制某些节点处于特定的高度(如果您愿意,可以将其视为“一代”)。不幸的是,它是doesn't work any longer和responsible developer does not work on the project any longer。这将很好地解决我的问题。
其他我尝试过但失败的事情:
1.将匕首降级到支持等级的旧版本?
还没有得到等级工作与任何版本的匕首。
- D3与dagre-d3
和上面一样的问题,因为dagre-d3是dagre的修改版本,这意味着它不支持世代排名。 - yFiles family tree演示看起来很棒,但是商业的。成本为我的目的(希望任何人建立自己的家谱)是26. 000美元(!?!)获取单个开发人员许可证。显然不能接受。
- 我的问题**
是否有可能像我上面描述的那样垂直对齐我的cytoscape/dagre图中的节点?
如果没有,我愿意尝试其他库和其他布局算法。
我正在寻找一个与yFiles解决方案类似的工作示例,但使用的是开源工具。
2条答案
按热度按时间pvcm50d11#
基于JavaScript约束的布局,使用D3.js和其他基于Web的图形库进行高质量的图形可视化和探索。
它允许你像我在下面的例子中对y维所做的那样specify x and y dimensional constraints。我自己没有用过,但看起来真的很适合你的要求。它与CytoScape一起工作,因此您可以在已经完成的基础上进行构建...
因为你不是在处理一个严格的层次结构(例如你不是从一个后代开始,一路向上),一种方法是使用一个D3 Force Directed Graph和一个节点来表示每个家庭成员。与线性层次结构相比,这将提供更大的灵活性。
然后,通过将节点约束到y轴上的固定点,就可以实现您要查找的分代布局。
Here is a proof of concept:
assignGeneration
基于链接的子节点、伙伴节点和父节点计算的节点生成(或y坐标)希望这里有足够的内容让你决定这是否是一个可行的方法。在父母和孩子之间建立垂直/水平的联系应该是相当简单的,但可能需要一些实验。
可能需要对
simulation
进行调整(取决于数据量和节点关系等)-同样,需要进行一些实验以生成最佳布局。更多关于可用的不同力量的信息在这里。yqyhoc1h2#
2023年更新:我实际上放弃了这种方法,最终选择了Graphviz。这是棘手的工作,但它的工作,这是我最终得到的。