2016-08-11 6 views
0

Я не знаю, как сохранить новый график png для каждой итерации цикла с помощью NetworkX. Я заимствовал код из этого вопроса: in NetworkX cannot save a graph as jpg or png file и немного его обработал. Ниже приведен код:Как сохранить новый график как png с каждой итерацией цикла

import networkx as nx 
import matplotlib.pyplot as plt 

fig = plt.figure(figsize=(12,12)) 
ax = plt.subplot(111) 
ax.set_title('Graph - Shapes', fontsize=10) 

G = nx.DiGraph() 
G.add_node('shape1', level=1) 
G.add_node('shape2', level=2) 
G.add_node('shape3', level=2) 
G.add_node('shape4', level=3) 
G.add_edge('shape1', 'shape2') 
G.add_edge('shape1', 'shape3') 
G.add_edge('shape3', 'shape4') 
pos = nx.spring_layout(G) 
n = 0 
colorses = ['yellow', 'red', 'blue', 'green'] 
while n < len(colorses): 
    nx.draw(G, pos, node_size=1500, node_color=colorses[n], font_size=8, font_weight='bold') 
    plt.tight_layout() 
    # plt.show() 
    plt.savefig("Graph.png", format="PNG") 
    n += 1 

В идеале я хотел бы иметь четыре изображения каждого с разными узлами цвета. Дайте мне знать, если вам нужна дополнительная информация. Благодаря!

+1

гм ... что если вы измените имя файла каждая итерация, поэтому make '' Graph.png "' зависит от 'n', например' plt.savefig ("Graph {} .png" .format (n), format = "PNG") '? –

ответ

2

Просто измените имя выходного файла

while n < len(colorses): 
    nx.draw(G, pos, node_size=1500, node_color=colorses[n], font_size=8, font_weight='bold') 
    plt.tight_layout() 
    # plt.show() 
    plt.savefig("Graph" + str(n) +".png", format="PNG") 
    n += 1 

Вы должны использовать более описательные имена, хотя. Может быть, вместо п, можно сослаться на время

plt.savefig("Graph" + str(datetime.datetime.now()) +".png", format="PNG") 

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

0

Первое предложение, получающее доступ к цветам по их значениям индекса, не является «Pythonic». Вместо этого используйте for цикл:

for color in colors: 
    print(color) 

Ваш код перезапись Graph.png на каждой итерации цикла. Чтобы сохранить новый файл для каждой итерации, просто переименуйте выходной файл на каждой итерации. Один из способов сделать это с помощью format() и enumerate() функции:

import networkx as nx                        
import matplotlib.pyplot as plt            

fig = plt.figure(figsize=(12,12))           
ax = plt.subplot(111)              
ax.set_title('Graph - Shapes', fontsize=10)         

G = nx.DiGraph()                
G.add_node('shape1', level=1)            
G.add_node('shape2', level=2)            
G.add_node('shape3', level=2)            
G.add_node('shape4', level=3)            
G.add_edge('shape1', 'shape2')            
G.add_edge('shape1', 'shape3')            
G.add_edge('shape3', 'shape4')            
pos = nx.spring_layout(G)             
colors = ['yellow', 'red', 'blue', 'green']         
for i, color in enumerate(colors):           
    nx.draw(G, pos, node_size=1500, node_color=color, font_size=8, font_weight='bold') 
    plt.tight_layout()              
    plt.savefig('Graph_{}.png'.format(i), format="PNG")