2017-09-08 20 views
5

मैं matplotlib लाइब्रेरी का उपयोग करके एक प्लॉट पर एक ही चर के एकाधिक आंकड़े प्लॉट कर रहा हूं। मैंको उप-स्थान के लिए नहीं ढूंढ रहा हूं, जो प्रमुख खोज सामग्री है। मैं कई scatter एस प्लॉट करता हूं, लेकिन colorbar केवल अंतिम स्कैटर I प्लॉट के मानों पर सेट है।एकाधिक स्कैटर प्लॉट्स के लिए एक कलरबार

plt.scatter(x1, y1, c=z1,cmap='viridis_r',marker='s') 
plt.scatter(x2, y2, c=z2,cmap='viridis_r',marker='o') 
plt.scatter(x3, y3, c=z3,cmap='viridis_r',marker='^') 
plt.colorbar().set_label('Wind speed',rotation=270) 
+0

आप' बुला की कोशिश की plt.colorbar है()। '.scatter'? –

+0

हां, लेकिन यह तीन रंगबाल जोड़ता है, जो मैं नहीं ढूंढ रहा हूं। मुझे एक रंगीन रंग की आवश्यकता है जिसमें प्लॉट किए गए स्कैटरप्लॉट्स की सभी श्रेणियां शामिल हों। –

उत्तर

2

यह अतिरिक्त काम का एक सा की आवश्यकता है::

यहाँ कोड का हिस्सा है आप कम से कम और c रों की अधिकतम (colorbar मान) प्राप्त करने के लिए

  • आप clim करने के लिए प्रत्येक बिखराव साजिश

फाई है

zs = np.concatenate([z1, z2, z3], axis=0) 
min_, max_ = zs.min(), zs.max() 

फिर बिखराव भूखंडों clim साथ: न्यूनतम और अधिकतम पहला

plt.scatter(x1, y1, c=z1,cmap='viridis_r',marker='s') 
plt.clim(min_, max_) 
plt.scatter(x2, y2, c=z2,cmap='viridis_r',marker='o') 
plt.clim(min_, max_) 
plt.scatter(x3, y3, c=z3,cmap='viridis_r',marker='^') 
plt.clim(min_, max_) 
plt.colorbar().set_label('Wind speed',rotation=270) 

एक बहुत ही सरल डाटासेट के लिए:

x1, x2, x3 = [1,2,3], [2,3,4], [3,4,5] 
y1 = y2 = y3 = [1, 2, 3] 
z1, z2, z3 = [1,2,3], [4,5,6], [7,8,9] 

enter image description here

+1

ओह धन्यवाद। ऐसा करने के लिए एक साफ तरीका है। –

0

scatter एक norm तर्क है । सभी स्कैटर के लिए उसी norm का उपयोग करना सुनिश्चित करता है कि किसी भी भूखंड (इसलिए अंतिम भी) द्वारा उत्पादित कलरबार सभी स्कैटर प्लॉट के लिए समान है।

normNormalize उदाहरण हो सकता है, जिसमें न्यूनतम और अधिकतम मान सेट किया गया है और जो बीच में रैखिक स्केलिंग उत्पन्न करता है। बेशक आप भी एक के बाद set_label ('हवा की गति', रोटेशन = 270) `PowerNorm, LogNorm तरह matplotlib.colors में किसी भी अन्य नियम, आदि का उपयोग कर सकते

mini, maxi = 0, 2 # or use different method to determine the minimum and maximum to use 
norm = plt.Normalize(mini, maxi) 
plt.scatter(x1, y1, c=z1,cmap='viridis_r',marker='s', norm=norm) 
plt.scatter(x2, y2, c=z2,cmap='viridis_r',marker='o', norm=norm) 
plt.scatter(x3, y3, c=z3,cmap='viridis_r',marker='^', norm=norm) 
plt.colorbar().set_label('Wind speed',rotation=270) 
संबंधित मुद्दे