title: Network graph is not visually optimized in NetworkX
body: <p>I'm new to using <a href="https://networkx.github.io" rel="nofollow noreferrer">NetworkX</a> so I might be doing something wrong.  I'm trying to create simple graphs using data scraped from <a href="https://en.wikipedia.org/wiki/Timeline_of_programming_languages" rel="nofollow noreferrer">wikipedia.org</a>.  Below is an example of a simple graph I constructed using the spring_layout option.  Is this the kind of output to be expected?  I was thinking it would re-arrange the points to try to avoid crossing lines so that it looks visually simpler.  It doesn't seem to have tried to avoid crossings at all.</p>
  
  <p>Also, I wanted more of a flow diagram going from left to right like <a href="http://www-03.ibm.com/ibm/history/ibm100/files/S608123Y18657C60/us__en_us__ibm100__fortran__computer_language_evolution.pdf" rel="nofollow noreferrer">this</a> (each point has a year value) (or vertically) but this <a href="https://stackoverflow.com/questions/39801880/how-to-use-the-pos-argument-in-networkx-to-create-a-flowchart-style-graph">doesn't seem to be possible in NetworkX</a>.  Can anyone confirm that?  A linear flow diagram would seem to me to be a common need.</p>
  
  <p><a href="https://i.stack.imgur.com/1W1zU.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/1W1zU.png" alt="enter image description here"></a></p>
  
  <p>Data in this example:</p>
  
  <pre><code>selected_nodes = [96, 64, 163, 132, 166, 138, 108, 141, 238, 50, 58, 60, 61, 223]
  
  selected_edges = [
      (50, 58),
      (61, 64),
      (60, 64),
      (58, 96),
      (108, 132),
      (96, 141),
      (138, 163),
      (141, 163),
      (64, 166),
      (163, 223),
      (132, 238),
      (96, 238),
      (166, 238),
      (223, 238)
  ]
  
  text_labels = {
      50: u'ALGOL 58 (IAL)',
      58: u'ALGOL 60',
      60: u'COMIT (implementation)',
      61: u'FORTRAN IV',
      64: u'SNOBOL',
      96: u'ALGOL 68 (UNESCO/IFIP standard)',
      108: u'SETL',
      132: u'ABC',
      138: u'Modula',
      141: u'Mesa',
      163: u'Modula-2',
      166: u'Icon (implementation)',
      223: u'Modula-3',
      238: u'Python'
  }
  </code></pre>
  
  <p>Script code</p>
  
  <pre><code># This visualisation creates a network graph 
  # with the spring layout
  
  import networkx as nx
  import matplotlib.pyplot as plt  
  
  G = nx.DiGraph() # Create an empty Graph
  
  G.add_nodes_from(selected_nodes)
  G.add_edges_from(selected_edges)
  
  plt.figure(1,figsize=(15,15))
  #nx.draw(G, node_color='c', edge_color='k', with_labels=True)
  
  pos = nx.spring_layout(G)
  
  plt.figure(1,figsize=(15,15))
  
  nx.draw_networkx_nodes(G, pos, labels=True)
  nx.draw_networkx_edges(G, pos, arrows=True)
  #nx.draw_networkx_labels(G, pos, labels)
  
  for p, values in pos.iteritems():
      x, y = values
      plt.text(x+0.04, y+0.02, s=text_labels[p], horizontalalignment='center')
  
  plt.savefig('lang_predecessors.pdf')
  plt.show()
  </code></pre>