【发布时间】:2020-02-19 05:16:48
【问题描述】:
我有一张可以用英文概括的图表:
A -> [B -> C -> D] -> E
B -> A
E -> B
方括号表示一个子图,并在其周围画了一个框。
我在graphViz/dot中实现了如下:
digraph {
rankdir = LR
graph [overlap = true, fontname = Helvetica]
A [shape="box", style="dashed", label="Alab"]
subgraph clusterx {
node [shape="box"]
B [label="Blab"]
C [label="Clab"]
D [label="Dlab"]
B -> C -> D
label = "Subgraph Box Label";
labeljust = "l";
}
E [shape="box", style="dashed", label="Elab"]
A -> B [label = " ", headport="nw", tailport="ne"]
B -> A [label = " ", headport="se", tailport="sw"]
D -> E
E -> B [tailport="s", headport="s"]
}
这以有效的方式呈现,但我想纠正一些视觉问题。
- 我希望
A和子图之间有更多空间,而子图节点之间的空间更小。 - 我希望
E与其他节点在同一垂直对齐上。我希望D -> E边缘是一条平线。 - 我希望
E -> B边缘以更美观的方式弯曲。我希望它从E的's'端口出来,左转90度,继续左转直到到达节点B,然后向上转90度,然后输入's'B的端口以垂直方式。我相信这是因为 graphViz 间隔样条点的方式 - 我想我真正想要做的是将每个中间样条点向下拖动一点,以便边缘的左行部分是平的。
我尝试调整 nodesep 和 ranksep 参数来解决前两个问题,但无法始终如一地理解为什么我所做的更改会产生它们所做的更改。我根本无法解决#3。
此外,我在 R 中使用 diagrammeR 将其呈现为 PDF 和 HTML 文档,因此此处的任何答案都应该与输出格式无关,以防万一。
有什么建议吗?我尝试搜索 graphViz 文档无济于事,我找不到任何表现出这些问题的工作示例。
【问题讨论】:
标签: graphviz diagrammer