使用graphviz创建图形的最佳方法

使用graphviz创建图形的最佳方法,graphviz,dot,Graphviz,Dot,这是我在这里的第一篇文章,我不确定它是否属于正确的子 假设我们在某些数据结构中定义了以下工作流: 使用以下信息绘制此有向图的最佳方式是什么: 有两种类型的节点(矩形最多1 in/1 out,菱形最多2 in/2 out) 给出了初始节点和最终节点 节点(边)之间的链接是已知的 我使用此信息生成的代码给出了以下图表: 我错过了什么 Edit1:添加源代码 digraph flow_view { rankdir = TB; graph[fontsize="22"]; node [sha

这是我在这里的第一篇文章,我不确定它是否属于正确的子

假设我们在某些数据结构中定义了以下工作流:

使用以下信息绘制此有向图的最佳方式是什么:

  • 有两种类型的节点(矩形最多1 in/1 out,菱形最多2 in/2 out)
  • 给出了初始节点和最终节点
  • 节点(边)之间的链接是已知的

我使用此信息生成的代码给出了以下图表:

我错过了什么

Edit1:添加源代码

digraph flow_view {
rankdir = TB;  
graph[fontsize="22"];
node [shape="box", fontsize="11.0", style="filled", fillcolor="peachpuff", fontcolor="black"];
 "Case created" [fillcolor="seagreen1"];
 "Case created" -> "Case assigned" ; 
 "Case assigned" -> "Case review and initial analysis" ; 
 "Case review and initial analysis" -> "Further action required?" ; 
 "Close case" [fillcolor="lightpink"];
 "Further action required?" -> "Close case"[label="No", fontsize="8.5"]
 "Further action required?" [shape="diamond", fillcolor="peachpuff"] ; 
 "Further action required?" -> "Further work"[label="Yes", fontsize="8.5"]
 "Further action required?" [shape="diamond", fillcolor="peachpuff"] ; 
 "Close case" [fillcolor="lightpink"];
 "Satisfactory explanations?" -> "Close case"[label="Yes", fontsize="8.5"]
 "Satisfactory explanations?" [shape="diamond", fillcolor="peachpuff"] ; 
 "Case escalated / reassigned" -> "Further action required?" ; 
 "Satisfactory explanations?" -> "Case escalated / reassigned"[label="No", fontsize="8.5"]
 "Satisfactory explanations?" [shape="diamond", fillcolor="peachpuff"] ; 
 "Further work" -> "Satisfactory explanations?" ; 
}

我设法调整它以匹配您的示例图像,但不确定它的可伸缩性如何。 我大致做了以下几点:

  • 结构化代码(仅为了可读性):
    • 基于形状的两组中的第一个节点定义
    • 边定义秒
    • 按照图形顺序的语法中的有序连接
    • 添加了
      fontsize
      定义作为全局边缘属性,而不是每个连接
  • 添加了一些格式调整(可选)
    • 添加了一种更现代的字体(Arial)
    • 在导出为png时使背景透明
  • 用于某些节点(例如,
    “进一步工作”:s
    )。这表示边缘应连接到节点的哪一侧(north,east,south,west)
  • 添加到某些连接。这表示在订购节点时不应考虑该连接
  • 为两组节点添加了
  • 添加以缩短/拉直某些边

我设法调整它以匹配您的示例图像,但不确定它的可伸缩性。 我大致做了以下几点:

  • 结构化代码(仅为了可读性):
    • 基于形状的两组中的第一个节点定义
    • 边定义秒
    • 按照图形顺序的语法中的有序连接
    • 添加了
      fontsize
      定义作为全局边缘属性,而不是每个连接
  • 添加了一些格式调整(可选)
    • 添加了一种更现代的字体(Arial)
    • 在导出为png时使背景透明
  • 用于某些节点(例如,
    “进一步工作”:s
    )。这表示边缘应连接到节点的哪一侧(north,east,south,west)
  • 添加到某些连接。这表示在订购节点时不应考虑该连接
  • 为两组节点添加了
  • 添加以缩短/拉直某些边

对于您来说,预期图形和实际图形之间的差异到底是什么?颜色?图形样式?角度?位置?字体和换行符?还显示您迄今为止尝试的点源代码。主要是位置:我尝试创建一个集群,并使用rank=same,添加不可见的节点,但很快其他节点就无法缩放元数据(即,如果我们添加一些节点,我们就不能重用完全相同的代码生成算法)这是我得到的最好的代码,但它远不是最优的,它是反复试验,没有任何逻辑支持。为什么图形必须完全相同?我没有很好的经验告诉graphviz如何准确地呈现任何图形。对于一般数据,任何特定的黑客帮助一个实例都会伤害另一个实例。布局由graphviz设计的ut在我看来也更符合逻辑,因为如果没有必要,没有边缘向上流动。你可以使用
样条线=正交
来美化它。或者尝试不同的工具,我有很好的经验。它只是在布局上看起来更简单..样条线=正交在这方面没有多大帮助预期和ac之间有什么区别实际图形正是您的问题?颜色?图形样式?角度?位置?字体和换行符?还显示了您迄今为止尝试的点源代码。主要是位置:我尝试创建一个集群并使用rank=same,添加了不可见的节点,但对于其他元数据,它很快变得不可缩放(也就是说,如果我们添加一些节点,我们就不能重用完全相同的代码生成算法)这是我得到的最好的代码,但它远不是最优的,它是反复试验,没有任何逻辑支持。为什么图形必须完全相同?我没有很好的经验告诉graphviz如何准确地呈现任何图形。对于一般数据,任何特定的黑客帮助一个实例都会伤害另一个实例。布局由graphviz设计的ut在我看来也更符合逻辑,因为如果不需要的话,没有边缘向上流动。你可以使用
spline=ortho
来美化它。或者尝试不同的工具,我有很好的使用经验。这种布局看起来更简单。spline=ortho在这里没有多大帮助
digraph flow_view {
rankdir = TB;
splines=splines
graph[fontsize="22", bgcolor="transparent", fontname="Arial"];
//Node definition
node [shape="box", fontsize="11.0", style="filled", fillcolor="peachpuff", fontcolor="black", fontname="Arial"];
    "Case created"               [ fillcolor="seagreen1"];
    "Close case"                 [ fillcolor="lightpink"];
    "Case assigned"
    "Case review and initial analysis"
    "Further work"
    "Case escalated / reassigned"
 node [shape="diamond"];
    "Further action required?"  
    "Satisfactory explanations?"
// Chart definition
edge [fontsize="8.5", fontname="Arial"]
    "Case created"                     -> "Case assigned" ;
    "Case assigned"                    -> "Case review and initial analysis" ;
    "Case review and initial analysis" -> "Further action required?" ;
    "Further action required?":w       -> "Close case":e[label="No", weight=100000, constraint=false]
    "Further action required?":s       -> "Further work":n[label="Yes", weight=10]
    "Further work":s                   -> "Satisfactory explanations?":n [weight=10] ;
    "Satisfactory explanations?":w     -> "Close case":s[label="Yes"]
    "Satisfactory explanations?"       -> "Case escalated / reassigned"[label="No"]
    "Case escalated / reassigned":n    -> "Further action required?":e
// Tweaks
{rank=same "Further action required?";"Close case"}
{rank=same "Satisfactory explanations?";"Case escalated / reassigned"}
}