title: Label python data points on plot
body: <p>I searched for ages (hours which is like ages) to find the answer to a really annoying (seemingly basic) problem, and because I cant find a question that quite fits the answer I am posting a question and answering it in the hope that it will save someone else the huge amount of time I just spent on my noobie plotting skills. </p>
  
  <p>If you want to label your plot points using python matplotlib</p>
  
  <pre><code>from matplotlib import pyplot as plt
  
  fig = plt.figure()
  ax = fig.add_subplot(111)
  
  A = anyarray
  B = anyotherarray
  
  plt.plot(A,B)
  for i,j in zip(A,B):
      ax.annotate('%s)' %j, xy=(i,j), xytext=(30,0), textcoords='offset points')
      ax.annotate('(%s,' %i, xy=(i,j))
  
  plt.grid()
  plt.show()
  </code></pre>
  
  <p>I know that xytext=(30,0) goes along with the textcoords, you use those 30,0 values to position the data label point, so its on the 0 y axis and 30 over on the x axis on its own little area. </p>
  
  <p>You need both the lines plotting i and j otherwise you only plot x or y data label. </p>
  
  <p>You get something like this out (note the labels only):<br>
  <img src="https://i.stack.imgur.com/6jr6C.png" alt="My own plot with data points labeled"></p>
  
  <p>Its not ideal, there is still some overlap - but its better than nothing which is what I had.. </p>