title: How to draw properly networkx graphs
body: <p>I got this code which allows me to draw a graph like the posted below</p>
  
  <pre><code>import networkx as nx
  import pylab as plt
  from networkx.drawing.nx_agraph import graphviz_layout
  
  
  G = nx.DiGraph()
  G.add_node(1,level=1)
  G.add_node(2,level=2)
  G.add_node(3,level=2)
  G.add_node(4,level=3)
  
  G.add_edge(1,2)
  G.add_edge(1,3)
  G.add_edge(2,4)
  
  nx.draw(G, pos=graphviz_layout(G), node_size=1600, cmap=plt.cm.Blues,
          node_color=range(len(G)),
          prog='dot')
  plt.show()
  </code></pre>
  
  <p><a href="https://i.stack.imgur.com/D0XDx.png" rel="noreferrer"><img src="https://i.stack.imgur.com/D0XDx.png" alt="enter image description here"></a></p>
  
  <p>Question is, how could i draw the graph with nodes which:</p>
  
  <ul>
  <li>Use white background color </li>
  <li>Have labels inside</li>
  <li>Have directed arrows</li>
  <li>Optionally the arrows show a certain weight</li>
  <li>Are arranged nicely either automatically or manually</li>
  </ul>
  
  <p>Something similar to the below image</p>
  
  <p><a href="https://i.stack.imgur.com/Vhuai.png" rel="noreferrer"><img src="https://i.stack.imgur.com/Vhuai.png" alt="enter image description here"></a></p>
  
  <p>As you can see in that image, nodes are aligned really nicely</p>