title: Quiver plot arrow aspect ratio
body: <p>I am having some issues with Matplotlib's quiver plot. Given a velocity vector field, I want to plot the velocity vectors on top of the stream lines. The vectors are not tangent to the stream function as expected.</p>
  
  <p>To calculate the stream function, I use a Python translated version of Dr. Pankratov's Matlab code available at <a href="http://www-pord.ucsd.edu/~matlab/stream.htm" rel="noreferrer">http://www-pord.ucsd.edu/~matlab/stream.htm</a> (mine will be available soon at GitHub).</p>
  
  <p>Using its results, I use this code:</p>
  
  <pre><code>import numpy
  import pylab
  
  # Regular grid coordineates, velocity field and stream function
  x, y = numpy.meshgrid(numpy.arange(0, 21), numpy.arange(0, 11))
  u = numpy.array([[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
          27, 28, 29, 30],
         [ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
          26, 27, 28, 29],
         [ 8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
          25, 26, 27, 28],
         [ 7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
          24, 25, 26, 27],
         [ 6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
          23, 24, 25, 26],
         [ 5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
          22, 23, 24, 25],
         [ 4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
          21, 22, 23, 24],
         [ 3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
          20, 21, 22, 23],
         [ 2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
          19, 20, 21, 22],
         [ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
          18, 19, 20, 21],
         [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
          17, 18, 19, 20]])
  v = numpy.array([[  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,
           13,  14,  15,  16,  17,  18,  19,  20],
         [ -1,   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,
           12,  13,  14,  15,  16,  17,  18,  19],
         [ -2,  -1,   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,
           11,  12,  13,  14,  15,  16,  17,  18],
         [ -3,  -2,  -1,   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,
           10,  11,  12,  13,  14,  15,  16,  17],
         [ -4,  -3,  -2,  -1,   0,   1,   2,   3,   4,   5,   6,   7,   8,
            9,  10,  11,  12,  13,  14,  15,  16],
         [ -5,  -4,  -3,  -2,  -1,   0,   1,   2,   3,   4,   5,   6,   7,
            8,   9,  10,  11,  12,  13,  14,  15],
         [ -6,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,   3,   4,   5,   6,
            7,   8,   9,  10,  11,  12,  13,  14],
         [ -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,   3,   4,   5,
            6,   7,   8,   9,  10,  11,  12,  13],
         [ -8,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,   3,   4,
            5,   6,   7,   8,   9,  10,  11,  12],
         [ -9,  -8,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,   3,
            4,   5,   6,   7,   8,   9,  10,  11],
         [-10,  -9,  -8,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,
            3,   4,   5,   6,   7,   8,   9,  10]])
  psi = numpy.array([[   0. ,    0.5,    2. ,    4.5,    8. ,   12.5,   18. ,   24.5,
            32. ,   40.5,   50. ,   60.5,   72. ,   84.5,   98. ,  112.5,
           128. ,  144.5,  162. ,  180.5,  200. ],
         [  -9.5,  -10. ,   -9.5,   -8. ,   -5.5,   -2. ,    2.5,    8. ,
            14.5,   22. ,   30.5,   40. ,   50.5,   62. ,   74.5,   88. ,
           102.5,  118. ,  134.5,  152. ,  170.5],
         [ -18. ,  -19.5,  -20. ,  -19.5,  -18. ,  -15.5,  -12. ,   -7.5,
            -2. ,    4.5,   12. ,   20.5,   30. ,   40.5,   52. ,   64.5,
            78. ,   92.5,  108. ,  124.5,  142. ],
         [ -25.5,  -28. ,  -29.5,  -30. ,  -29.5,  -28. ,  -25.5,  -22. ,
           -17.5,  -12. ,   -5.5,    2. ,   10.5,   20. ,   30.5,   42. ,
            54.5,   68. ,   82.5,   98. ,  114.5],
         [ -32. ,  -35.5,  -38. ,  -39.5,  -40. ,  -39.5,  -38. ,  -35.5,
           -32. ,  -27.5,  -22. ,  -15.5,   -8. ,    0.5,   10. ,   20.5,
            32. ,   44.5,   58. ,   72.5,   88. ],
         [ -37.5,  -42. ,  -45.5,  -48. ,  -49.5,  -50. ,  -49.5,  -48. ,
           -45.5,  -42. ,  -37.5,  -32. ,  -25.5,  -18. ,   -9.5,    0. ,
            10.5,   22. ,   34.5,   48. ,   62.5],
         [ -42. ,  -47.5,  -52. ,  -55.5,  -58. ,  -59.5,  -60. ,  -59.5,
           -58. ,  -55.5,  -52. ,  -47.5,  -42. ,  -35.5,  -28. ,  -19.5,
           -10. ,    0.5,   12. ,   24.5,   38. ],
         [ -45.5,  -52. ,  -57.5,  -62. ,  -65.5,  -68. ,  -69.5,  -70. ,
           -69.5,  -68. ,  -65.5,  -62. ,  -57.5,  -52. ,  -45.5,  -38. ,
           -29.5,  -20. ,   -9.5,    2. ,   14.5],
         [ -48. ,  -55.5,  -62. ,  -67.5,  -72. ,  -75.5,  -78. ,  -79.5,
           -80. ,  -79.5,  -78. ,  -75.5,  -72. ,  -67.5,  -62. ,  -55.5,
           -48. ,  -39.5,  -30. ,  -19.5,   -8. ],
         [ -49.5,  -58. ,  -65.5,  -72. ,  -77.5,  -82. ,  -85.5,  -88. ,
           -89.5,  -90. ,  -89.5,  -88. ,  -85.5,  -82. ,  -77.5,  -72. ,
           -65.5,  -58. ,  -49.5,  -40. ,  -29.5],
         [ -50. ,  -59.5,  -68. ,  -75.5,  -82. ,  -87.5,  -92. ,  -95.5,
           -98. ,  -99.5, -100. ,  -99.5,  -98. ,  -95.5,  -92. ,  -87.5,
           -82. ,  -75.5,  -68. ,  -59.5,  -50. ]])
  
  # The plots!
  pylab.close('all')
  pylab.ion()
  pylab.figure(figsize=[8, 8])
  pylab.contour(x, y, psi, 20, colors='k', linestyles='-', linewidth=1.0)
  pylab.quiver(x, y, u, v, angles='uv', scale_units='xy', scale=10)
  
  ax = pylab.axes()
  ax.set_aspect(1.)
  </code></pre>
  
  <p>to produce the following result to illustrate my issues.</p>
  
  <p><img src="https://i.stack.imgur.com/QcWRz.png" alt="Any velocity field and its stream function \Psi, vectors with unexpected aspect ratio"></p>
  
  <p>Apparently the calculations are fine, but the velocity vectors are not tangent to the stream function, as expected. Using the exact save values, Matlab produces a quiver plot that shows exactly what I want. In my case, setting the aspect ratio to one gives me the desired result, but forces the axes rectangle to have a specific aspect ratio.</p>
  
  <pre><code>ax = pylab.axes()
  ax.set_aspect(1.)
  </code></pre>
  
  <p>I have already unsuccessfully tried different arguments like 'units', 'angles' or 'scale'.</p>
  
  <p>Does anybody know how to produce quiver plots which adapt to the canvas' aspect ratio and are still tangent to my contour lines, as expected?</p>
  
  <p>I expect a result similar as this (note how the vectors are tangent to the stream lines):
  <img src="https://i.stack.imgur.com/mlQxD.png" alt="Any velocity field and its stream function \Psi using Matlab, vectors with expected aspect ratio"></p>
  
  <p>Thanks a lot!</p>