如何用Graphviz生成无重叠规则树形图?现有方案存问题
Graphviz树形图排版优化求助
我尝试用Graphviz生成目标树形图:
当前实现已接近需求,效果如下:
但存在以下问题:
- 子树不应重叠,但PP子树与(.)子树发生重叠;
- 子树布局应规整,多子节点需分布在父节点左右,但PP子树未满足该要求。
使用subgraph clusters解决重叠问题后,又出现新问题:边不直,且无法在隐藏边框的同时避免大量留白,效果如下:
特此询问是否有更优的树形排版方法,以下是Python生成的Graphviz代码:
graph { subgraph 0 { subgraph 1 { 0 [label=ROOT group=0 shape=plain] subgraph 8 { 1 [label=S group=1 shape=plain] subgraph 11 { 2 [label=NP group=2 shape=plain] subgraph 15 { 3 [label=PRP group=3 shape=plain] 4 [label=I shape=plain] 3 -- 4 4 [label=I group=3] } 2 -- 3 3 [label=PRP group=2] } subgraph 24 { 5 [label=VP group=5 shape=plain] subgraph 28 { 6 [label=VBD group=6 shape=plain] 7 [label=solved shape=plain] 6 -- 7 7 [label=solved group=6] } subgraph 41 { 8 [label=NP group=8 shape=plain] subgraph 45 { 9 [label=DT group=9 shape=plain] 10 [label=the shape=plain] 9 -- 10 10 [label=the group=9] } subgraph 63 { 11 [label=NN group=11 shape=plain] 12 [label=problem shape=plain] 11 -- 12 12 [label=problem group=11] } 8 -- 9 8 -- 11 } subgraph 77 { 13 [label=PP group=13 shape=plain] subgraph 81 { 14 [label=IN group=14 shape=plain] 15 [label=on shape=plain] 14 -- 15 15 [label=on group=14] } subgraph 89 { 16 [label=NP group=16 shape=plain] subgraph 93 { 17 [label=DT group=17 shape=plain] 18 [label=the shape=plain] 17 -- 18 18 [label=the group=17] } subgraph 102 { 19 [label=NN group=19 shape=plain] 20 [label=bus shape=plain] 19 -- 20 20 [label=bus group=19] } 16 -- 17 16 -- 19 } 13 -- 14 13 -- 16 } 5 -- 6 5 -- 8 5 -- 13 } subgraph 114 { 21 [label="." group=21 shape=plain] 22 [label="." shape=plain] 21 -- 22 22 [label="." group=21] } 1 -- 2 1 -- 5 1 -- 21 } 0 -- 1 1 [label=S group=0] } } ranksep=0.2 }
内容的提问来源于stack exchange,提问作者mginn
相关产品推荐
相关产品推荐

