我需要建议来渲染具有178,000个节点和500,000个边缘的无向图.我尝试过Neato,Tulip和Cytoscape.Neato甚至没有近距离接触,Tulip和Cytoscape声称他们可以处理它,但似乎无法做到.(郁金香什么也没做,Cytoscape声称工作,然后停止.)
我只是喜欢一个矢量格式文件(ps或pdf),它具有远程合理的节点布局.
这是我的点图的一个非常简化的例子:
strict digraph graphName {
A->B
B->A
}
Run Code Online (Sandbox Code Playgroud)
这创造了

相反,我希望在A和B之间显示一条边,但是有一个双箭头.我知道如何将双箭头作为全局选项:
strict digraph graphName {
edge [dir="both"]
A->B
B->A
}
Run Code Online (Sandbox Code Playgroud)
但这看起来非常难看,而且我的所有优势都不应该是双头的.

如果我对图形进行更多处理并自己检测双引用并用单个边缘替换两条边缘,则看起来没问题.但我宁愿不必做这个额外的步骤
strict digraph graphName {
A->B [dir="both"]
}
Run Code Online (Sandbox Code Playgroud)

更好的解决方案?
我在Windows 8中安装了GraphViz 2.32,并将C:\ Program Files(x86)\ Graphviz2.32\bin添加到System PATH变量中.仍然pydot无法找到它的可执行文件.
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
graph.write_png('example1_graph.png')
File "build\bdist.win32\egg\pydot.py", line 1809, in <lambda>
lambda path, f=frmt, prog=self.prog : self.write(path, format=f, prog=prog))
File "build\bdist.win32\egg\pydot.py", line 1911, in write
dot_fd.write(self.create(prog, format))
File "build\bdist.win32\egg\pydot.py", line 1953, in create
'GraphViz\'s executables not found' )
InvocationException: GraphViz's executables not found
Run Code Online (Sandbox Code Playgroud)
我发现了这个https://code.google.com/p/pydot/issues/detail?id=65但是无法解决问题.
我想在GraphViz图表中包含图例或关键字.但是,我无法确定要使用的代码.我也想把它放在一个角落,但我唯一知道的唯一的坐标是左下角:pos="10,10!".
有谁知道我怎么能让这个工作?
我正在寻找GraphViz的替代品.我已经使用GraphViz十多年了,没关系,但是考虑到我的输入数据,布局并没有为我生成出版品质的图表.有时候我的数据真的很大而且很复杂,有时却不是,但GraphViz从来没有真正做出那些美丽的东西.
人们使用的其他图形可视化工具是什么?理想情况下,有一个使用GraphViz语法的输入文件.
这里举例说明我正在玩的输入文件:
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" …Run Code Online (Sandbox Code Playgroud) 我想知道我是否可以为整个图形定义替代字体.
...
digraph script_concept {
graph [layout="dot",fontname="helvetica"];
...
Run Code Online (Sandbox Code Playgroud)
根据这个1个较早的帖子的字体名称属性附加伤害只能单独定义:
节点和边缘不继承图形的字体,您需要单独指定它们
还有其他方法,如何全局定义字体?
有没有人有任何减少graphviz生成的图形大小的一般提示(区域大小,而不是文件大小).
我有一个相当大的图(700个节点).我为每个节点设置了较小的字体大小,但它似乎只减小了字体大小而不是实际的节点大小.是否有任何属性可以减少图表中的总空白量?谢谢!
我正在尝试创建一个带有两个子图的图形.代码如下:
digraph G {
subgraph step1 {
style=filled;
node [label="Compiler"] step1_Compiler;
node [label="Maschine"] step1_Maschine;
color=lightgrey;
}
subgraph step2 {
style=filled;
color=lightgrey;
node [label="Interpretierer"] step2_Interpretierer;
node [label="Maschine"] step2_Maschine;
label="Virtuelle Maschine";
}
"Programm (Java)" -> step1_Compiler;
step1_Compiler -> step1_Maschine;
step1_Maschine -> "Bytecode";
"Bytecode" -> step2_Interpretierer;
step2_Interpretierer -> step2_Maschine;
step2_Maschine -> "Ergebnis";
}
Run Code Online (Sandbox Code Playgroud)
我得到的结果如下:

我希望两个子图周围都能看到一个方框.我在这里错过了什么?
是否有GraphViz的开源Java替代品?我知道Grappa的存在,它基本上将Graph接口包装为GraphViz作为JavaAPI.但是,GraphViz二进制文件仍然可以完成布局.
我正在寻找一个纯java,开源库,提供与GraphViz相同的功能和布局算法.
graphviz ×10
dot ×2
drawing ×1
graph ×1
graph-layout ×1
graph-theory ×1
image-size ×1
java ×1
legend ×1
macos ×1
pydot ×1
pygraphviz ×1
scikit-learn ×1