Plot a surface for 3d plotting for the inputs (X, Y, Z).
        
        the kwargs are plotting library specific kwargs!

def surface(self, canvas, X, Y, Z, color=None, label=None, **kwargs):
        """
        Plot a surface for 3d plotting for the inputs (X, Y, Z).
        
        the kwargs are plotting library specific kwargs!
        """
        raise NotImplementedError("Implement all plot functions in AbstractPlottingLibrary in order to use your own plotting library")