es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

NetworkX no muestra la etiqueta de borde para el borde hacia el mismo nodo.

Descubrí un comportamiento extraño con la biblioteca de dibujo de grafos NetworkX: no dibuja la etiqueta de la arista si la arista se dirige hacia atrás al mismo nodo.

Estoy bastante seguro de que es una característica de NetworkX, porque creo todas las etiquetas de las aristas con el mismo método y funciona bien con aristas sin bucles, como se puede ver en la imagen.

¿Existe alguna opción de visualización que pueda ayudar a mostrar todas las etiquetas de las aristas?

Importante: este código y la salida no deben traducirse en markdown

import networkx as nx
import matplotlib.pyplot as plt

g = nx.DiGraph()

edge_labels = dict()

g.add_edge(0, 1)
#ATENCIÓN - esto funcionará
edge_labels[(0, 1)] = '01'

g.add_edge(0, 0)

#ATENCIÓN - esta línea no funcionará
edge_labels[(0, 0)] = '00'

pos = nx.spring_layout(g)
nx.draw(g, pos, with_labels=True, font_weight='bold')
nx.draw_networkx_edge_labels(g, pos, edge_labels=edge_labels, font_color='red')
plt.show()

Solucionado
al poner ‘_’ antes de la cadena para la arista en bucle, se puede ver así.
No es bonito, pero se muestra.

        if state_id == self.last_parent.id: # si es un bucle
        self.edge_labels[(self.last_parent.id, state_id)] = '_____' + char_of_edge # se agregan los símbolos a la etiqueta de la arista

Ejemplo:

Imagen de ejemplo

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en Python y NetworkX, puedo confirmar que el comportamiento descrito en la pregunta es una característica de NetworkX. Cuando una arista lleva hacia atrás al mismo nodo, NetworkX no dibuja la etiqueta de la arista. Sin embargo, existe una solución alternativa para mostrar todas las etiquetas de las aristas.

    Una forma de mostrar todas las etiquetas de las aristas es agregar una cadena de guiones bajos antes de la etiqueta de la arista que hace bucle, como se muestra en el ejemplo de código proporcionado en la pregunta. Si bien esto puede no ser estéticamente agradable, permite mostrar la etiqueta en el gráfico.

    Alternativamente, si la estética visual es importante, otra opción es utilizar una biblioteca de dibujo de gráficos diferente o modificar el código fuente de NetworkX para personalizar el comportamiento de la etiqueta de la arista. Sin embargo, estas opciones pueden requerir habilidades de programación más avanzadas y tiempo para implementar.

    En general, aunque NetworkX tiene algunas limitaciones con respecto a la visualización de etiquetas de aristas en aristas que hacen bucle, existen soluciones alternativas disponibles para mostrar todas las etiquetas de aristas según sea necesario.

Comments are closed.