对齐 Graphviz 有向图中的节点
Align nodes in a Graphviz directed graph
我有以下 Graphviz 代码:
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
}
}
它目前产生以下输出:
如何将 "Management Intervention" 与 "Knowledge Observation" 和 "Results Modification" 垂直对齐?
"Shared Code" 应该移到 "Management Intervention" 的左边。
"Mediated Relationship" 应该移到 "Management Intervention" 的右边。
"Shared Code"、"Management Intervention" 和 "Mediated Relationship" 应保持水平对齐。
我怎样才能做到这一点?
如何将 "Management Intervention" 与 "Knowledge Observation" 和 "Results Modification" 垂直对齐?
这可以通过增加边缘的 weight 来实现。 weight
较高的边比较低的边更直、更短。
"Mediated Relationship"应该移到"Management Intervention"的右边。
您可以通过定义节点的顺序来控制它。如果你定义"Management Intervention" before the "Shared Code",它(MI)将首先绘制,i。即,在 SI 的左侧。
"Shared Code"、"Management Intervention" 和 "Mediated Relationship" 应保持水平对齐。
你做对了,使用了 rank=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
将识别并维护层次关系,而不是以令人惊讶的方式解释模棱两可的指令。
我有以下 Graphviz 代码:
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
}
}
它目前产生以下输出:
如何将 "Management Intervention" 与 "Knowledge Observation" 和 "Results Modification" 垂直对齐?
"Shared Code" 应该移到 "Management Intervention" 的左边。
"Mediated Relationship" 应该移到 "Management Intervention" 的右边。
"Shared Code"、"Management Intervention" 和 "Mediated Relationship" 应保持水平对齐。
我怎样才能做到这一点?
如何将 "Management Intervention" 与 "Knowledge Observation" 和 "Results Modification" 垂直对齐?
这可以通过增加边缘的 weight 来实现。 weight
较高的边比较低的边更直、更短。
"Mediated Relationship"应该移到"Management Intervention"的右边。
您可以通过定义节点的顺序来控制它。如果你定义"Management Intervention" before the "Shared Code",它(MI)将首先绘制,i。即,在 SI 的左侧。
"Shared Code"、"Management Intervention" 和 "Mediated Relationship" 应保持水平对齐。
你做对了,使用了 rank=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
将识别并维护层次关系,而不是以令人惊讶的方式解释模棱两可的指令。