Comment augmenter l'espacement des noeuds pour networkx.disposition des ressorts
dessin d'un graphe de clique avec
import networkx as nx
....
nx.draw(G, layout=nx.spring_layout(G))
produit l'image suivante:
évidemment, l'espacement entre les noeuds (par exemple, la longueur du bord) doit être augmenté. J'ai googlé ce et trouvé cette suggestion ici:
pour certains des algorithmes de mise en page il y a un paramètre "scale" qui pourrait aider. par exemple,
1: importation networkx que nx
2: G=nx.path_graph (4)
[3]: pos=nx.spring_layout(G) #par défaut à l'échelle=1
[4]: nx.draw (G, pos)
[5]: pos=nx.spring_layout(G,échelle=2) # double de la distance entre tous les les nœuds
[6]: nx.draw (G, pos)
cependant, le scale
paramètre ne semble pas avoir d'effet.
Quelle est la bonne méthode pour obtenir un meilleur dessin?
2 réponses
D'accord, ma réponse est trop tard pour cette question. Mais la solution à ce problème réside dans la version 1.8 de NetworkX qui n'est pas encore sortie, mais qui est disponible via git hub.
faites ce qui suit pour augmenter la distance entre les noeuds:
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
Ajuster ces paramètres pour voir comment il fonctionne. Mais malgré cela, il n'y a aucune garantie que tous les noeuds ne se chevauchent pas
j'ai utilisé le paramètre de distance optimale de la disposition Kamada Kawai, et j'ai réglé la distance entre les composants non connectés à la distance maximale dans le graphique. Il y a probablement une meilleure façon de broyer les dictionnaires, mais c'est assez facile:
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())