Python 用graphviz绘制大型图形

Python 用graphviz绘制大型图形,python,graphviz,Python,Graphviz,我的女儿们做了一个类似于井字游戏的游戏。当然,当我和他们一起玩的时候,我开始用蛮力在我的脑子里强迫它 所以在午餐时间,我制作了一个快速的小Python脚本来“解决”游戏。我想以图形方式查看结果,所以我生成了一个包含所有合法移动的点文件: 当我尝试使用dot渲染它时,它会花费很长时间,几小时后我会中止它 如果我使用neato或sfdp等渲染它,需要几秒钟或更短的时间,但布局无法实际读取: sfdp -x -Tpng data.dot > data.png 我很高兴得到的图像是几百万像

我的女儿们做了一个类似于井字游戏的游戏。当然,当我和他们一起玩的时候,我开始用蛮力在我的脑子里强迫它

所以在午餐时间,我制作了一个快速的小Python脚本来“解决”游戏。我想以图形方式查看结果,所以我生成了一个包含所有合法移动的点文件:

当我尝试使用
dot
渲染它时,它会花费很长时间,几小时后我会中止它

如果我使用
neato
sfdp
等渲染它,需要几秒钟或更短的时间,但布局无法实际读取:

sfdp -x -Tpng data.dot > data.png

我很高兴得到的图像是几百万像素

如何布置和渲染如此大的图形?我对非点建议持开放态度,比如Python库也可以进行布局

()

添加:要解决游戏并生成点文件,请尝试以下操作:

sfdp -x -Goverlap=scale -Tpng data.dot > data.png
-Goverlap
保留布局,但均匀地向上扩展,直到不再有节点重叠。我能够得到一个约77MB的PNG,当你缩小时看起来像这样。

您仍然可以使用neato,但可以修改.dot文件放置:[样条线=真重叠=假]

您的文件应如下所示:

digraph luffarschack {
    graph [splines=true overlap=false];
    node [shape=none]; 
        ...here your nodes;
        ...here your edges;
}

如果您只在第二行输入“graph[splines=true overlap=false]”,并且其他所有内容都保持不变,那么它应该可以工作。

除了其他答案之外,您还可以使用其他工具,如

Gephi是用于各种图形和网络的领先可视化和探索软件。Gephi是开源和免费的


在Windows、Mac OS X和Linux上运行。

我发现默认值为
-Kneato的点在我的大图上太慢了()。我最终使用了

dot -Ksfdp -ooutput.svg -Tsvg input.dot
其中
input.dot

digraph {
    graph [overlap=false];
    a -> {b c d e f g}
    b -> {c e g x f}
    ...
}

图中有多少个节点/边?您可以试试@gephi.org,共有744个节点和4361条边。我留下来运行的一个点刚刚在这个点文件上出现seg错误。@你能不能对这个数据集的执行时间给出一些直觉?这看起来很有希望;尽管有4GB的RAM,但我还是在尝试查看生成的图像时点击了swap,不过:(有关于如何查看和调整如此大的图像的提示吗?@will我可以在GIMP中打开它,但速度很慢。你可以运行
dot-txx
来获得其他可用输出格式的列表。我还可以指定
-Tx11
来显示布局的交互式显示(滚动滚轮缩放,鼠标中键拖动来平移)是的,我什么都看不到,信封的背面应该有RAM,即使在16位RGB画布上也是如此。我也简单地看了一下nip2,但实际上无法解决如何保存文件。我承认失败了,写了博客,然后继续写下去!Thx我已经看到了一些用于查看巨型图像的接口的实现使用与谷歌地图类似的技术,@Will。你尝试过其中任何一种吗?快速查看后,我找到了源代码,以及该巨人的可缩放版本。GSV页面有一些代码用于将图像拆分为平铺。如何使其成为分层视图而不是圆形视图?早期打印出来“警告:一些带边距的节点(3.20,3.20)触摸-返回到直线边缘”,13分钟后OSX弹出“强制退出”对话框,因为我的系统已经用完了16GB的RAM!如果你能运行它,我很想看看它产生的布局?完成了,完成了…只要给我一个电子邮件地址,我就会给你发送.svg文件(4MB)…我在这里找不到上传选项在我的个人资料页面上有一个电子邮件地址;非常感谢!抱歉,我以为它是公开的(yahoo co uk的varfar)。这对我很有帮助,但我忽略了
spline=true
,因为它太慢了。
digraph {
    graph [overlap=false];
    a -> {b c d e f g}
    b -> {c e g x f}
    ...
}