title: How can I speed up rendering of surface plots in matplotlib?
body: <p>I'd like to generate surface plots in Python using <code>matplotlib</code> with around 100x100 points. I'm using the code below just to test it out:</p>
  
  <pre><code>from mpl_toolkits.mplot3d import Axes3D
  from matplotlib import cm
  from matplotlib.ticker import LinearLocator, FormatStrFormatter
  import matplotlib.pyplot as plt
  import numpy as np
  
  fig = plt.figure()
  ax = fig.gca(projection='3d')
  X = np.arange(0, 10, 0.1)
  Y = np.arange(0, 10, 0.1)
  X, Y = np.meshgrid(X, Y)
  R = np.sqrt(X**2 + Y**2)
  Z = np.sin(R)
  surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
          linewidth=0, antialiased=True)
  ax.set_zlim(-1.01, 1.01)
  
  ax.zaxis.set_major_locator(LinearLocator(10))
  ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
  
  plt.show()
  </code></pre>
  
  <p>It all works fine, except for the fact that rotating the plot is very slow - the view changes around once per second, which is less than ideal. Using a wireframe plot instead of a surface plot gives acceptable performance, but it makes the data harder to see and means a colourmap can't be used. (Turning off anti-aliasing actually makes little difference.)</p>
  
  <p>Is there anything I can do to speed it up, even if it's only a little?</p>