2017-02-17 7 views
0

Ich benutze networkx, um mehrere Figuren des gleichen Graphen zu zeichnen, da ich dem Graphen immer mehr Kanten hinzufüge. Die Abbildungen sind in aufeinanderfolgenden Dias in einer Diashow enthalten.networkx: multiple figure mit konsistenter Knotenplatzierung

Ich möchte die Knoten in jeder Figur in genau jeder Position in jeder Figur angezeigt werden. Obwohl ich für jedes Diagramm die gleichen Positionsdaten verwende, wird die Zahl leider jedes Mal ein wenig verkleinert, wenn ich eine Kante an die Seite der Figur anschließe.

Das ist, was ich meine: enter image description here

Dies ist der Code, den ich im Moment bin mit:

import networkx as nx 
import matplotlib.pyplot as plt 
from networkx.drawing.nx_agraph import graphviz_layout 

num_nodes = 100 
num_edges = range(10, 80, 5) 
file_name = "evolution1" 

G = nx.gnm_random_graph(num_nodes, num_edges[-1]) 
pos = graphviz_layout(G, prog="neato") 


for (i, ne) in enumerate(num_edges): 
    plt.figure(figsize=(4,3)) 

    nx.draw(G, 
      pos, 
      with_labels=False, 
      node_size=15, 
      node_color="black", 
      edgelist=G.edges()[:ne]) 

    plt.axis('off') 
    plt.savefig(file_name + "-%s.pdf" %i, format="pdf", 
       transparent=True) 

Was ich will, ist, dass die Knoten in der gleichen Station auf jedem Aufenthalt aufeinanderfolgende Folie, die optisch viel angenehmer wäre. Kann mir jemand helfen?

P.S. falls dies relevant ist, die Art und Weise, dass ich die Zahlen in der Diashow setzen (die mit LaTeX/Beamer hergestellt wird), ist mit

\begin{center} 
    \multiinclude[<+>][start=0,format=pdf]{pics/evolution1} 
\end{center} 

Vielen Dank im Voraus für die Hilfe!

Antwort

0

Ich fand selbst eine Antwort, für jeden Interessierten. Die Lösung besteht darin, plt.xlim und plt.ylim aufzurufen. Ich fügte hinzu, die folgenden:

maxx = max([coor[0] for coor in pos.values()]) 
maxy = max([coor[1] for coor in pos.values()]) 

und dann, kurz bevor die Figur in einer Datei speichern, fügen Sie

plt.xlim([-10, maxx + 10]) 
plt.ylim([-10, maxy + 10]) 

das Problem dadurch behoben.