Mit Networkx in Python, ich versuche zu visualisieren, wie verschiedene Filmkritiker gegenüber bestimmten Produktionsfirmen voreingenommen sind. Um dies in einem Diagramm zu zeigen, besteht meine Idee darin, die Position jedes Produktions-Firmen-Knotens an einem einzelnen Ort in einem Kreis zu fixieren und dann den Spring_layout-Algorithmus zu verwenden, um die verbleibenden Film-Kritiker-Knoten zu positionieren sehen Sie, wie einige Kritiker eher zu bestimmten Produktionsfirmen hingezogen werden.Fix Position der Teilmenge der Knoten in NetworkX Frühjahr Grafik
Mein Problem ist, dass ich nicht scheinen kann, um die Ausgangsposition der Produktion-Firma-Knoten zu beheben. Sicher, ich kann ihre Position fixieren, aber dann ist es nur zufällig, und ich will das nicht - ich will sie in einem Kreis. Ich kann die Position aller Knoten berechnen und danach die Position der Produktion buchungs Knoten gesetzt, aber dies schlägt den Zweck, eine spring_layout Algorithmus verwenden und ich am Ende mit etwas verrückt wie:
Irgendwelche Ideen, wie man das richtig macht?
Derzeit mein Code tut dies:
def get_coordinates_in_circle(n):
return_list = []
for i in range(n):
theta = float(i)/n*2*3.141592654
x = np.cos(theta)
y = np.sin(theta)
return_list.append((x,y))
return return_list
G_pc = nx.Graph()
G_pc.add_edges_from(edges_2212)
fixed_nodes = []
for n in G_pc.nodes():
if n in production_companies:
fixed_nodes.append(n)
pos = nx.spring_layout(G_pc,fixed=fixed_nodes)
circular_positions = get_coordinates_in_circle(len(dps_2211))
i = 0
for p in pos.keys():
if p in production_companies:
pos[p] = circular_positions[i]
i += 1
colors = get_node_colors(G_pc, "gender")
nx.draw_networkx_nodes(G_pc, pos, cmap=plt.get_cmap('jet'), node_color=colors, node_size=50, alpha=0.5)
nx.draw_networkx_edges(G_pc,pos, alpha=0.01)
plt.show()
Vielen Dank für Ihre Antwort. Welchen Fehler bekommst du? Für mich sieht es so aus, als würden Sie Positionen zu Pos hinzufügen, bevor Sie es deklariert haben. Und um Ihren Code-Kommentar zu adressieren, werden die Positionen gleichmäßig Leerzeichen enthalten, weil len (dps_2211) == len (fixed_nodes). Ich verstehe, warum das verwirrend ist. Aber deine Lösung funktioniert. Es stellte sich heraus, dass es wichtig war, nur "pos" zu erstellen und Positionen hinzuzufügen und dann mit der soeben erstellten "pos" zu berechnen. Danke –
Sie hatten Recht, Sachen zu 'pos' hinzuzufügen, bevor Sie erklärten (ich genehmigte Ihre Änderung). Ich füge den Fehler hinzu, den ich am Ende meiner Antwort erhalten habe. – Joel