简单的知识图谱可视化+绘制nx.Graph()时报错TypeError: ‘_AxesStack‘ object is not callable

写在最前面

实现一个简单的知识图谱的可视化功能。
使用了NetworkX库来构建知识图谱,并使用matplotlib库来绘制图形。

过几天将发布关于#通过noe4j可视化知识图谱#的文章
细节上还在优化

题外话,构建知识图谱真的好慢啊,尤其是自动构建实体之间的关系,代码要跑好久好久
而且不算论文中的创新点,感觉有点鸡肋

知识图谱可视化

知识图谱可视化是将知识图谱的数据以图形化的方式展示出来,以便更加直观地理解、分析和探索知识图谱中的关系与信息。

可以通过交互式的图形界面,对知识图谱中的关系和概念进行探索和分析,并且能够自由地从宏观到微观地进行导航和浏览。

可以应用于搜索引擎、推荐系统、医学研究、商业智能、社交网络、金融分析等领域。

预期

绘制nx.Graph()的graph

报错

TypeError: ‘_AxesStack’ object is not callable

nx.draw(graph, pos, with_labels=True, node_size=3000, font_size=12, node_color='skyblue', font_weight='bold', alpha=0.8, linewidths=0, edge_color='gray')
      9 plt.title("Knowledge Graph")
     10 plt.show()

File D:\Program\Anaconda\lib\site-packages\networkx\drawing\nx_pylab.py:113, in draw(G, pos, ax, **kwds)
    111 cf.set_facecolor("w")
    112 if ax is None:
--> 113     if cf._axstack() is None:
    114         ax = cf.add_axes((0, 0, 1, 1))
    115     else:

TypeError: '_AxesStack' object is not callable

<Figure size 1000x800 with 0 Axes>

可能的原因

这个错误是由于在绘制图形时调用了一个不可调用的对象 _AxesStack,通常这与与变量或函数名冲突有关。检查你的代码是否有其他地方使用了名为 pltax 的变量或函数,导致了该错误。

以下是可能导致问题的一些常见原因和解决方法:

  1. 确保 plt 是 Matplotlib 的 pyplot 对象,并且没有在其他地方被重新定义。在使用 plt 之前,可以尝试在代码的开头添加 import matplotlib.pyplot as plt

  2. 确保没有将变量名 ax 分配为 Axes 对象。Axes 对象是由 plt.subplots()plt.add_axes() 等函数返回的,因此如果使用 ax 作为一个普通变量,可能会导致冲突。

  3. 可能是代码中的其他部分修改了 Matplotlib 的默认行为,导致 AxesStack 不可调用。请检查在绘制图形之前是否有任何涉及 Matplotlib 的自定义设置或修改。

在确认以上问题之后,可以尝试修改代码,并确保绘图部分没有与之前提到的问题冲突,从而避免该错误的出现。

原代码

定义了一个名为draw_graph的函数,该函数接受一个图形对象作为参数,并在绘图中显示该图形。main函数创建了一个空的图形对象,并添加了一些节点和边。

import networkx as nx
import matplotlib.pyplot as plt

def draw_graph(graph):
    pos = nx.spring_layout(graph, seed=42)
    # 下面这行代码有问题,已修改为
    # fig, ax = plt.subplots(figsize=(10, 8))
    plt.figure(figsize=(10, 8))
    nx.draw(graph, pos, with_labels=True, node_size=3000, font_size=12, node_color='skyblue', font_weight='bold', alpha=0.8, linewidths=0, edge_color='gray')
    plt.title("Knowledge Graph")
    plt.show()

def main():
    # 假设已构建好知识图谱
    graph = nx.Graph()
    graph.add_nodes_from(["Entity1", "Entity2", "Entity3"])
    graph.add_edges_from([("Entity1", "Entity2"), ("Entity2", "Entity3")])

    draw_graph(graph)

if __name__ == "__main__":
    main()

原因确认

我遇到的是第二个原因:因为与 Matplotlib 的 Axes 对象(ax)冲突。

为了解决这个问题,尝试在绘制图形时明确指定 Axes 对象。在 plt.subplots() 中创建一个新的 Axes 对象,然后将其传递给 nx.draw() 函数。

解决后的代码

import networkx as nx
import matplotlib.pyplot as plt

