75

I'm looking for alternatives to GraphViz. I've been using GraphViz for more than a decade and it's okay, but the layouts are just not producing publication-quality graphs for me given my input data. Sometimes my data is really big and complex, and sometimes it isn't, but GraphViz never really makes stuff that's beautiful.

What other graph visualization tools are people using? Ideally there's one that uses the GraphViz syntax for input file.

Here for example is an input file I'm playing with:

digraph mdc {    
  size="4,8";    
  "KJ1E:A6:PAN:9E:3A" -> "JUNK-0PAN0-FOO";    
  "KJ1E:A6:PAN:9E:3A" -> "JUNK-0047-FOO";    
  "KJ1E:A6:PAN:9E:3A" -> "JUNK-0048-FOO";    
  "KJ1E:A6:PAN:9E:3A" -> "JUNK-0050-FOO";    
  "KJ1E:A6:PAN:9E:3A" -> "JUNK-0051-FOO";    
  "KJ1E:A6:PAN:9E:3A" -> "JUNK-0052-FOO";    
  "KJ1E:A6:PAN:9E:3A" -> "JUNK-0009-FOO";    
  "KJ16:76:A2:60:6E" -> "JUNK-0413-FOO";    
  "KJ16:76:A2:60:6E" -> "JUNK-0414-FOO";    
  "KJE0:D0:13:14:94" -> "GEORGE42-FRED";    
  "KJE0:D0:13:14:94" -> "MY5-30-FRED";    
  "KJ50:04:EE:6C:F9" -> "PSPAN-036-FRED";    
  "KJ50:04:EE:6C:F9" -> "GEORGE02-FRED";    
  "KJ50:04:EE:6C:F9" -> "GEORGE04-FRED";    
  "KJ1B:B9:9B:D5:BB" -> "JUNK-0047-FOO";    
  "KJ1B:B9:9B:D5:BB" -> "JUNK-0048-FOO";    
  "KJ05:5F:EF:14:PAN" -> "thPAN-PAN-FRED";    
  "KJ05:5F:EF:14:PAN" -> "cn20-PAN-FRED";    
  "KJ15:F2-KIM-:E5YF" -> "thPAN-PAN-FRED";    
  "KJ15:F2-KIM-:E5YF" -> "cn20-PAN-FRED";    
  "KJ0E:90:D5:E6:5E" -> "JUNK-0051-FOO";    
  "KJ0E:90:D5:E6:5E" -> "JUNK-0009-FOO";    
  "KJ1E:90:DE:F1:07" -> "JUNK-0051-FOO";    
  "KJ1E:90:DE:F1:07" -> "JUNK-0009-FOO";    
  "KJ1E:90:D5:EE:5E" -> "JUNK-0051-FOO";    
  "KJ1E:90:D5:EE:5E" -> "JUNK-0047-FOO";    
  "KJ1E:90:D5:EE:5E" -> "JUNK-0009-FOO";    
  "KJ04:ED:66:C7:19" -> "JUNK-0562-FOO";    
  "KJ04:ED:66:C7:19" -> "JUNK-0561-FOO";    
  "KJ1B:B9:9C-PET-67" -> "JUNK-0047-FOO";    
  "KJ1B:B9:9C-PET-67" -> "JUNK-0049-FOO";    
  "PAN:KJ5E:7F:FF:FA" -> "JUNK-0PAN4-FOO";    
  "PAN:KJ5E:7F:FF:FA" -> "PSPAN-021-FRED";    
  "PAN:KJ5E:7F:FF:FA" -> "GEORGE38-FRED";    
  "PAN:KJ5E:7F:FF:FA" -> "JUNK-0095-FOO";    
  "PAN:KJ5E:7F:FF:FA" -> "JUNK-PAN18-FOO";    
  "KJ1B:B9:9B:D3:61" -> "JUNK-0PAN0-FOO";    
  "KJ1B:B9:9B:D3:61" -> "JUNK-0051-FOO";    
  "KJ1B:B9:9B:D3:61" -> "JUNK-0052-FOO";    
  "KJ1B:B9:9B:D3:61" -> "JUNK-0009-FOO";    
  "KJ26:18:BD:D9:E9" -> "JUNK-0562-FOO";    
  "KJ26:18:BD:D9:E9" -> "JUNK-0561-FOO";    
  "KJD0:B7:69:0A-VET" -> "cn4-06-FRED";    
  "KJD0:B7:69:0A-VET" -> "1039-FRED";    
 "KJ50:04:EE:6C:F9" [fontsize=96,shape=oval]    
 "KJ1E:90:DE:F1:07" [fontsize=96,shape=oval]    
 "KJ05:5F:EF:14:PAN" [fontsize=96,shape=oval]    
 "KJ26:18:BD:D9:E9" [fontsize=96,shape=oval]    
 "KJ1B:B9:9B:D5:BB" [fontsize=96,shape=oval]    
 "KJE0:D0:13:14:94" [fontsize=96,shape=oval]    
 "KJ0E:90:D5:E6:5E" [fontsize=96,shape=oval]    
 "KJ1E:A6:PAN:9E:3A" [fontsize=96,shape=oval]    
 "KJ1E:90:D5:EE:5E" [fontsize=96,shape=oval]    
 "PAN:KJ5E:7F:FF:FA" [fontsize=96,shape=oval]    
 "KJ1B:B9:9B:D3:61" [fontsize=96,shape=oval]    
 "KJ1B:B9:9C-PET-67" [fontsize=96,shape=oval]    
 "KJ15:F2-KIM-:E5YF" [fontsize=96,shape=oval]    
 "KJD0:B7:69:0A-VET" [fontsize=96,shape=oval]    
 "KJ04:ED:66:C7:19" [fontsize=96,shape=oval]    
 "KJ16:76:A2:60:6E" [fontsize=96,shape=oval]    
 "JUNK-0009-FOO" [fontsize=96,shape=box3d]    
 "GEORGE38-FRED" [fontsize=96,shape=box3d]    
 "JUNK-0413-FOO" [fontsize=96,shape=box3d]    
 "JUNK-0561-FOO" [fontsize=96,shape=box3d]    
 "JUNK-0050-FOO" [fontsize=96,shape=box3d]    
 "cn20-PAN-FRED" [fontsize=96,shape=box3d]    
 "JUNK-PAN18-FOO" [fontsize=96,shape=box3d]    
 "1039-FRED" [fontsize=96,shape=box3d]    
 "JUNK-0095-FOO" [fontsize=96,shape=box3d]    
 "PSPAN-021-FRED" [fontsize=96,shape=box3d]    
 "JUNK-0048-FOO" [fontsize=96,shape=box3d]    
 "JUNK-0052-FOO" [fontsize=96,shape=box3d]    
 "GEORGE42-FRED" [fontsize=96,shape=box3d]    
 "JUNK-0049-FOO" [fontsize=96,shape=box3d]    
 "GEORGE04-FRED" [fontsize=96,shape=box3d]    
 "cn4-06-FRED" [fontsize=96,shape=box3d]    
 "thPAN-PAN-FRED" [fontsize=96,shape=box3d]    
 "GEORGE02-FRED" [fontsize=96,shape=box3d]    
 "JUNK-0PAN0-FOO" [fontsize=96,shape=box3d]    
 "MY5-30-FRED" [fontsize=96,shape=box3d]    
 "JUNK-0047-FOO" [fontsize=96,shape=box3d]    
 "JUNK-0562-FOO" [fontsize=96,shape=box3d]    
 "JUNK-0PAN4-FOO" [fontsize=96,shape=box3d]    
 "JUNK-0051-FOO" [fontsize=96,shape=box3d]    
 "PSPAN-036-FRED" [fontsize=96,shape=box3d]    
 "JUNK-0414-FOO" [fontsize=96,shape=box3d]    
}    

