Everything I've seen says that nx.draw() uses spring_layout with its default parameter values. Yet I'm getting wildly different results when I try nx.draw() versus nx.draw_networkx using pos=spring_layout, where the draw() graphs have a FAR superior overall layout and organization of related nodes. My two approaches: nx.draw(graph, with_labels=True) creates this result, which perfectly displays the node and sub-node links in a readable tree-like structure: graph made with draw() only pos=nx.spring_layout(graph) nx.draw_networkx(graph, pos, with_labels=True) These create pretty horrific and unintelligible graph of the same data in an elliptical layout: graph made with spring_layout and draw_detworkx() Can anyone help me understand why draw() only is so superior when it claims to use spring_layout for its positions? If draw() really is using default spring_layout, shouldn't these graphs' basic shapes be very similar? (The reason I'm asking this is because I need to use the explicit pos=nx.spring_layout(graph) with nx.draw_networkx(graph, pos, with_labels=True) approach because I will eventually need to add edge labels using the same pos.) Continue reading...