2017-01-31 10 views
5

के साथ मैं रंगों का उपयोग कर मानचित्र पर दो चर x और y का प्रतिनिधित्व करने की कोशिश कर रहा हूं।Matplotlib Colormap दो पैरामीटर

अब तक का सबसे अच्छा मैं एक चर के लिए रंग और दूसरे के लिए transparancy के लिए रंग का उपयोग कर सकते हैं।

plt.Polygon(shape.points, fill=False, color=cmap(y), alpha=x)

यह matplotlib कि दो चर लेता है में एक 2 डी रंग मैप बनाने के लिए संभव है?

+0

संबंधित (निश्चित रूप से डुप्ली नहीं) http://stackoverflow.com/q/10958835/2988730 –

+0

विशेष रूप से दूसरा उत्तर http://stackoverflow.com/a/10992313/2988730 –

+0

आप अपने स्वयं के रंगरूप को लागू करने का भी प्रयास कर सकते हैं एक्स और वाई को एक पैरामीटर के रूप में एन्कोड किया जाता है, उदाहरण के लिए एक जटिल संख्या, और एक ऐसा फ़ंक्शन है जो उस एन्कोडेड मान को वापस कर देता है। –

उत्तर

3

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() 

enter image description here

यह योजना निश्चित रूप से अन्य (अधिक जटिल) colormappings लिए बढ़ाया जा सकता है और यह भी imshow या pcolormesh भूखंडों के लिए। इसके अलावा, HSV colorscheme का उपयोग आरजीबी की तुलना में फायदेमंद हो सकता है, इसलिए matplotlib.colors.hsv_to_rgb(hsv) सहायक हो सकता है।