gpt4 book ai didi

graphviz - 在 Graphviz 中创建直边

转载 作者:行者123 更新时间:2023-12-02 12:21:36 28 4
gpt4 key购买 nike

我想使用 Graphviz 创建流程图(类似于 Visio)。这是一个有向图示例。

digraph start_up {
node [style = rounded];
node [shape = rect] start end;
node [style = ""];
node [shape = diamond] "USB\nCommand\nArrived";
start -> "Initialize\nCode";
"Initialize\nCode" -> "USB\nCommand\nArrived";
"USB\nCommand\nArrived" -> "USB\nCommand\nArrived" [label="No" tailport=w headport=n];
"USB\nCommand\nArrived" -> "Has USB 3.0\nInterface Been\nSelected" [label = "Yes"];
"Has USB 3.0\nInterface Been\nSelected" -> end
}

问题是当我在 Graphviz 中渲染此行时,由 "USB\nCommand\nArrived"-> "USB\nCommand\nArrived"[label="No"tailport=w headport=n];看起来很丑。我不介意曲线,但这条线看起来变形了。您可以在此处查看 Graphviz 创建的内容

有没有办法让它看起来更好?

最佳答案

我认为最好通过例子来学习点。只需阅读我的评论,如果有任何不清楚的地方,我会很乐意回答。

作为侧节点:虽然 graphviz 非常适合为大型数据集生成图形,但它对于创建 ER 图、流程图和序列图等内容就不那么出色了。这是可能的,而且相对简单,但是您必须投入大量时间来使某些事情正确进行,这通常是不合理的,因为您可以使用 Wsywig-GUI 建模工具在很短的时间内实现同样的事情。然而,您花在这方面的时间将帮助您学习该语言的语法和属性,当您需要可视化一些大型或复杂的问题时(GUI 建模工具将毫无用处),这确实会派上用场。


digraph start_up {
{
/* fake levels (level0 -> level1) and support nodes
*
* graphviz to charts is what latex is to documents,
* sometimes you'll have to fight it.
* This is typically done by defining levels and connection points that
* don't really have anything to do with your graph, but are used to
* force the graph to appear in a certain way.
*/
node [shape=none, /*label="."*/]; l1a; l2a; l3a; l4a; l5a; l6a;
node [shape=square label="no"]; l20a;
}

{ /* connectiong point for the no arrow above "arrived" */
node [width=0 shape=point label=""];
d1; no;
}

node [style = rounded];
node [shape = rect] start end;
node [style = ""];

node [shape = diamond]; {
node [label="USB\nCommand\nArrived"]; arrived;
node [label="Has USB 3.0\nInterface Been\nSelected"]; selected;
node [label="Initialize\nCode"]; init;
}

start -> init;
/*init -> arrived; */
init -> d1 [arrowhead=none];
d1 -> arrived;

/*
* tricky part:
* since nodes in a digrap go either from top to bottom or left to right, we
* can usually not connect (->) two nodes and have them appear on the same
* level unless the connection is specified within a block that has the
* parameter `rank' set to `same'
*/
l20a->no [arrowhead=none];

{ rank=same; no -> arrived [dir=back arrowtail=none]; }
{ rank=same; l20a -> d1; }

/*arrived -> arrived;*/ /* [label="No" tailport=w headport=n]; */
arrived -> selected [label = "Yes"];
selected -> end


/* just to demonstrate */
l1a-> l2a-> l3a-> l4a-> l5a-> l6a;
}

Solution proposal

关于graphviz - 在 Graphviz 中创建直边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7115870/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com