使用networkx绘图时出现“_AxesStack”对象不可调用的错误。

18

在一个在线教程中,我发现即使是很小的一段文字也很难运行。

这是我想写入图形的内容:一个有向无环加权矩阵,但是我遇到了矩阵表示和图片表示的问题。前者给出一个警告,并用数组替换输出矩阵。然而,图片绘制总是只输出错误,我不知道为什么。以下是我的代码:

import networkx as nx
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('TkAgg')
import numpy as np
A = np.array([[0,1,1,0],
              [1,0,1,1],
              [1,1,0,0],
              [0,1,0,0]])
G=nx.from_numpy_array(A)
nx.draw(G,with_lables=True)

我的networkx版本是2.8.4,matplotlib版本是3.6.0,与教程提到的版本相匹配。下面是错误信息:

'_AxesStack' object is not callable
4个回答

31

开始使用

nx.draw_networkx(G, with_labels=True)

替代

nx.draw(G, with_labels=True)

请您能否添加一些解释? - AndreP

7

draw() 支持的参数是 with_labels。请修正您的拼写错误。

该错误已在 networkx 的 GitHub 仓库中的this线程 中讨论,并建议使用 matplotlib 3.6.0rc1 的用户将 networkx 更新到其最新版本。

在修正了拼写错误并使用了 networkx 版本 2.8.7 和 matplotlib 版本 3.5.1 后,代码生成以下图形:

enter image description here


编辑:

如果您正在使用networkx v3.1,并且不希望降级Matplotlib,请考虑Mohamad Sobhi的这个答案


非常感谢您的建议!在我将matplotlib包降级到3.5.1之后,错误消失了。但是,仍然有两个问题。第一个问题是图片是否只能在jupyternotebook中显示?当我使用pycharm时,我只能看到程序成功运行,但没有图片。第二个问题是,当我点击“file->settings->Python Interpreter”时,显示的最新版本是2.8.4,没有2.8.7。这是pycharm还是anaconda或其他一些东西的问题? - Leonhart Dreyse
1
实际上我想投票支持你的回答,但遗憾的是网站告诉我只有在获得15个积分后才能进行投票。很遗憾,但还是感谢你的回答。 - Leonhart Dreyse
@LeonhartDreyse 您可以更新两个软件包(matplotlib和networkx)-我认为您不会在最新版本中遇到错误。此外,我没有在Jupyter Notebook中创建此图 - 直接使用.py脚本。您使用Python 2.x版本的原因是什么?此答案是使用Python 3.9.13创建的。 - medium-dimensional
你是不是想说Pycharm显示的是networkx v2.8.4而不是v2.8.7? - medium-dimensional
降级 matplotlib==3.5.1 解决了这个问题! - Wei Shan Lee
显示剩余3条评论

5

这个错误与matplotlib的一个已弃用特性有关。问题是因为您正在运行networkx版本2.8.4。(现在最新的稳定版本是ver. 3.0.0)。

根据您的解释,我想您正在使用conda环境,您可以在https://anaconda.org/conda-forge/networkx找到它。但最新版本仍然是2.8.4。

我认为您问题的解决方案如下:

  1. 从conda环境中删除networkx包(conda uninstall networkx)
  2. 不要使用conda install,而是使用pip install(pip install networkx)
  3. 验证您当前的networkx版本是否已更新至ver 3。

0

我没有足够的声望直接评论@medium-dimensional。但是请检查一下您是否在pycharm中使用conda管理您的环境。在遇到相同问题后,我意识到通过conda安装的最新版本仍然是2.8.4(直到本回复的当天)。

我的建议是尝试运行

conda activate <your env> 
pip install --update networkx

pip 应该会检测到您已经安装了该软件包,并将在该位置更新到 3.0 版本


你为什么要同时使用两个包管理器呢? - Ari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接