How to optimize the layout in the graph to remove unnecessary intersections of edges?

I am preparing automatic documentation on relations with the database. The tool is graphviz. The problem is that the placement of the nodes in the output image is not optical, and there are many unnecessary intersections of the edges. Is there any method for optimizing the chart, so the result will have cross-cross-intersection (intersection)?

    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"];
    }
+3
source share
1 answer

Setting remincross to true will result in cross-minimization to run a second time, which should improve the look of the graph by reducing the number of transverse crosses.

+3
source

Source: https://habr.com/ru/post/1789354/


All Articles