当前位置: 首页 > 面试题库 >

是什么导致NetworkX和PyGraphViz单独运行但不能一起正常运行?

贾成天
2023-03-14
问题内容

我正在努力学习一些Python图形可视化。我发现一些博客文章做了一些
我想尝试的事情。不幸的是,我并没有走太远,遇到了这个错误:AttributeError: 'module' object has no attribute 'graphviz_layout'

在我的系统上 重现错误 的最简单的代码片段是这样,

In [1]: import networkx as nx
In [2]: G=nx.complete_graph(5)
In [3]: nx.draw_graphviz(G)
------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-3-481ad1c1771c> in <module>()
----> 1 nx.draw_graphviz(G)
/usr/lib/python2.7/site-packages/networkx/drawing/nx_pylab.pyc in draw_graphviz(G, prog, **kwargs)
982 See networkx.draw_networkx() for a description of optional keywords.
983 """
--> 984 pos = nx.drawing.graphviz_layout(G, prog)
985 draw(G, pos, **kwargs)
986
AttributeError: 'module' object has no attribute 'graphviz_layout'

我发现了类似的问题,并且帖子对此组合有困难,但错误并不完全相同。一个很近,但是它自动解决了。

首先,我核实了所有所需的软件包
为NetworkX和PyGraphViz(其中列出了类似的要求SciPy的进行安装)。

接下来,我寻找了一些片段来测试我在Python中安装这些模块的情况。
前两个示例来自NetworkX参考文档。这列出了同时使用MatPlotLib和GraphViz的一些示例片段。

MatPlotLib代码示例对我有用(将图像渲染到屏幕上)

In [11]: import networkx as nx
In [12]: G=nx.complete_graph(5)
In [13]: import matplotlib.pyplot as plt
In [13]: nx.draw(G)
In [13]: plt.show()

但是, GraphViz片段也会产生类似的错误,

In [16]: import networkx as nx
In [17]: G=nx.complete_graph(5)
In [18]: H=nx.from_agraph(A)
------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-18-808fa68cefaa> in <module>()
----> 1 H=nx.from_agraph(A)
AttributeError: 'module' object has no attribute 'from_agraph'
In [19]: A=nx.to_agraph(G)
------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-19-32d1616bb41a> in <module>()
----> 1 A=nx.to_agraph(G)
AttributeError: 'module' object has no attribute 'to_agraph'
In [20]: print G
complete_graph(5)

然后,我尝试
了Layout&Drawing上 PyGraphViz的教程页面 。这也有一些剪。 PyGraphViz
与Neato(默认),PyDot和Circo Post Script输出(使用Gimp查看) 一起传递
。(唯一的区别是这些PyGraphViz示例未呈现到显示器,而是呈现到文件)。

In [1]: import pygraphviz as pgv
In [2]: d={'1': {'2': None}, '2': {'1': None, '3': None}, '3': {'2': None}}
In [3]: A=pgv.AGraph(d)
In [4]: A.write("pygraphviz_test_01.dot")
In [5]: A.layout()
In [6]: A.draw('pygraphviz_test_01.png')

*PyGraphViz *增加了复杂性,
因此需要GraphViz软件包二进制文件才能正常工作。我正在使用Arch
Linux,并安装了该发行版的版本。Arch
Linux有一个示例来测试安装(再次,输出到文件)
也通过了

我想念什么? 是什么导致NetworkX和PyGraphViz单独运行但不能一起正常运行?


问题答案:

draw_graphviz由于没有将graphviz绘图工具导入到networkx的顶级命名空间中的更改,触发了networkx-1.11中的函数中的一个小错误。

以下是解决方法

In [1]: import networkx as nx

In [2]: G = nx.complete_graph(5)

In [3]: from networkx.drawing.nx_agraph import graphviz_layout

In [4]: pos = graphviz_layout(G)

In [5]: nx.draw(G, pos)

要使用其他功能(如to_agraphwrite_dot等),您需要明确使用较长的路径名

 nx.drawing.nx_agraph.write_dot()

或将函数导入顶级名称空间

from networkx.drawing.nx_agraph import write_dot()
write_dot()


 类似资料:
  • 我一直遇到一个奇怪的问题。我的测试用例有一个失败的测试,。但是,如果我单独运行相同的程序,它将运行得非常完美。我不熟悉JUnit,不知道为什么会发生这种情况。 如果我注释掉最后一个测试(已经注释掉),我的所有测试都成功运行!然而,如果我不评论它,一个测试失败,但那不是这个测试!它是失败!

  • 从重新索引文档: 使用可选的填充逻辑将DataFrame与新索引一致,将NA/NaN放置在上一个索引中没有值的位置。除非新索引与当前索引等效,并且Cope=False,否则将生成新对象。 因此,我认为我可以通过在适当的位置(!)设置复制=False来重新排序。然而,我似乎得到了一个副本,需要再次将其分配给原始对象。我不想把它分配回去,如果我能避免它的话(原因来自于另一个问题)。 这就是我正在做的:

  • 我有一个多模块的项目。如果我运行命令后跟,那么一切正常。但是,如果我使用命令,我就会开始出错。 在依赖pom中,我正在将文件安装到localrepo中,这个目标与清理阶段相关。包装阶段将需要安装到localrepo(清洁阶段)的罐子。 父级 ---应用 ---依赖关系

  • 这是我的整个测试课程: 有3个单元测试,它们在单独运行时都通过了,但当我运行整个测试类时,我的第2个和第3个测试失败,错误如下: 我已经想尽一切办法来解决这个问题: 我将测试实例化下的类移动到@Before函数中 我尝试创建@After函数并调用Mockito。重置我的模拟 我应该提到的是,我正在使用nhaarman。mockitokotlin2库和argumentCaptor。 关于为什么这些测

  • 不要与之前提出的问题混淆“为什么我的测试在一起运行时失败,但单独通过?” 我有一个任务,我需要修改JUnit测试类来处理多个数据库测试。在实现之前,我需要确保所有测试都在运行,没有失败。令我困惑的是,现在当我一起运行所有的类时,它显示它运行时没有失败。当我运行一个特定的类时,它突然失败了,如果我重复它,结果仍然存在。 这可能是什么原因造成的? 我自己没有写测试,因此我对测试内容的了解是有限的。不过

  • 现在我正在学习C++我做了我的第一个小程序加法计算器,我写两个数字,它把它们相加。你能告诉我为什么我的输出是0吗? 输出: