Just create two different axes if you want to draw graphs separately or create one Axes object and pass it to nx.draw . For instance:
G = nx.path_graph(8) E = nx.path_graph(30) # one plot, both graphs fig, ax = subplots() nx.draw(G, ax=ax) nx.draw(E, ax=ax)
To obtain:

If you need two different shape objects, create them separately, for example:
G = nx.path_graph(8) E = nx.path_graph(30)
getting:


Finally, you can create a subtitle if you want, for example:
G = nx.path_graph(8) E = nx.path_graph(30) pos=nx.spring_layout(E,iterations=100) subplot(121) nx.draw(E, pos) subplot(122) nx.draw(G, pos)
as a result of:

Whatever it costs, it seems that the ax argument to nx.draw useless when using the matplotlib API if you want to create subheadings outside of pylab , because nx.draw has some calls to gca , which makes it dependent on the pylab interface. In fact, I did not understand why this is so, I just thought that I would like to point out this.
The source code for nx.draw pretty simple:
try: import matplotlib.pylab as pylab except ImportError: raise ImportError("Matplotlib required for draw()") except RuntimeError: print("Matplotlib unable to open display") raise cf=pylab.gcf() cf.set_facecolor('w') if ax is None: if cf._axstack() is None: ax=cf.add_axes((0,0,1,1)) else: ax=cf.gca()
- The figure is taken from the environment using
gcf . - Then the
Axes object is added to the shape if it does not exist, otherwise you will get it from the environment using gca . - Make complexion white
- enable
hold in - draw it using the internal function
- turn off axis
- Finally, if we are in interactive mode, draw it and re-raise any exceptions that were caught.