问题标签 [pygraphviz]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
7448 浏览

graph - Graphviz / PyGraphviz 中的有向图的 NetworkX 样式弹簧模型布局

NetworkX 主要用于图形分析,PyGraphviz 主要用于绘图,它们旨在协同工作。然而,至少在一个方面,NetworkX 的图形绘制(通过 MatPlotLib)优于 PyGraphviz 的图形绘制(通过 Graphviz),即 NetworkX 具有spring_layout专门针对有向图的弹簧布局算法(可通过函数访问),而 PyGraphviz 有几个弹簧布局算法(可通过neato程序和其他访问)将有向图布局为无向图。唯一真正处理图形方向的 Graphviz / PyGraphviz 布局程序是dot,但dot创建分层布局,而不是强制导向布局。

下面是一个示例,它显示了 NetworkX 和 PyGraphviz 对于有向图的弹簧布局的区别:

1_networkx_directed.png:(http://farm9.staticflickr.com/8516/8521343506_0c5d62e013.jpg

2_networkx_undirected.png:( http://farm9.staticflickr.com/8246/8521343490_06ba1ec8e7.jpg )

3_pygraphviz_directed.png:( http://farm9.staticflickr.com/8365/8520231171_ef7784d983.jpg )

4_pygraphviz_undirected.png:(http://farm9.staticflickr.com/8093/8520231231_80c7eab443.jpg

绘制的第三和第四图基本相同,只是箭头(整个图已经旋转,但除此之外没有区别)。然而,第一个和第二个图形的布局不同——不仅仅是因为 NetworkX 的布局算法引入了随机性元素。

反复运行上面的代码说明这不是偶然发生的。NetworkX 的spring_layout函数显然是基于以下假设编写的:如果从一个节点到另一个节点存在弧,则第二个节点应该比第一个节点更靠近图的中心(即,如果中描述的图edgelist是有向图,则节点 2 应该是比节点 1 和 3 更接近节点 9,节点 6 应该比节点 4 更接近节点 9,节点 8 应该比节点 7 更接近节点 9;正如我们从节点中看到的那样,这并不总是完美的4 和 5 在上面的第一个图中,但与将 2 和 9 放在中心附近相比,这是一个小问题,而且从我的角度来看,“错误”非常轻微)。换句话说,NetworkXspring_layout既是分层的又是强制导向的。

这是一个很好的功能,因为它使核心/外围结构在有向图中更加明显(根据您正在使用的假设,即使没有传入弧的节点也可以被认为是外围的一部分数量很大出弧)。@skyebend 在下面解释了为什么大多数布局算法将有向图视为无向图,但上图显示 (a) NetworkX 以不同的方式处理它们,以及 (b) 它以有助于分析的原则方式这样做。

这可以使用 PyGraphviz / Graphviz 复制吗?

不幸的是,NetworkX 的(实际上)函数的文档和注释源代码没有提供任何关于 NetworkX 产生结果的线索。spring_layoutfruchterman_reingold_layout

这是使用 PyGraphviz 使用 NetworkXspring_layout函数绘制网络的结果(请参阅下面我自己对这个问题的回答)。5_pygraphviz_plus_networkx.png:(http://farm9.staticflickr.com/8378/8520231183_e7dfe21ab4.jpg

0 投票
1 回答
43151 浏览

graphviz - 如何在 GraphViz 中为点格式设置输出大小?

我想确保所有节点在布局后都在某个范围内(比如 [0,0,W,H])。

我认为边界框将是使用该bb属性的解决方案,但dotneato都只是简单地覆盖它。

例如我的图表:

输出neato -Gbb="0,0,50,50" -T dot file.txt

对于and的任何值bb或任何组合,我得到相同的位置。sizedpi

我需要的是让所有节点都在一个给定的框中。

任何建议如何做到这一点?

全文:

我正在使用networkx中的 *graphviz_layout*来布局我的图表。我用pyprocessing绘制图形。如果有办法告诉我的界限,我想避免重新缩放 *graphviz_layout* 的结果。

0 投票
1 回答
4980 浏览

python - pygraphviz ValueError:在路径中找不到程序点

问题是:我在 Windows7 上,并且我已经安装了 pygraphviz 库和 Graphviz 应用程序(Graphviz 应用程序位于“C:\Program Files”中)。当我在 python 上运行我的程序时,我收到以下消息:

我怎么解决这个问题?

0 投票
1 回答
1136 浏览

django - Django 1.5 图形扩展 -x 选项被忽略

我使用django-extensions命令来可视化我的 Django 项目(Django 版本 1.5)的数据库结构python manage.py graph_models my_model -x user -o output.png

不幸的是,升级到 Django 1.5 后,graph_models 忽略了选项-x. 此选项可用于从图表中排除模型。

由于我的userDjango 应用程序的几乎所有模型中都有该模型,因此将用户排除在图表之外对我来说很重要。否则图表会变得太满且难以阅读。

对于如何解决该问题的任何建议,我将不胜感激。

0 投票
3 回答
3602 浏览

python - 使用 PyGraphviz 绘制有关图形\节点的更多信息

我想创建一个图表并绘制它,到目前为止一切都很好,但问题是我想在每个节点上绘制更多信息。我看到我可以将属性保存到节点\边缘,但是如何绘制属性?我正在使用 PyGraphviz,女巫使用 Graphviz。

0 投票
1 回答
3600 浏览

graphviz - 以编程方式在 networkx 的 pygraphviz/dot 包装器中指定相同等级的节点

是否可以更改以下代码以将 Child_4 置于与 Grandchild_0 相同的水平级别(从而将 Grandchild_4 推到自己的级别)?

上面的代码产生了以下布局,我想通过将孩子向下移动一级以与孙子水平对齐来改变它: img 显示一个根节点、五个子节点和每个子节点下的一个孙子节点


在 Python 网络库 networkx 中,我使用 graphviz 的点引擎来渲染一棵树(遵循这个建议)。我想通过指定哪些节点应该具有相同的高度来控制节点的 y 位置。节点可能位于树中的不同深度。

rank=same我知道如果我通过使用命令(例如,{rank=same; n4 -> p2;}[ ex. ])编写自己的graphviz 代码,我可以控制节点高度。但是,我依赖 networkx.graphviz_layout() [ doc | source ] 生成节点位置,graphviz_layout 只能向 pygraphviz 发送命令行参数。我尝试使用的变体nx.graphviz_layout(G, prog='dot', args="-Grank=same; n4 -> p2;")失败了。 是否可以在 pygraphviz 的 NetworkX 包装器中描述所需的节点高度,还是我需要围绕 pygraphviz 编写自己的包装器? 编辑:答案为 pygraphviz 提供了一个新的包装器。它将显着简化在 pygraphviz 的现有 NetworkX 包装器中发送排名信息的事情。如果有人能告诉我这怎么可能,我会改变我接受的答案。

0 投票
1 回答
8637 浏览

python - 如何使用 PyGraphviz 在无向图的边缘上添加和显示权重?

我想为边缘添加权重,这些权重也应该显示在图中。

0 投票
1 回答
1281 浏览

python - PyGraphViz agraph.layout() 抛出 I0 错误

运行以下 Python 代码后:

我在 IDLE 中得到了这个跟踪:

请帮忙,我正在做一个课程项目。信息:正确安装了 Graphviz

0 投票
7 回答
60792 浏览

python - Python 看不到 pygraphviz

我已经使用 easy_install 安装了 pygraphviz 但是当我启动 python 时出现错误:

使用 Ubuntu 12.04 和 gnome 终端。

0 投票
2 回答
3601 浏览

python-2.7 - 如何在 PyGraphviz 中创建重复节点?

我正在使用 PyGraphviz 绘制二叉搜索树。我无法使用 PyGraphviz 创建重复节点,因此边缘循环回节点。

例如,以下代码仅生成 5 个节点,省略了重复节点。我尝试用唯一索引标记每个节点,但这并不能解决问题。

重复节点丢失

我绘制到 BST 的代码:

BST

从上图中可以看出,边是循环的,因为没有创建重复节点。请建议我实现这一目标的方法。图中方框代表空节点。