title: Calculating Matplotlib Text Rotation
body: <p>I'm trying to figure out how to rotate text in matplotlib to align to a curve in a plot, but I haven't figured what transformations give the proper coordinate system for rotating text to match a specific slope in data coordinates.  Here's a minimal example of drawing a line and trying to align some text along it:</p>
  
  <pre><code># Make some really non-square figure
  plt.figure(figsize=(2,5))
  
  # Draw some line between two points
  pB=np.array((0,0))
  pA=np.array((1,2))
  pC=(pA+pB)/2
  plt.plot(*zip(pA,pB))
  
  # All the transforms at our disposal
  tD=plt.gca().transData
  tA=plt.gca().transAxes
  tF=plt.gcf().transFigure
  
  # Transform the endpoints of the line two some coordinate system
  pA,pB=[
          ##### What goes here???
          p    # &lt;- trivial no transform
          #tD.transform(p)
          #tA.inverted().transform(tD.transform(p))
          #tF.inverted().transform(tD.transform(p))
      for p in (pA,pB)]
  
  # Then calculate the angle of the line
  rise,run=pA-pB
  rot=(180/np.pi)*np.arctan(rise/run)
  
  # Draw some text at that angle
  plt.text(pC[0],pC[1],'hi there',rotation=rot,
           horizontalalignment='center',verticalalignment='bottom');
  </code></pre>
  
  <p>No matter what I try, the text is still misoriented:</p>
  
  <p>[this image is for the no-transform case above, rendered by the <code>%matplotlib inline</code> option in a Jupyter notebook.]</p>
  
  <p><a href="https://i.stack.imgur.com/vtwwt.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/vtwwt.png" alt="enter image description here"></a></p>