graphs example digraph colored color python graph networkx graph-drawing

python - example - Cómo aumentar el espacio entre nodos para networkx.spring_layout



nx draw color (2)

Dibujando un gráfico clique con

import networkx as nx .... nx.draw(G, layout=nx.spring_layout(G))

produce la siguiente imagen:

Obviamente, es necesario aumentar el espacio entre los nodos (por ejemplo, la longitud del borde). He buscado en Google y he encontrado esta sugerencia aquí:

Para algunos de los algoritmos de diseño hay un parámetro de "escala" que podría ayudar. p.ej

En 1 : importar networkx como nx

En 2 : G = nx.path_graph (4)

En [3]: pos = nx.spring_layout (G) #default to scale = 1

En [4]: ​​nx.draw (G, pos)

En [5]: pos = nx.spring_layout (G, scale = 2) # doble distancia entre todos los nodos

En [6]: nx.draw (G, pos)

Sin embargo, el parámetro de scale no parece tener ningún efecto.

¿Cuál es el método correcto para obtener un mejor dibujo?


Muy bien, mi respuesta es demasiado tarde para esta pregunta. Pero la solución a este problema radica en la versión 1.8 de NetworkX que aún no se ha lanzado, pero está disponible a través de git hub.

Haga lo siguiente para aumentar la distancia entre nodos:

pos = nx.spring_layout(G,k=0.15,iterations=20) # k controls the distance between the nodes and varies between 0 and 1 # iterations is the number of times simulated annealing is run # default k =0.1 and iterations=50

Modifica estos parámetros para ver cómo funciona. Pero a pesar de esto, no hay garantía de que todos los nodos no se superpongan


Utilicé el parámetro de distancia óptima del diseño de Kamada Kawai y configuré la distancia entre los componentes no conectados a la distancia máxima en el gráfico. Probablemente haya una mejor manera de deshacerse de los diccionarios, pero esto es bastante fácil:

df = pd.DataFrame(index=G.nodes(), columns=G.nodes()) for row, data in nx.shortest_path_length(G): for col, dist in data.items(): df.loc[row,col] = dist df = df.fillna(df.max().max()) layout = nx.kamada_kawai_layout(G, dist=df.to_dict())