2014-03-25 5 views
5

Ich habe ein Diagramm in NetworkX mit einigen Informationen. Nachdem das Diagramm angezeigt wird, möchte ich es als jpg oder png Datei speichern. Ich habe die matplotlib Funktion savefig verwendet, aber wenn das Bild gespeichert wird, enthält es nichts. Es ist nur ein weißes Bild.in NetworkX kann ein Diagramm nicht als JPG- oder PNG-Datei speichern

Hier ist ein Beispielcode schrieb ich:

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) 
nx.draw(G, pos, node_size=1500, node_color='yellow', font_size=8, font_weight='bold') 

plt.tight_layout() 
plt.show() 
plt.savefig("Graph.png", format="PNG") 

Warum wird das Bild ohne irgendetwas im Inneren (nur weiß) gespeichert?

Dies ist das gespeicherte Bild (nur leer): enter image description here

Antwort

4

Es zu plt.show Methode verwandt ist.

Hilfe von show Methode:

def show(*args, **kw): 
    """ 
    Display a figure. 

    When running in ipython with its pylab mode, display all 
    figures and return to the ipython prompt. 

    In non-interactive mode, display all figures and block until 
    the figures have been closed; in interactive mode it has no 
    effect unless figures were created prior to a change from 
    non-interactive to interactive mode (not recommended). In 
    that case it displays the figures but does not block. 

    A single experimental keyword argument, *block*, may be 
    set to True or False to override the blocking behavior 
    described above. 
    """ 

Wenn Sie plt.show() in Ihrem Skript aufrufen, scheint es so etwas wie Dateiobjekt noch geöffnet ist, und plt.savefig Verfahren zum Schreiben nicht vollständig aus diesem Strom lesen. aber es gibt eine block Option für plt.show, die dieses Verhalten ändern können, so können Sie es verwenden:

plt.show(block=False) 
plt.savefig("Graph.png", format="PNG") 

Oder einfach Kommentar es:

# plt.show() 
plt.savefig("Graph.png", format="PNG") 

Oder einfach nur vor dem Show speichern:

plt.savefig("Graph.png", format="PNG") 
plt.show() 

Demo: Here

+0

danke. Es war hilfreich! –

Verwandte Themen