matplotlib में सामान्य colormaps में 1 डी हैं, यानी वे एक रंग के लिए एक स्केलर मानचित्र। 2 डी कोलोराप प्राप्त करने के लिए किसी को किसी रंग में दो स्केलर के मानचित्रण का आविष्कार करने की आवश्यकता होगी। हालांकि यह सिद्धांत रूप में संभव है, यह सामान्य colormaps के रूप में सुविधाजनक नहीं है।
एक उदाहरण नीचे है, जहां हम क्रमशः लाल और नीले आरजीबी रंग चैनल में दो पैरामीटर मैप करते हैं और इस प्रकार 2 डी कोलोराप बनाते हैं।
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()
यह योजना निश्चित रूप से अन्य (अधिक जटिल) colormappings लिए बढ़ाया जा सकता है और यह भी imshow या pcolormesh भूखंडों के लिए। इसके अलावा, HSV colorscheme का उपयोग आरजीबी की तुलना में फायदेमंद हो सकता है, इसलिए matplotlib.colors.hsv_to_rgb(hsv)
सहायक हो सकता है।
संबंधित (निश्चित रूप से डुप्ली नहीं) http://stackoverflow.com/q/10958835/2988730 –
विशेष रूप से दूसरा उत्तर http://stackoverflow.com/a/10992313/2988730 –
आप अपने स्वयं के रंगरूप को लागू करने का भी प्रयास कर सकते हैं एक्स और वाई को एक पैरामीटर के रूप में एन्कोड किया जाता है, उदाहरण के लिए एक जटिल संख्या, और एक ऐसा फ़ंक्शन है जो उस एन्कोडेड मान को वापस कर देता है। –