in NetworkX cannot save a graph as jpg or png file
I struggled with the same problem. Looking at other comments and with the help of this link https://problemsolvingwithpython.com/06-Plotting-with-Matplotlib/06.04-Saving-Plots/ it worked for me! Two things that i had to change in my simple program was to add: %matplotlib inline after importing matplotlib and save the figure before plt.show(). See my basic example:
#importing the package
import networkx as nx
import matplotlib.pyplot as plt
%matplotlib inline
#initializing an empty graph
G = nx.Graph()
#adding one node
G.add_node(1)
#adding a second node
G.add_node(2)
#adding an edge between the two nodes (undirected)
G.add_edge(1,2)
nx.draw(G, with_labels=True)
plt.savefig('plotgraph.png', dpi=300, bbox_inches='tight')
plt.show()
#dpi= specifies how many dots per inch (image resolution) are in the saved image, #bbox_inches='tight' is optional #use plt.show() after saving. Hope this helps.
It's related to plt.show
method.
Help of show
method:
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.
"""
When you call plt.show()
in your script, it seems something like file object is still open, and plt.savefig
method for writing can not read from that stream completely. but there is a block
option for plt.show
that can change this behavior, so you can use it:
plt.show(block=False)
plt.savefig("Graph.png", format="PNG")
Or just comment it:
# plt.show()
plt.savefig("Graph.png", format="PNG")
Or just save befor show it:
plt.savefig("Graph.png", format="PNG")
plt.show()
Demo: Here