Visualización de gráfico de conocimiento simple + dibujo nx.Graph() informa un error TypeError: el objeto '_AxesStack' no se puede llamar

escribir en la parte superior

Realice una función de visualización simple del gráfico de conocimiento.
La biblioteca NetworkX se usa para construir un mapa de conocimiento y la biblioteca matplotlib se usa para dibujar gráficos.

En unos días, publicaré un artículo sobre #总是noe4j智能知识图#,
y los detalles aún se están optimizando.

Aparte, construir un gráfico de conocimiento es realmente lento, especialmente para construir automáticamente la relación entre entidades. El código tarda mucho en ejecutarse y
no se considera el punto de innovación en el documento. Se siente un poco de mal gusto.

Visualización de mapas de conocimiento

La visualización del mapa de conocimiento consiste en mostrar los datos del mapa de conocimiento de forma gráfica, para comprender, analizar y explorar la relación y la información en el mapa de conocimiento de manera más intuitiva.

A través de la interfaz gráfica interactiva, las relaciones y los conceptos en el gráfico de conocimiento se pueden explorar y analizar, y se pueden navegar y navegar libremente desde lo macro hasta lo micro.

Se puede aplicar a motores de búsqueda, sistemas de recomendación, investigación médica, inteligencia comercial, redes sociales, análisis financiero y otros campos.

esperado

Dibuja el gráfico de nx.Graph()

informar error

TypeError: el objeto '_AxesStack' no se puede llamar

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>

razón posible

Este error se debe a la llamada a un objeto no invocable mientras se dibuja el gráfico _AxesStack, por lo general esto está relacionado con un conflicto con el nombre de una variable o función. pltVerifique si hay una variable o función nombrada o utilizada en otra parte de su código axque esté causando este error.

Aquí hay algunas causas comunes y soluciones que pueden causar problemas:

  1. Asegúrese pltde que sea un objeto pyplot de Matplotlib y que no se haya redefinido en ningún otro lugar. pltPuede intentar agregar al principio de su código antes de usar import matplotlib.pyplot as plt.

  2. Asegúrese de que el nombre de la variable no esté axasignado como un objeto Axes. El objeto Axes es devuelto por funciones como plt.subplots()o , por lo que si se usa como una variable ordinaria, puede causar conflictos.plt.add_axes()ax

  3. Podría ser que alguna otra parte del código haya modificado el comportamiento predeterminado de Matplotlib para que AxesStackno se pueda llamar. Verifique si hay personalizaciones o modificaciones relacionadas con Matplotlib antes de trazar el gráfico.

Después de confirmar los problemas anteriores, puede intentar modificar el código y asegurarse de que la parte del dibujo no entre en conflicto con los problemas mencionados anteriormente, para evitar que ocurra este error.

codigo original

Define una función llamada dibujar_gráfico que toma un objeto de gráfico como argumento y muestra el gráfico en un gráfico. La función principal crea un objeto de gráfico vacío y agrega algunos nodos y bordes.

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()

Causa Confirmación

Lo que encontré fue la segunda razón: debido a un conflicto con el objeto Axes de Matplotlib (ax).

Para evitar esto, intente especificar el objeto Axes explícitamente al dibujar el gráfico. Cree un nuevo objeto Axes en plt.subplots() y páselo a la función nx.draw().

código resuelto

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()

¡resolver!

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/wtyuong/article/details/131877783
Recomendado
Clasificación