如何优化graphviz中的布局,以删除不必要的边交点(交叉点)?

如何优化graphviz中的布局,以删除不必要的边交点(交叉点)?,graph,graphviz,intersection,edges,Graph,Graphviz,Intersection,Edges,我正在准备DB关系的AutoMATC文档。工具是graphviz。我遇到的问题是,输出图像上节点的位置不合适,并且存在许多不必要的边相交。 是否有任何方法可以对图形进行优化,从而使结果具有最小边相交(交叉) 有向图结构{ 节点[shape=Mrecord]; 重叠=“假”; 样条曲线=“真”; 布局=sfdp; rankdir=LR; ttype[label=“::::ttype::| id |表|名称|类型|名称|概要”]; tevents[label=“::::tevents:::| id

我正在准备DB关系的AutoMATC文档。工具是graphviz。我遇到的问题是,输出图像上节点的位置不合适,并且存在许多不必要的边相交。 是否有任何方法可以对图形进行优化,从而使结果具有最小边相交(交叉)

有向图结构{
节点[shape=Mrecord];
重叠=“假”;
样条曲线=“真”;
布局=sfdp;
rankdir=LR;
ttype[label=“::::ttype::| id |表|名称|类型|名称|概要”];
tevents[label=“::::tevents:::| id | id | tcase | id | t类型|概要|过期|打开”];
toperationlog[label=“::::toperationlog:::| id | executiondate | executiontime | query | id_tusers”];
t文档[label=“::::t文档:::| id | id | tcase | id | ttype | path | creationdate”];
tcustomers_cases[标签=:::tcustomers_cases::::| id_tcustomers | id_tcases“];
tcases[label=“::::tcases:::| id | creationdate | incomingdate | clousuredate |大纲|注释| id | ttype | id | tusers”];
tusers[label=“:::::tusers::| id |用户名|密码| firstname | lastname | role|u id”];
t客户[label=“::::t客户:::| id | firstname | lastname | email | phone | mobile | address”];
tevents:id_tcases->tcases:id[arrowhead=“none”];
t事件:id_t类型->t类型:id[arrowhead=“none”];
toperationlog:id_tusers->tusers:id[arrowhead=“none”];
t文档:id_tcases->tcases:id[arrowhead=“none”];
t文档:id_t类型->t类型:id[arrowhead=“none”];
t客户案例:id\u t客户->t客户:id[arrowhead=“none”];
t客户案例:id\u tcases->tcases:id[arrowhead=“none”];
tcases:id_ttype->ttype:id[arrowhead=“none”];
tcases:id_tusers->tusers:id[arrowhead=“none”];
}

设置为true将导致再次运行交叉最小化,这将通过减少边交叉的数量来改善图形的外观。

是否有这样做的算法?
    digraph structs {
      node [shape=Mrecord];
      overlap="false";
      splines="true";
      layout=sfdp;
      rankdir=LR;

      ttype[label="::: ttype :::|<id>id|<table_name>table_name|<type_name>type_name|<synopsis>synopsis"];
      tevents[label="::: tevents :::|<id>id|<id_tcases>id_tcases|<id_ttype>id_ttype|<synopsis>synopsis|<expiredate>expiredate|<open>open"];
      toperationlog[label="::: toperationlog :::|<id>id|<executiondate>executiondate|<executiontime>executiontime|<query>query|<id_tusers>id_tusers"];
      tdocuments[label="::: tdocuments :::|<id>id|<id_tcases>id_tcases|<id_ttype>id_ttype|<path>path|<creationdate>creationdate"];
      tcustomers_cases[label="::: tcustomers_cases :::|<id_tcustomers>id_tcustomers|<id_tcases>id_tcases"];
      tcases[label="::: tcases :::|<id>id|<creationdate>creationdate|<incomingdate>incomingdate|<clousuredate>clousuredate|<synopsis>synopsis|<notes>notes|<id_ttype>id_ttype|<id_tusers>id_tusers"];
      tusers[label="::: tusers :::|<id>id|<username>username|<password>password|<firstname>firstname|<lastname>lastname|<role_id>role_id"];
      tcustomers[label="::: tcustomers :::|<id>id|<firstname>firstname|<lastname>lastname|<email>email|<phone>phone|<mobile>mobile|<address>address"];

      tevents:id_tcases -> tcases:id [arrowhead="none"];
      tevents:id_ttype -> ttype:id [arrowhead="none"];
      toperationlog:id_tusers -> tusers:id [arrowhead="none"];
      tdocuments:id_tcases -> tcases:id [arrowhead="none"];
      tdocuments:id_ttype -> ttype:id [arrowhead="none"];
      tcustomers_cases:id_tcustomers -> tcustomers:id [arrowhead="none"];
      tcustomers_cases:id_tcases -> tcases:id [arrowhead="none"];
      tcases:id_ttype -> ttype:id [arrowhead="none"];
      tcases:id_tusers -> tusers:id [arrowhead="none"];
    }