对齐Graphviz有向图中的节点
我有以下Graphviz代码:对齐Graphviz有向图中的节点,graphviz,Graphviz,我有以下Graphviz代码: digraph { Technique [shape = box]; Path [shape = box]; KnowledgeObservation [shape = box, label = "Knowledge\nObservation"]; ManagementIntervention [shape = box, label = "Management\nIntervention"]; ResultsModification [shap
digraph {
Technique [shape = box];
Path [shape = box];
KnowledgeObservation [shape = box, label = "Knowledge\nObservation"];
ManagementIntervention [shape = box, label = "Management\nIntervention"];
ResultsModification [shape = box, label = "Results\nModification"];
SharedCode [label = "Shared Code"];
MediatedRelationship [label = "Mediated Relationship"];
Art -> Technique;
Therapy -> Path;
{Technique Path} -> KnowledgeObservation -> ManagementIntervention -> ResultsModification;
{MediatedRelationship SharedCode} -> {KnowledgeObservation ResultsModification}
subgraph {
rank = same
Technique -> Path [dir = none]
}
subgraph {
rank = same
SharedCode
ManagementIntervention
MediatedRelationship
}
}
它当前生成以下输出:
我如何将“管理干预”与“知识观察”和“结果修改”垂直对齐
“共享代码”应移至“管理干预”的左侧
“中介关系”应移到“管理干预”的右边
“共享代码”、“管理干预”和“中介关系”应保持水平对齐
我如何才能做到这一点?我如何将“管理干预”与“知识观察”和“结果修改”垂直对齐
这可以通过增加边缘的宽度来实现。重量较高的边缘比重量较低的边缘更直、更短
“中介关系”应移到“管理干预”的右边
您可以通过定义节点的顺序来控制这一点。如果您在“共享代码”之前定义“管理干预”,则将首先绘制它(MI),即。e、 ,位于SI的左侧
“共享代码”、“管理干预”和“中介关系”应保持水平对齐
使用=same
子图属性,您做得很对。虽然我会把子图放在节点定义的时刻。这将缩短源大小,并将秩规范限制在定义节点的位置,这有利于可读性(所有内容都在一个位置声明)
您修改的示例:
digraph {
Technique [shape = box];
Path [shape = box];
KnowledgeObservation [shape = box, label = "Knowledge\nObservation"];
ResultsModification [shape = box, label = "Results\nModification"];
subgraph {
rank=same
ManagementIntervention [shape = box, label = "Management\nIntervention"];
MediatedRelationship [label = "Mediated Relationship"];
SharedCode [label = "Shared Code"];
}
Art -> Technique;
Therapy -> Path;
{Technique Path} -> KnowledgeObservation
KnowledgeObservation -> ManagementIntervention -> ResultsModification [weight=3]
{MediatedRelationship SharedCode} -> {KnowledgeObservation ResultsModification}
subgraph {
rank = same
Technique -> Path [dir = none]
}
}
结果:
这可以在没有子图的情况下实现;最重要的修改是线路
{ rank = same; SharedCode -> ManagementIntervention -> MediatedRelationship[ style = invis ] }
这不仅使三个节点保持在正确的级别上,而且保持在所需的顺序内
总之,这里的代码
digraph
{
// node definition
Art Therapy;
Technique[ shape = box ];
Path[ shape = box ];
KnowledgeObservation[ shape = box, label = "Knowledge\nObservation" ];
ManagementIntervention[ shape = box, label = "Management\nIntervention" ];
ResultsModification[ shape = box, label = "Results\nModification" ];
SharedCode[ label = "Shared Code" ];
MediatedRelationship[ label = "Mediated Relationship" ];
// edges
Art -> Technique;
Therapy -> Path;
{ rank = same; Technique -> Path [dir = none] }
{ Technique Path} -> KnowledgeObservation -> ManagementIntervention -> ResultsModification;
{ rank = same; SharedCode -> ManagementIntervention -> MediatedRelationship[ style = invis ] }
{ MediatedRelationship SharedCode } -> { KnowledgeObservation ResultsModification }
}
给你
据我所知,这正是你想要的
我仍然建议用这三行代码替换最后一行代码
KnowledgeObservation -> { SharedCode MediatedRelationship }[ dir = back ];
SharedCode -> ResultsModification;
MediatedRelationship -> ResultsModification;
原因是,一旦图形变得更复杂,graphviz
将识别并维护层次关系,而不是以令人惊讶的方式解释含糊不清的指令