title: NetworkX node labels relative position
body: <p>I am struggling with the following problem. I want to plot a circular graph of about 100 nodes where I have to manually position them, according to a classification done previously. These nodes have an assigned label which describes them, with different text lengths, and I want to put this label adjacent to the node. The following graph is what I would want to obtain (I draw the blue circle only to show that the labels are perfectly aligned at the periphery):
  <a href="https://i.stack.imgur.com/Qre0Z.png" rel="noreferrer">https://i.stack.imgur.com/Qre0Z.png</a></p>
  
  <p>So far I have only achieved to draw this:<a href="https://i.stack.imgur.com/U7bZG.png" rel="noreferrer">https://i.stack.imgur.com/U7bZG.png</a></p>
  
  <p>Here is the MWE:</p>
  
  <pre><code>import numpy as np
  import networkx as nx
  import matplotlib.pyplot as plt
  
  n = 7
  G = nx.complete_graph(n)
  node_list = sorted(G.nodes())
  angle = []
  angle_dict = {}
  for i, node in zip(xrange(n),node_list):
      theta = 2.0*np.pi*i/n
      angle.append((np.cos(theta),np.sin(theta)))
      angle_dict[node] = theta
  pos = {}
  for node_i, node in enumerate(node_list):
      pos[node] = angle[node_i]
  
  labels = {0:'zero',1:'oneone',2:'twotwo',3:'threethreethree',4:'fourfourfourfour',5:'fivefivefivefivefive',6:'sixsixsixsixsixsix'}
  
  # figsize is intentionally set small to condense the graph
  f = plt.figure(figsize=(2,2))
  r = f.canvas.get_renderer()
  plt.axis('equal')
  nx.draw(G,pos=pos,with_labels=True)
  description = nx.draw_networkx_labels(G,pos,labels=labels)
  for node, t in description.items():
      t.set_rotation(angle_dict[node]*360.0/(2.0*np.pi))
  plt.show()
  </code></pre>
  
  <p>I guess I have to add and play with</p>
  
  <pre><code>x, y = t.get_position()
  bb = t.get_window_extent(renderer=r)
  radius = 1.0+2.0*bb.width/r.width
  t.set_position((radius*x,radius*y))
  </code></pre>
  
  <p>in the loop where I set the rotation of the labels. However, I don't figure out how to set it properly as well as how to avoid to crop the canvas.</p>