Search code examples
pythonmatplotlibvisualizationnetworkx

networkx in a subplot is drawing nodes partially outside of axes frame


When I draw a networkx graph in a subplot, some of the nodes are partially cut off in the frame of the axes. I've tried this with all different types of graphs and layouts, it's always a problem. It always cuts off my nodes. It's as if networkx is drawing the graph on a bigger axes than is actually there.

Here is a minimal example

plt.subplot(2, 1, 1)
plt.scatter(range(10), range(10))

plt.subplot(2, 1, 2)
G = nx.erdos_renyi_graph(20, p=0.1)
nx.draw_networkx(G)
plt.show()

This is what I get from that. As you can see, node 0 and node 7 do not fit in the frame.

Minimal example


Solution

  • Just playing a with the figure sizes should do the trick. Try setting a larger figure size through the subplots' figsize parameter:

    f, axs = plt.subplots(2,1,figsize=(15,15))
    axs[0].scatter(range(10), range(10))
    G = nx.erdos_renyi_graph(20, p=0.1)
    nx.draw_networkx(G, ax=axs[1], node_color='lightgreen')
    

    enter image description here


    You can also look into networkX' layouts, such as spring_layout, which allow to encapsulate the nodes within a given box size, specified by a scale parameter. Here's an example:

    f, axs = plt.subplots(2,1,figsize=(15,15))
    axs[0].scatter(range(10), range(10))
    G = nx.erdos_renyi_graph(20, p=0.05)
    pos = nx.spring_layout(G, k=0.7, scale=0.05)
    nx.draw_networkx(G, pos=pos, ax=axs[1], node_color='lightgreen')
    

    enter image description here