Im Allgemeinen sind Colormaps in Matplotlib 1D, d. H. Sie bilden einen Skalar zu einer Farbe ab. Um eine 2D Colormap zu erhalten, müsste man irgendwie eine Zuordnung von zwei Skalaren zu einer Farbe erfinden. Obwohl dies prinzipiell möglich ist, ist es nicht so praktisch wie die üblichen Colormaps.
Unten finden Sie ein Beispiel, in dem wir zwei Parameter dem roten und blauen RGB-Farbkanal zuordnen und dadurch eine 2D-Farbkarte erstellen.
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()
Dieses Schema kann natürlich auf andere (kompliziertere) colormappings erweitert werden und auch Plots imshow oder pcolormesh. Auch die Verwendung des HSV colorscheme kann im Vergleich zu RGB vorteilhaft sein, so dass matplotlib.colors.hsv_to_rgb(hsv)
hilfreich sein könnte.
Ähnliche (definitiv nicht dupe) http://stackoverflow.com/q/10958835/2988730 –
Konkret die zweite Antwort http://stackoverflow.com/a/10992313/2988730 –
Sie könnten auch versuchen, Ihre eigene Colormap, dass implementieren Nimmt x und y kodiert als einen einzelnen Parameter auf, z eine komplexe Zahl und eine Funktion, die diesen codierten Wert zurückgibt. –