First Steps with GraphViz
I found graphviz frustrating at times but on the whole it draws clean, symmetrical graphs far beyond anything else I can manage, even if I do use a mouse or tablet. Since I’m not able to use a pointing device on a regular basis, and I’m marking up my presentations in text also, it turned out to be a really good fit. I thought I’d share how I got on with it and some of my own graphs – as much to remind me next time conference season comes around as anything.
Dependencies
I’m on Ubuntu, so there’s a graphviz package which I installed. There’s a couple of different graphviz dialects but I found the dot language was approachable – see the wikipedia page for a quick overview.
Generating Diagrams
The command I use for generating diagrams from the command line looks something like this:
dot step1.dot -Tps -o step1.ps
You can output to all sorts of formats, such as PNG. The PostScript format plays well with my LaTeX content.
Example Diagrams
To give you an idea of the results, I thought I’d pull a couple of diagrams from a talk I gave recently, called “Understanding Distributed Source Control”. The two graphs show the difference between a centralised pattern, and the ability to move changes between any two repos. I’ll show both the code and the images:
graph 1
graph distributed {
graph [nodesep=0.5]
node [fontname="Helvetica", color="Lavender", style="filled"]
edge [color="Gray"]
repo [label="repo"]
wc1 [label="repo"]
wc2 [label="repo"]
wc3 [label="repo"]
wc4 [label="repo"]
repo -- wc1
repo -- wc2
repo -- wc3
repo -- wc4
}
graph 2
graph distributed {
graph [nodesep=0.5]
node [fontname="Helvetica", color="Lavender", style="filled"]
edge [color="Gray"]
repo [label="repo"]
wc1 [label="repo"]
wc2 [label="repo"]
wc3 [label="repo"]
wc4 [label="repo"]
repo -- wc1
repo -- wc2
repo -- wc3
repo -- wc4
wc1 -- wc2
wc1 -- wc3
wc1 -- wc4
wc2 -- wc3
wc2 -- wc4
wc3 -- wc4
}
As you can see, there’s no control over placement in these examples. I’ve simply added nodes and connected them, and the rest is done automagically. I quite like the effect of what happens when you link all the distributed nodes together, it looks a bit chaotic – but working with DVCSes can be a little bit like that :)
I’m using this approach for diagrams both for slides and for the book I’m working on, so I intend to blog a few more examples of how I’m using graphviz.
Thanks for the basic and clear examples. I am merely a retired maths prof, who only knows how to program in Octave/Matlab.==> herz-fischler.ca/matlab
However I am doing the genealogy and history of our ancestors and I heard about graphviz from the maths genealogy project. So today I started learning graphviz. Yours examples were the clearest. So thanks
Roger H-F