# This scripts is doing...
# Patrick Kuehl, date
import time
from pylab import *
from datetime import datetime
import matplotlib.pyplot as plt
import numpy as np
import numpy.ma as ma
from matplotlib.colors import LogNorm
from scipy.optimize import leastsq
from matplotlib import dates
import time
import datetime as date
from datetime import datetime
from datetime import timedelta
import os
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning) 
from matplotlib.backends.backend_pdf import PdfPages
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt




def grayify_cmap(cmap):
    """Return a grayscale version of the colormap"""
    cmap = plt.cm.get_cmap(cmap)
    colors = cmap(np.arange(cmap.N))
    
    # convert RGBA to perceived greyscale luminance
    # cf. http://alienryderflex.com/hsp.html
    RGB_weight = [0.299, 0.587, 0.114]
    luminance = np.sqrt(np.dot(colors[:, :3] ** 2, RGB_weight))
    colors[:, :3] = luminance[:, np.newaxis]
    
    return cmap.from_list(cmap.name + "_grayscale", colors, cmap.N)


myx=np.linspace(0,100)
myy=np.linspace(0,10,100)

data=np.random.rand(len(myy),len(myx))+3*np.sin(myx/100*2*np.pi)+10


fig=plt.figure(figsize=(8,6))
ax = fig.gca(projection='3d')
ax.set_position([-0.09,0.01,1.07,1.04])

x,y=meshgrid(myx,myy)



##### normal plot

surf = ax.plot_surface(x,y,data, rstride=1, cstride=1, cmap=cm.rainbow,linewidth=0.1, antialiased=True)

##### or in black / white
"""
surf = ax.plot_surface(x,y,data, rstride=1, cstride=1, cmap=grayify_cmap(cm.rainbow),linewidth=0.1, antialiased=True)
"""
#### or for logarithmic scale
"""
surf = ax.plot_surface(x,y,np.log10(data), rstride=1, cstride=1, cmap=cm.rainbow,linewidth=0.1, antialiased=True)
ax.set_zlim(np.log10(np.min(data)),np.log10(np.max(data)))
ax.set_zticks([np.log10(0.03), np.log10(0.06), np.log10(0.1), np.log10(0.2), np.log10(0.3)])
ax.set_zticklabels(["0.03", "0.06", "0.1","0.2", "0.3"])
"""



#ax.set_ylim(1700,210)
ax.xaxis._axinfo['label']['space_factor'] = 1.8
ax.yaxis._axinfo['label']['space_factor'] = 1.8
ax.zaxis._axinfo['label']['space_factor'] = 1.7
plt.xlabel("X")
plt.ylabel("Y")
ax.set_zlabel("Z")
plt.show()





