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:

enter image description here

é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?

18
demandé sur clstaudt 2013-01-11 21:19:50

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

25
répondu Vikram 2013-06-25 06:16:53

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())
1
répondu James Houghton 2018-04-26 16:36:38