2011-01-26 14 views
51

Poszukuję alternatywy dla GraphViz. Używam GraphViz od ponad dekady i jest to w porządku, ale układy nie są po prostu generujące wykresów jakości publikacji dla mnie, biorąc pod uwagę moje dane wejściowe. Czasami moje dane są naprawdę duże i skomplikowane, a czasem tak nie jest, ale GraphViz nigdy nie tworzy rzeczy, które są piękne.Alternatywy Graphviz?

Jakie inne narzędzia do wizualizacji wykresów używają ludzie? Idealnie jest taki, który używa składni GraphViz dla pliku wejściowego.

Tutaj na przykład jest plik wejściowy gram z:

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]  
}  

(Cała fontsize=96 są moje daremne próby dostania graphviz aby czcionki bardziej czytelne, ale najwyraźniej to nie działa .)

+0

Odpowiedzi na te pytania mogą być pomocne tutaj: http://stackoverflow.com/questions/238724/visualizing-undirected-graph-thats-too-large-for-graphviz http://stackoverflow.com/questions/ 243616/wizualizacja-narzędzia-dla-ogromnych wykresów http://stackoverflow.com/questions/438419/does-anyone-know-a-good-network-graph-visualization-software-just-add-data – las3rjock

Odpowiedz

23

Co tam nie polubić?

Ja osobiście nie używać box3d, a mój wybór kolorów prawdopodobnie boli oczy ...

(pełny rozmiar: http://i.stack.imgur.com/MTe6n.png)

graphviz output

EDIT:

Oto zmodyfikowany kod kropkowy - trochę go zreorganizowałem:

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";  
} 

Możesz go zobaczyć i zmodyfikować tutaj: http://graph.gafol.net/dLQGPHJRc - ta strona używa ładnych ustawień czcionek i fontsize.

Należy pamiętać, że dodałem start=random, dlatego układ może się różnić przy każdym tworzeniu wykresu.

+3

To działa, ale układ nie wyjaśnia dokładnie, co się dzieje. Weź dużą masę w środku po lewej z dużą ilością zachodzących na siebie linii. Tak, wykres jest ułożony. Ale czy to naprawdę pomaga zrozumieć, co się dzieje? --- PS --- ŁADNE KOLORY! – vy32

+0

Jakie zmiany wprowadzono w moim pliku, aby uzyskać dane wyjściowe. Kiedy przeglądałem graphviz, dostałem coś, co nie wyglądało tak dobrze. – vy32

+2

Właściwie uważam, że wykres wyjaśnia co najmniej 3 elementy wizualnie: Istnieją dwa typy węzłów. Istnieje 8 różnych grup węzłów, które nie są ze sobą połączone. Istnieje 7 małych grup, mających jeden lub dwa "owalne" węzły, i jest jedna większa grupa z kilkoma "owalnymi" węzłami. Zgadzam się, że duża grupa mogłaby być lepiej rozłożona, zmniejszając nakładające się krawędzie - spróbuj linku w edytowanym poście, parametr rand powinien za każdym razem dawać inny układ, a niektóre lepiej niż inne. – marapet

33

Gephi to niesamowicie dobre oprogramowanie do wizualizacji na otwartym oprogramowaniu. Używa on języka kropkowego, takiego jak GraphViz.

+7

Gephi jest bardzo zręczny, ale niestety nie obsługuje podgraphów w kropce (i niektórych innych funkcjach. [Dokumenty Gephi] (https://gephi.org/users/supported-graph-formats/graphviz-dot-format/): "Gephi obecnie nie zapewnia pełnej obsługi formatu DOT, podfrafy nie są obsługiwane, ani niestandardowe atrybuty, ani rozmiar. Tylko etykiety i kolory są importowane, jeśli są obecne." Obsługiwane są grafy sterowane i nieukierunkowane. " – Bonlenfum