2011-10-24 13 views
34

में प्लॉट्स की एक श्रृंखला के लिए मानक रंग पट्टी कैसे बना सकता हूं, मैं पाइथन में कुछ डेटा प्लॉट करने के लिए matplotlib का उपयोग कर रहा हूं और भूखंडों को मानक रंग बार की आवश्यकता होती है। डेटा में एनएक्सएम मैट्रिस की एक श्रृंखला होती है जिसमें आवृत्ति जानकारी होती है ताकि एक साधारण इमशो() साजिश आवृत्ति का वर्णन करने वाले रंग के साथ 2 डी हिस्टोग्राम प्रदान करे। प्रत्येक मैट्रिक्स में डेटा अलग-अलग होता है, लेकिन ओवरलैपिंग श्रेणियां होती हैं। Imshow प्रत्येक मैट्रिक्स में डेटा 0-1 के लिए सामान्यीकृत करता है जिसका अर्थ है कि, उदाहरण के लिए, मैट्रिक्स ए की साजिश मैट्रिक्स 2 * ए की साजिश के समान दिखाई देगी (हालांकि रंग बार मूल्यों को दोगुना दिखाएगा)। मुझे लाल रंग के लिए क्या चाहिए, उदाहरण के लिए, सभी भूखंडों में एक ही आवृत्ति के अनुरूप। दूसरे शब्दों में, सभी भूखंडों के लिए एक रंगीन बार पर्याप्त होगा। किसी भी सुझाव के लिए बहुत आभार होगा।मैं पाइथन

+1

मैं matshow() या pcolor() का उपयोग करना पसंद करता हूं क्योंकि imshow() व्याख्या को कठिन बनाते समय मैट्रिक्स को चिकना करता है। तो जब तक मैट्रिक्स वास्तव में एक छवि नहीं है, तो मेरा सुझाव है कि आप दूसरे दो को आजमाएं। – ianalis

+2

@inalis - यदि आप इंटरपोलेशन नहीं चाहते हैं तो आप 'imshow' का उपयोग करते समय 'इंटरपोलेशन =' निकटतम 'निर्दिष्ट कर सकते हैं। बड़े रंगों के लिए 'इंको' की तुलना में 'रंगीन' बहुत धीमी है, इसलिए बड़े-आइश सरणी के लिए 'इम्शो' का उपयोग करना अक्सर बेहतर होता है। दूसरी ओर, 'रंग' वेक्टर आउटपुट देता है, जो कभी-कभी बहुत आसान हो सकता है। –

+0

[मैप्लोट्लिब 2 सबप्लॉट्स, 1 कलरबार] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/13784201/matplotlib-2-subplots-1-colorbar) –

उत्तर

8

सबसे आसान समाधान प्रत्येक प्लॉट के लिए समान तर्क के साथ क्लाइम (low_limit, upper_limit) को कॉल करना है।

+4

या बस 'vmin' और 'vmax' kwargs को' imshow'। –

68

नहीं @ ianilis के जवाब चोरी करने के लिए है, लेकिन मैं एक उदाहरण जोड़ना चाहते थे ...

कई तरीके हैं, लेकिन सबसे सरल सिर्फ imshow को vmin और vmax kwargs निर्दिष्ट करने के लिए है। वैकल्पिक रूप से, आप matplotlib.cm.Colormap उदाहरण बना सकते हैं और इसे निर्दिष्ट कर सकते हैं, लेकिन यह सरल मामलों के लिए आवश्यक से अधिक जटिल है।

यहाँ सभी छवियों के लिए एक एकल colorbar साथ एक त्वरित उदाहरण है:

import numpy as np 
import matplotlib.pyplot as plt 

# Generate some data that where each slice has a different range 
# (The overall range is from 0 to 2) 
data = np.random.random((4,10,10)) 
data *= np.array([0.5, 1.0, 1.5, 2.0])[:,None,None] 

# Plot each slice as an independent subplot 
fig, axes = plt.subplots(nrows=2, ncols=2) 
for dat, ax in zip(data, axes.flat): 
    # The vmin and vmax arguments specify the color limits 
    im = ax.imshow(dat, vmin=0, vmax=2) 

# Make an axis for the colorbar on the right side 
cax = fig.add_axes([0.9, 0.1, 0.03, 0.8]) 
fig.colorbar(im, cax=cax) 

plt.show() 

enter image description here

1

सवाल का यह एकमात्र जवाब आधा, या बल्कि एक नया एक शुरू होता है। अगर आप बदलना

data *= np.array([0.5, 1.0, 1.5, 2.0])[:,None,None] 

को
data *= np.array([2.0, 1.0, 1.5, 0.5])[:,None,None] 

अपने colorbar 0 से 0.5 के लिए जाना जाएगा जो इस मामले में गहरे नीले रंग के लिए थोड़ा हल्का नीला है और पूरी श्रृंखला कवर नहीं किया जाएगा (0 से 2) । कलरबार केवल vmin और vmax पर ध्यान दिए बिना अंतिम छवि या समोच्च से रंग दिखाएगा।

संबंधित मुद्दे