#http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#surface-plots
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, Y = np.meshgrid(np.arange(-5, 5, 0.25), np.arange(-5, 5, 0.25))
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=False)
ax.set_zlim(-1.01, 1.01)

ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))

fig.colorbar(surf, shrink=0.5, aspect=5)

plt.show()

plt.figure()
i = 20
plt.plot(Z[i,:])

def grad_y(f):
    g = np.zeros(f.shape)
    for i in range(1, f.shape[0]):
        g[i] = f[i]-f[i-1]
    return g
        
plt.figure()
plt.plot(grad_y(Z[i,:]))
plt.show()

