Dear Lazyfedi, can anyone recommend a software tool for hand-directed graph layout?
-
Dear Lazyfedi, can anyone recommend a software tool for hand-directed graph layout?
If I have a graph (say, of a finite state machine or something), I can write it in Graphviz DOT format and feed it to xdot, which will do a complete job of layout: decide where the nodes go, figure out some nice curved paths for the edges so they don't go through other nodes or cross over too often.
But if it doesn't do a good enough job, I don't know of any way to slightly tweak its output. As far as I know there's no way I can overrule its decisions about where to put the vertices, but still have it do the rest of the job for me like drawing all the edges. If I'm not 100% happy with its own choices, I have to do the whole thing myself instead.
Anyone know of a good interactive tool that will let me drag the vertices around, and automatically move the edges with them?
@simontatham pretty sure there's a way to run graphiz that just adds the vertex location information to the dot file, and you can modify those by hand, and then generate the image.. I don't remember how.. try -Tdot maybe? https://graphviz.org/docs/outputs/canon/
-
Dear Lazyfedi, can anyone recommend a software tool for hand-directed graph layout?
If I have a graph (say, of a finite state machine or something), I can write it in Graphviz DOT format and feed it to xdot, which will do a complete job of layout: decide where the nodes go, figure out some nice curved paths for the edges so they don't go through other nodes or cross over too often.
But if it doesn't do a good enough job, I don't know of any way to slightly tweak its output. As far as I know there's no way I can overrule its decisions about where to put the vertices, but still have it do the rest of the job for me like drawing all the edges. If I'm not 100% happy with its own choices, I have to do the whole thing myself instead.
Anyone know of a good interactive tool that will let me drag the vertices around, and automatically move the edges with them?
@simontatham how complex of a graph, and is the interactive portion a hard requirement? I'm slightly biased towards TiKZ, as it lets me define nodes, edges, and their attributes declaratively. It's not exactly interactive, but if you have a decent LaTeX editor then at least you can see the result of your graph declaration quickly, and I find that it minimizes the amount of tinkering I need to do while constructing charts. There are also markdown-targeted libraries like Mermaid that claim to do the same. I don't particularly like them, but I'd be negligent if I didn't at least mention them.
For truly interactive tools you're probably going to need to dip into commercial solutions. Visio is the classic offering for Microsoft systems. OSX's equivalent is OmniGraffle. And the online equivalent is Lucidchart.
-
Dear Lazyfedi, can anyone recommend a software tool for hand-directed graph layout?
If I have a graph (say, of a finite state machine or something), I can write it in Graphviz DOT format and feed it to xdot, which will do a complete job of layout: decide where the nodes go, figure out some nice curved paths for the edges so they don't go through other nodes or cross over too often.
But if it doesn't do a good enough job, I don't know of any way to slightly tweak its output. As far as I know there's no way I can overrule its decisions about where to put the vertices, but still have it do the rest of the job for me like drawing all the edges. If I'm not 100% happy with its own choices, I have to do the whole thing myself instead.
Anyone know of a good interactive tool that will let me drag the vertices around, and automatically move the edges with them?
@simontatham perhaps not exactly the answer to your question, but spytial[https://github.com/sidprasad/spytial] allows you to specify layout constraints that are dispatched to an smt solver and generates diagrams that obey those layout constraints. Probably a bit more work on your side as you’d have to specify what constraints you want, but it’s a pretty low effort tool for what it achieves. It also allows you to drag stuff around and restructures the diagram to ensure it maintains the constraints. I’ve personally not used it for anything but small examples and demos, but it looks promising!
-
@simontatham how complex of a graph, and is the interactive portion a hard requirement? I'm slightly biased towards TiKZ, as it lets me define nodes, edges, and their attributes declaratively. It's not exactly interactive, but if you have a decent LaTeX editor then at least you can see the result of your graph declaration quickly, and I find that it minimizes the amount of tinkering I need to do while constructing charts. There are also markdown-targeted libraries like Mermaid that claim to do the same. I don't particularly like them, but I'd be negligent if I didn't at least mention them.
For truly interactive tools you're probably going to need to dip into commercial solutions. Visio is the classic offering for Microsoft systems. OSX's equivalent is OmniGraffle. And the online equivalent is Lucidchart.
@claus TikZ is actually what I'm going to want to end up with, so any other output format will need to be translated into it in the end anyway! But I want to quickly try out a lot of layouts until I find one that's clear, before I hand-code a TikZ representation of it.
The kind of graph size I have in mind is something along these lines:
https://www.chiark.greenend.org.uk/~sgtatham/quasiblog/aperiodic-transducers/#p2-transducer
It won't be that exact graph, but it will be a couple of graphs of that general size and complexity.In particular there will probably be a fundamental symmetry of the graph which I'll want the layout to reveal rather than obscuring. (That's true of this example too, but you can't see it at all in the tangle Graphviz made!)
-
undefined oblomov@sociale.network shared this topic
-
@claus TikZ is actually what I'm going to want to end up with, so any other output format will need to be translated into it in the end anyway! But I want to quickly try out a lot of layouts until I find one that's clear, before I hand-code a TikZ representation of it.
The kind of graph size I have in mind is something along these lines:
https://www.chiark.greenend.org.uk/~sgtatham/quasiblog/aperiodic-transducers/#p2-transducer
It won't be that exact graph, but it will be a couple of graphs of that general size and complexity.In particular there will probably be a fundamental symmetry of the graph which I'll want the layout to reveal rather than obscuring. (That's true of this example too, but you can't see it at all in the tangle Graphviz made!)
@simontatham I see. In that case the least effort approach would likely be Lucidchart. I did a quick check and they offer a 7 day trial, which might be enough to learn the ropes and play around with your diagram.
-
Dear Lazyfedi, can anyone recommend a software tool for hand-directed graph layout?
If I have a graph (say, of a finite state machine or something), I can write it in Graphviz DOT format and feed it to xdot, which will do a complete job of layout: decide where the nodes go, figure out some nice curved paths for the edges so they don't go through other nodes or cross over too often.
But if it doesn't do a good enough job, I don't know of any way to slightly tweak its output. As far as I know there's no way I can overrule its decisions about where to put the vertices, but still have it do the rest of the job for me like drawing all the edges. If I'm not 100% happy with its own choices, I have to do the whole thing myself instead.
Anyone know of a good interactive tool that will let me drag the vertices around, and automatically move the edges with them?
@simontatham there IS some amount of control that the user can exert on how things are placed and arcs are drawn (ranks etc). Depending on your specific needs this may or may not be sufficient
-
@simontatham It's been a while since I used graphviz in depth, but I think you can get it to produce a .dot file of its result which you could then edit and feed back in.
@loopspace @simontatham Yeah, I think this is the easiest way: of you ask for output in dot or xdot format (using -Tdot or -Txdot on the command line), you get position information which you can then tweak.