title: Find and draw regression plane to a set of points
body: <p>I want to fit a plane to some data points and draw it. My current code is this:</p>
  
  <pre><code>import numpy as np
  from mpl_toolkits.mplot3d import Axes3D
  import matplotlib.pyplot as plt
  
  points = [(1.1,2.1,8.1),
            (3.2,4.2,8.0),
            (5.3,1.3,8.2),
            (3.4,2.4,8.3),
            (1.5,4.5,8.0)]
  
  xs, ys, zs = zip(*points)
  
  fig = plt.figure()
  ax = fig.add_subplot(111, projection='3d')
  
  ax.scatter(xs, ys, zs)
  
  point  = np.array([0.0, 0.0, 8.1])
  normal = np.array([0.0, 0.0, 1.0])
  d = -point.dot(normal)
  xx, yy = np.meshgrid([-5,10], [-5,10])
  z = (-normal[0] * xx - normal[1] * yy - d) * 1. /normal[2]
  ax.plot_surface(xx, yy, z, alpha=0.2, color=[0,1,0])
  
  ax.set_xlim(-10,10)
  ax.set_ylim(-10,10)
  ax.set_zlim(  0,10)
  
  plt.show()
  </code></pre>
  
  <p>which results in the following:
  <img src="https://i.stack.imgur.com/PhZRZ.png" alt="manually created plane"></p>
  
  <p>As you can see at the moment I create the plane manually. How can I calculate it? I guess it is possible with <code>scipy.optimize.minimize</code> somehow. The kind of error function is not that important to me at the moment. I think least squares (vertical point-plane-distance) would be fine. It would be cool if one of you could show me how to do it.</p>