In general, color maps in matplotlib are 1D, that is, they map the scalar to color. To get a 2D map, one would have to somehow come up with a comparison of the two scalars with the color. Although this is possible in principle, it is not as convenient as conventional color cards.
Below is an example where we map two parameters with the red and blue RGB color channels, respectively, and thereby create a 2D map.
import matplotlib.pyplot as plt import numpy as np fig, ax = plt.subplots() ax.set_aspect("equal") x = [1,1,2,2,3,3] # xdata y = [1,2,3,1,2,3] # ydata p1 = [0.2,0.4,.6,.8,.6,.1] # parameter 1 p2 = [0.4,0.5,.7,.1,.3,.7] # parameter 2 # create a very simple colormap, # mapping parameter 1 to the red channel and # parameter 2 to the blue channel cmap = lambda p1,p2 : (p1, 0, p2) # put shapes at positions (x[i], y[i]) and colorize them with our # cmap according to their respective parameters for i in range(len(x)): circle = plt.Circle((x[i], y[i]), 0.5, color=cmap(p1[i],p2[i])) ax.add_artist(circle) tx="p1: {}\np2: {}".format(p1[i],p2[i]) # create a label ax.text(x[i], y[i], tx, ha="center", color="w", va="center") ax.set_xlim(0,4) ax.set_ylim(0,4) ax.set_xlabel("x") ax.set_ylabel("y") # create the legend: plt.subplots_adjust(left=0.1, right=0.65, top=0.85) cax = fig.add_axes([0.7,0.55,0.3,0.3]) cp1 = np.linspace(0,1) cp2 = np.linspace(0,1) Cp1, Cp2 = np.meshgrid(cp1,cp2) C0 = np.zeros_like(Cp1) # make RGB image, p1 to red channel, p2 to blue channel Legend = np.dstack((Cp1, C0, Cp2)) # parameters range between 0 and 1 cax.imshow(Legend, origin="lower", extent=[0,1,0,1]) cax.set_xlabel("p1") cax.set_ylabel("p2") cax.set_title("2D cmap legend", fontsize=10) plt.show()

This scheme, of course, can be extended to other (more complex) color maps, as well as graphic images or pcolormesh. In addition, using the HSV color scheme can be advantageous over RGB, so matplotlib.colors.hsv_to_rgb(hsv) can be useful.