Tengo algunos nodos que provienen de un script que quiero mapear en un gráfico. A continuación, quiero usar la flecha para ir de A a D y probablemente también tener el borde coloreado (rojo o algo así).
Esto es básicamente, como un camino de A a D cuando todos los demás nodos están presentes. puedes imaginar cada nodo como ciudades y viajar de A a D requiere direcciones (con puntas de flecha).
Este código a continuación crea el gráfico
import networkx as nx
import numpy as np
import matplotlib.pyplot as plt
G = nx.Graph()
G.add_edges_from(
[('A', 'B'), ('A', 'C'), ('D', 'B'), ('E', 'C'), ('E', 'F'),
('B', 'H'), ('B', 'G'), ('B', 'F'), ('C', 'G')])
val_map = {'A': 1.0,
'D': 0.5714285714285714,
'H': 0.0}
values = [val_map.get(node, 0.25) for node in G.nodes()]
nx.draw(G, cmap = plt.get_cmap('jet'), node_color = values)
plt.show()
pero quiero algo como se muestra en la imagen.
Las puntas de flecha de la primera imagen y los bordes en color rojo en la segunda imagen.
(C, E)
no es rojo porque elegí los bordes parared_edges
cuando todavía estaba trabajando con su gráfico no dirigido, simplemente seleccionando al azar de los bordes devueltos porG.edges()
. Debería serlored_edges = [('A', 'C'), ('E', 'C')]
.draw_networkx_edges()
. Limpié el código y solucioné los problemas de DiGraph.Solo pongo esto para completar. He aprendido mucho de marius y mdml. Aquí están los pesos de los bordes. Perdón por las flechas. Parece que no soy el único que dice que no se puede evitar. No pude renderizar esto con el cuaderno ipython.Tuve que ir directamente desde Python, que era el problema para obtener mis pesos de borde antes.
fuente
node_labels = {node:node for node in G.nodes()}; nx.draw_networkx_labels(G, pos, labels=node_labels)
.G.add_edges_from()
línea sin tener que ingresar manualmente el punto inicial y final? ¿Quizás agregar bordes de adict
?En lugar de nx.draw normal, es posible que desee utilizar:
Por ejemplo:
Puede agregar opciones inicializando esa ** variable de esta manera:
Además, algunas funciones admiten el
directed=True parameter
En este caso, este estado es el predeterminado:La referencia de networkx se encuentra aquí .
fuente
Necesita usar un gráfico dirigido en lugar de un gráfico, es decir
Luego, cree una lista de los colores de borde que desea usar y
nx.draw
páselos a (como lo muestra @Marius).Poniendo todo esto junto, obtengo la imagen de abajo. Todavía no es la otra imagen que muestra (no sé de dónde vienen los pesos de los bordes), ¡pero mucho más cerca! Si desea tener más control de cómo se ve su gráfico de salida (por ejemplo, obtener puntas de flecha que parecen flechas), vería NetworkX con Graphviz .
fuente
Esto es simplemente cómo dibujar un gráfico dirigido usando python 3.x usando networkx. Representación simple y se puede modificar y colorear, etc. Vea el gráfico generado aquí .
Nota: es solo una representación simple. Los bordes ponderados se pueden agregar como
y por lo tanto trazada de nuevo.
fuente
fuente