2014-10-12 4 views
0

Я хочу построить график внутри цикла while, но выполнение блокируется после plt.show (G) команда и возобновляется, когда я вручную убиваю окно графика.График построения без блокировки выполнения в python

Код:

while True:  
     print G.edges() 
     Q = #coming from a function 
     if Q > BestQ: 
      nx.draw(G) 
      plt.show(G) 
     if G.number_of_edges() == 0: 
      break 

Это выход G.edges() для двух итераций:

[(0, 1), (1, 2), (1, 4), (1, 9), (2, 6), (3, 5), (5, 7), (5, 8), (5, 10)] 
[(0, 1), (1, 4), (1, 9), (2, 6), (3, 5), (5, 7), (5, 8), (5, 10)] 

Как сделать это будет продолжаться после построения графика ???

+0

попробуйте вызвать plt.ion() перед циклом while. –

+0

try 'plt.draw()', 'plt.show()' может быть не лучшим вариантом – ThePredator

+0

plt.ion() не работает. – suri

ответ

1

Вы должны использовать interactive on и plt.draw.
У вас есть рабочий пример.
Поскольку у меня нет вашего алгоритма для генерации ваших графов G, я буду рисовать конституционно одну и ту же сеть. В любом случае, поскольку каждый вызов nx.draw (G) создает другой график, вы можете увидеть, как он обновляет график при каждом вызове.

import matplotlib.pyplot as plt 
import time 
import networkx as nx 

plt.ion() # call interactive on 

data = [(0, 1), (1, 2), (1, 4), (1, 9), (2, 6), (3, 5), (5, 7), (5, 8), (5, 10)] 

# I create a networkX graph G 
G = nx.Graph() 
for item, (a, b) in enumerate(data): 
    G.add_node(item) 
    G.add_edge(a,b) 

# make initial plot and set axes limits. 
# (alternatively you may want to set this dynamically) 
plot, = plt.plot([], []) 
plt.xlim(-1, 3) 
plt.ylim(-1, 3) 

# here is the plotting stage. 
for _ in range(10):   # plot 10 times 
    plt.cla()     # clear the previous plot 
    nx.draw(G) 
    plt.draw() 
    time.sleep(2)    # otherwise it runs to fast to see 
+0

plt.draw() не показывает никакой цифры. Любая идея, почему ??? – suri

+0

Вы ссылаетесь на мой код?. Выложенный код отлично работает с python 2.7 в Windows 7. Он показывает цифру и обновляет ее 10 раз. Вы скопировали его ** точно ** как есть и не получили ничья? У вас возникли какие-либо ошибки? Если вы ссылаетесь на свой собственный код, вы должны опубликовать минимальный исполняемый пример, который не работает в вашем случае. – joaquin

+0

Я нахожусь на linux и использую Spyder IDE. Это не дало никакой ошибки. Он просто ничего не рисовал. – suri

Смежные вопросы