2017-02-17 27 views
0

Я использую networkx для рисования нескольких фигур одного и того же графа, так как я добавляю к графику все больше ребер. Цифры включены в последовательные слайды в слайд-шоу.networkx: множественная фигура с согласованным расположением узлов

Я хочу, чтобы узлы каждой фигуры отображались точно в одном и том же положении на каждой фигуре. К сожалению, хотя я использую одни и те же данные позиционирования для каждого графика, этот показатель немного уменьшается каждый раз, когда я добавляю кромку рядом с фигурой.

Это то, что я имею в виду: enter image description here

Это код, который я использую в данный момент:

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) 

То, что я хочу, что узлы остаются в той же остановке на каждом последовательный слайд, который был бы намного более визуально приятным. Может ли кто-нибудь помочь мне?

P.S. в случае, если это уместно, так что я поставил цифры в слайд-шоу (которое сделано с LaTeX/Бимер), является с

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

Заранее спасибо за помощь!

ответ

0

Я нашел ответ сам, для всех, кого это интересует. Решение состоит в вызове plt.xlim и plt.ylim. Я добавил следующее:

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

, а затем, как раз перед сохранением фигуры в файл, добавьте

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

Это решает проблему.