I have a graph in NetworkX containing some info. After the graph is shown, I want to save it as jpg
or png
file. I used the matplotlib
function savefig
but when the image is saved, it does not contain anything. It is just a white image.
Here is a sample code I wrote:
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")
Why is the image saved without anything inside (just white) ?
This is the image saved (just blank):
It's related to
plt.show
method.Help of
show
method:When you call
plt.show()
in your script, it seems something like file object is still open, andplt.savefig
method for writing can not read from that stream completely. but there is ablock
option forplt.show
that can change this behavior, so you can use it:Or just comment it:
Or just save befor show it:
Demo: Here