(All of the fontsize=96 are my vain attempt to get graphviz to make the font more readable, but apparently it doesn't work.)

trh
  • 7,186
  • 2
  • 29
  • 41
vy32
  • 28,461
  • 37
  • 122
  • 246
  • The answers to these questions may be helpful here: http://stackoverflow.com/questions/238724/visualizing-undirected-graph-thats-too-large-for-graphviz http://stackoverflow.com/questions/243616/visualization-tools-for-huge-graphs http://stackoverflow.com/questions/438419/does-anyone-know-a-good-network-graph-visualization-software-just-add-data – las3rjock Jan 27 '11 at 04:46
  • This post is from 2011 and you're saying you've been using this for a decade ?! we're in 2022 is there any software better to better display graphs ? GraphVis looks from the 80s, did you find anything else since then ? – Ricky Levi Jul 20 '22 at 08:36
  • GraphVis is pretty good. C++ is also from the 1980s. – vy32 Jul 22 '22 at 17:54

2 Answers2

39

Gephi is an amazingly good, open source graph visualization software. It uses dot language like GraphViz.

Mert Nuhoglu
  • 9,695
  • 16
  • 79
  • 117
  • 11
    Gephi is very slick, but sadly doesn't support subgraphs in dot (and some other features. From the [Gephi docs](https://gephi.org/users/supported-graph-formats/graphviz-dot-format/): "Gephi currently doesn’t provide a complete support of the DOT format. Subgraphs are not supported, nor custom attributes or size. Only labels and colors are imported if present. Directed and undirected graphs are supported." – Bonlenfum Nov 14 '13 at 10:44
26

What's there not to like?

I personally wouldn't use box3d, and my choice of colors probably hurts your eyes...

(full size image: https://i.stack.imgur.com/MTe6n.png )

graphviz output

EDIT:

Here's the modified dot code - I reorganized it a little bit:

digraph {
size="11,11";
layout=neato;
overlap=false;
splines=true;
pack=true;
start="random";
sep=0.1;

edge [len=2];
node[shape=oval,style=filled,fillcolor="#DCA80A"];

 "KJ50:04:EE:6C:F9"
 "KJ1E:90:DE:F1:07"
 "KJ05:5F:EF:14:PAN"
 "KJ26:18:BD:D9:E9"
 "KJ1B:B9:9B:D5:BB"
 "KJE0:D0:13:14:94"
 "KJ0E:90:D5:E6:5E"
 "KJ1E:A6:PAN:9E:3A"
 "KJ1E:90:D5:EE:5E"
 "PAN:KJ5E:7F:FF:FA"
 "KJ1B:B9:9B:D3:61"
 "KJ1B:B9:9C-PET-67"
 "KJ15:F2-KIM-:E5YF"
 "KJD0:B7:69:0A-VET"
 "KJ04:ED:66:C7:19"
 "KJ16:76:A2:60:6E"

node[shape=box3d,style=filled,fillcolor="#B1C3D4"];
 "JUNK-0009-FOO"
 "GEORGE38-FRED"
 "JUNK-0413-FOO"
 "JUNK-0561-FOO"
 "JUNK-0050-FOO"
 "cn20-PAN-FRED"
 "JUNK-PAN18-FOO"
 "1039-FRED"
 "JUNK-0095-FOO"
 "PSPAN-021-FRED"
 "JUNK-0048-FOO"
 "JUNK-0052-FOO"
 "GEORGE42-FRED"
 "JUNK-0049-FOO"
 "GEORGE04-FRED"
 "cn4-06-FRED"
 "thPAN-PAN-FRED"
 "GEORGE02-FRED"
 "JUNK-0PAN0-FOO"
 "MY5-30-FRED"
 "JUNK-0047-FOO"
 "JUNK-0562-FOO"
 "JUNK-0PAN4-FOO"
 "JUNK-0051-FOO"
 "PSPAN-036-FRED"
 "JUNK-0414-FOO"

  "KJ1E:A6:PAN:9E:3A" -> "JUNK-0PAN0-FOO";    
  "KJ1E:A6:PAN:9E:3A" -> "JUNK-0047-FOO";    
  "KJ1E:A6:PAN:9E:3A" -> "JUNK-0048-FOO";    
  "KJ1E:A6:PAN:9E:3A" -> "JUNK-0050-FOO";    
  "KJ1E:A6:PAN:9E:3A" -> "JUNK-0051-FOO";    
  "KJ1E:A6:PAN:9E:3A" -> "JUNK-0052-FOO";    
  "KJ1E:A6:PAN:9E:3A" -> "JUNK-0009-FOO";    
  "KJ16:76:A2:60:6E" -> "JUNK-0413-FOO";    
  "KJ16:76:A2:60:6E" -> "JUNK-0414-FOO";    
  "KJE0:D0:13:14:94" -> "GEORGE42-FRED";    
  "KJE0:D0:13:14:94" -> "MY5-30-FRED";    
  "KJ50:04:EE:6C:F9" -> "PSPAN-036-FRED";    
  "KJ50:04:EE:6C:F9" -> "GEORGE02-FRED";    
  "KJ50:04:EE:6C:F9" -> "GEORGE04-FRED";    
  "KJ1B:B9:9B:D5:BB" -> "JUNK-0047-FOO";    
  "KJ1B:B9:9B:D5:BB" -> "JUNK-0048-FOO";    
  "KJ05:5F:EF:14:PAN" -> "thPAN-PAN-FRED";    
  "KJ05:5F:EF:14:PAN" -> "cn20-PAN-FRED";    
  "KJ15:F2-KIM-:E5YF" -> "thPAN-PAN-FRED";    
  "KJ15:F2-KIM-:E5YF" -> "cn20-PAN-FRED";    
  "KJ0E:90:D5:E6:5E" -> "JUNK-0051-FOO";    
  "KJ0E:90:D5:E6:5E" -> "JUNK-0009-FOO";    
  "KJ1E:90:DE:F1:07" -> "JUNK-0051-FOO";    
  "KJ1E:90:DE:F1:07" -> "JUNK-0009-FOO";    
  "KJ1E:90:D5:EE:5E" -> "JUNK-0051-FOO";    
  "KJ1E:90:D5:EE:5E" -> "JUNK-0047-FOO";    
  "KJ1E:90:D5:EE:5E" -> "JUNK-0009-FOO";    
  "KJ04:ED:66:C7:19" -> "JUNK-0562-FOO";    
  "KJ04:ED:66:C7:19" -> "JUNK-0561-FOO";    
  "KJ1B:B9:9C-PET-67" -> "JUNK-0047-FOO";    
  "KJ1B:B9:9C-PET-67" -> "JUNK-0049-FOO";    
  "PAN:KJ5E:7F:FF:FA" -> "JUNK-0PAN4-FOO";    
  "PAN:KJ5E:7F:FF:FA" -> "PSPAN-021-FRED";    
  "PAN:KJ5E:7F:FF:FA" -> "GEORGE38-FRED";    
  "PAN:KJ5E:7F:FF:FA" -> "JUNK-0095-FOO";    
  "PAN:KJ5E:7F:FF:FA" -> "JUNK-PAN18-FOO";    
  "KJ1B:B9:9B:D3:61" -> "JUNK-0PAN0-FOO";    
  "KJ1B:B9:9B:D3:61" -> "JUNK-0051-FOO";    
  "KJ1B:B9:9B:D3:61" -> "JUNK-0052-FOO";    
  "KJ1B:B9:9B:D3:61" -> "JUNK-0009-FOO";    
  "KJ26:18:BD:D9:E9" -> "JUNK-0562-FOO";    
  "KJ26:18:BD:D9:E9" -> "JUNK-0561-FOO";    
  "KJD0:B7:69:0A-VET" -> "cn4-06-FRED";    
  "KJD0:B7:69:0A-VET" -> "1039-FRED";    
}

You can see and modify it here: http://graph.gafol.net/dLQGPHJRc - this site uses nice presets for fonts and fontsize.

Please note that I added start=random, therefore the layout may be different every time you create the graph.

marapet
  • 54,856
  • 12
  • 170
  • 184
  • 3
    It works, but the layout doesn't really explain what's going on. Take the big mass in the center left with lots of overlapping lines. Yes, the graph is laid out. But does it really help you understand what's going on? --- PS --- NICE COLORS! – vy32 Jan 28 '11 at 11:59
  • What changes did you make to my file to get this output. When I ran through graphviz, I got something that didn't look this good. – vy32 Jan 28 '11 at 13:51
  • 2
    Actually I think the graph explains at least 3 things visually: There are two types of nodes. There are 8 different group of nodes which are not connected between each other. There are 7 small groups, having one or two "oval" nodes, and there is one bigger group with several "oval" nodes. I agree that the big group could be laid out better, reducing the overlapping edges - try the link in the edited post, the rand parameter should result in a different layout every time, some better than others. – marapet Jan 28 '11 at 18:59
  • 3
    +1 from me; i agree completely--i am not aware of anything, commercial or open source, that comes close to graphviz, though you do have to use it correctly, which i think your answer nicely emphasizes. – doug Jan 30 '11 at 20:26
  • You did a really nice job on this. Thanks again. Now I need to modify my program that generated this file so that the order comes out right. It's unfortunate how determinant the order is. – vy32 Feb 05 '11 at 20:22