Make a contour plot at (X, Y) with heights/colors stored in C on the canvas.
        
        if Z is not None: make 3d contour plot at (X, Y, Z) with heights/colors stored in C on the canvas.
        
        the kwargs are plotting library specific kwargs!

def contour(self, canvas, X, Y, C, Z=None, color=None, label=None, **kwargs):
        """
        Make a contour plot at (X, Y) with heights/colors stored in C on the canvas.
        
        if Z is not None: make 3d contour plot at (X, Y, Z) with heights/colors stored in C on the canvas.
        
        the kwargs are plotting library specific kwargs!
        """
        raise NotImplementedError("Implement all plot functions in AbstractPlottingLibrary in order to use your own plotting library")