def draw_graph(graph):
    pos = nx.spring_layout(graph, seed=42)  # You can use different layout algorithms

    fig, ax = plt.subplots(figsize=(10, 8))
    nx.draw(graph, pos, with_labels=True, node_size=3000, font_size=12, node_color='skyblue', font_weight='bold', alpha=0.8, linewidths=0, edge_color='gray', ax=ax)
    ax.set_title("Knowledge Graph")
    plt.show()

def main():
    # 假设已构建好知识图谱
    graph = nx.Graph()
    graph.add_nodes_from(["Entity1", "Entity2", "Entity3"])
    graph.add_edges_from([("Entity1", "Entity2"), ("Entity2", "Entity3")])

    draw_graph(graph)

if __name__ == "__main__":
    main()

解决!

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于知识图谱的中药方剂可视化及问答系统源码+项目说明.zip # 项目目录 1) app.py是整个系统的主入口<br> 2) templates文件夹是HTML的页面<br>  |——index.html 欢迎界面<br>  |——search.html 搜索处方关系页面<br>  |——all_relation.html 所有处方关系页面<br>  |——KGQA.html 处方问答页面<br> 3) static文件夹存放css和js,是页面的样式和效果的文件<br> 4) raw_data文件夹是存在数据处理后的三元组文件<br> 5) neo_db文件夹是知识图谱构建模块<br>  |——config.py 配置参数<br>  |——create_graph.py 创建知识图谱,图数据库的建立<br>  |——query_graph.py 知识图谱的查询<br> 6) KGQA文件夹是问答系统模块<br>  |——ltp.py 分词、词性标注、命名实体识别<br> 7) spider文件夹是爬虫模块<br>  |——get_*.py 是之前爬取人物资料的代码,已经产生好images和json 可以不用再执行<br>  |——show_profile.py 是调用处方资料和图谱展示在前端的代码 <hr> # 部署步骤:<br> * 0.安装所需的库 执行pip install -r requirement.txt<br> * 1.先下载好neo4j图数据库,并配好环境。修改neo_db目录下的配置文件config.py,设置图数据库的账号和密码。<br> * 2.切换到neo_db目录下,执行python create_graph.py 建立知识图谱<br> * 3.在spider目录下,运行data_process.py(已处理好)<br> * 4.在static目录下,运行neo2json.py(已处理好)<br> * 5.去[这里](http://pyltp.readthedocs.io/zh_CN/latest/api.html#id2)下载好ltp模型。[ltp简介](http://ltp.ai/)<br> * 6.在KGQA目录下,修改ltp.py里的ltp模型文件的存放目录<br> * 7.运行python app.py,浏览器打开localhost:5000即可查看<br> .......
【资源说明】 基于知识图谱的豆瓣书籍推荐可视化及问答系统python源码+部署说明.zip 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 基于知识图谱的豆瓣书籍推荐可视化及问答系统 文件树:<br> 1) app.py是整个系统的主入口<br> 2) templates文件夹是HTML的页面<br> |-index.html 欢迎界面<br> |-search.html 搜索页面<br> |-KGQA.html 问答页面<br> 3) static文件夹存放css和js,是页面的样式和效果的文件<br> 4) raw_data文件夹是存在数据处理后的三元组文件<br> 5) neo_db文件夹是知识图谱构建模块<br> |-config.py 配置参数<br> |-create_graph.py 创建知识图谱,图数据库的建立<br> |-query_graph.py 知识图谱的查询<br> 6) KGQA文件夹是问答系统模块<br> |-ltp.py 分词、词性标注、命名实体识别<br> 7) spider文件夹是爬虫模块<br> |- get_*.py 是之前爬取人物资料的代码,已经产生好images和json 可以不用再执行<br> |-show_profile.py 是调用资料和图谱展示在前端的代码 <hr> 部署步骤:<br> * 0.安装所需的库 执行pip install -r requirement.txt<br> * 1.先下载好neo4j图数据库,并配好环境(注意neo4j需要jdk8)。修改neo_db目录下的配置文件config.py,设置图数据库的账号和密码。<br> * 2.切换到neo_db目录下,执行python creat_graph.py 建立知识图谱<br> * 3.去 [这里](http://pyltp.readthedocs.io/zh_CN/latest/api.html#id2) 下载好ltp模型。[ltp简介](http://ltp.ai/)<br> * 4.在KGQA目录下,修改ltp.py里的ltp模型文件的存放目录<br> * 5.运行python app.py,浏览器打开localhost:5000即可查看<br>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是Yu欸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值