9

मेरे पास एक ऐसा चित्र है जिसमें imshow() द्वारा प्रदर्शित एक छवि शामिल है, quiver() द्वारा निर्धारित एक समोच्च और वेक्टर फ़ील्ड। मैंने एक और स्केलर मात्रा के आधार पर वेक्टर क्षेत्र रंग दिया है। मेरे आंकड़े के दाईं ओर, मैंने colorbar() बनाया है। यह colorbar()imshow() द्वारा प्रदर्शित मानों का प्रतिनिधित्व करता है (जो मेरे मामले में सकारात्मक और नकारात्मक हो सकता है)। मैं जानना चाहता हूं कि मैं एक और कलरबार कैसे स्थापित कर सकता हूं जो स्केलर मात्रा के मूल्यों पर आधारित होगा जिस पर वैक्टर का रंग आधारित है। क्या किसी को पता है यह कैसे किया जाता है?Matplotlib: quiver और imshow superimposed, मैं दो colorbars कैसे सेट कर सकते हैं?

यहां छवि का एक उदाहरण दिया गया है जिसे मैं करने में सक्षम हूं। ध्यान दें कि वैक्टर के रंग नीले से लाल हो जाते हैं। वर्तमान कलरबार के अनुसार, नीला नकारात्मक है। हालांकि मुझे पता है कि वेक्टर के रंग द्वारा प्रतिनिधित्व मात्रा हमेशा सकारात्मक होती है।

enter image description here

उत्तर

7

सीधे शब्दों में colorbar दो बार फोन, सही प्रत्येक साजिश रचने कॉल के बाद। पिलैब नवीनतम साजिश से मेल खाने वाला एक नया रंगीन पट्टी तैयार करेगा। ध्यान दें, जैसा कि आपके उदाहरण में, क्विवर मान 0,1 से हैं जबकि imshow नकारात्मक मान लेता है। स्पष्टता के लिए (इस उदाहरण में नहीं दिखाया गया है), मैं दो प्रकार के भूखंडों को अलग करने के लिए विभिन्न रंगमंच का उपयोग करता हूं।

import numpy as np 
import pylab as plt 

# Create some sample data 
dx = np.linspace(0,1,20) 
X,Y = np.meshgrid(dx,dx) 
Z = X**2 - Y 
Z2 = X 

plt.imshow(Z) 
plt.colorbar() 

plt.quiver(X,Y,Z2,width=.01,linewidth=1) 
plt.colorbar() 

plt.show() 

enter image description here

+0

ओह यह इतना आसान है? आपके उत्तर के लिए धन्यवाद! मैं उत्सुक हूं: रंगीन() कैसे जानता है कि कौन सा डेटा देखना है? अगर मैं इसे objets परिप्रेक्ष्य से करना चाहता हूं तो यह कैसे काम करता है? – MCF

+0

@ हेमडल डॉक्स से: "छवि, कंटूरसेट इत्यादि, जिस पर रंग पट्टी लागू होती है; यह तर्क रंगबार() विधि के लिए अनिवार्य है लेकिन कलरबार() फ़ंक्शन के लिए वैकल्पिक है, जो वर्तमान छवि को डिफ़ॉल्ट सेट करता है।" http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.colorbar। इस प्रकार 'रंगीन' डिफ़ॉल्ट तर्क नवीनतम तैयार कलाकार में डालना चाहिए। दस्तावेज़ भी रंगीन -> साजिश पर अधिक बढ़िया दाग नियंत्रण रखने का एक तरीका सुझाते हैं। – Hooked

4

तरकश रनिंग जरूरी mappable वस्तु के प्रकार है कि colorbar() की आवश्यकता है वापस नहीं करता है। मुझे लगता है कि ऐसा इसलिए हो सकता है क्योंकि मैंने स्पष्ट रूप से "एक और स्केलर मात्रा के आधार पर वेक्टर फ़ील्ड रंग दिया है" जैसे हीमडल ने कहा है कि उन्होंने किया था। इसलिए, हुकड का जवाब मेरे लिए काम नहीं करता था।

मुझे रंगीन बार पढ़ने के लिए अपना स्वयं का मैपबल बनाना था। मैं matplotlib.colors डेटा पर से Normalize का उपयोग करके ऐसा किया कि मैं अपने तरकश वैक्टर (जो मैं C, जो X, Y, U, और V रूप में एक ही आकार की एक सरणी है फोन करता हूँ।)

रंग करने के लिए उपयोग करना चाहता था

मेरे तरकश कॉल इस तरह दिखता है:

import matplotlib.pyplot as pl 
import matplotlib.cm as cm 
import matplotlib.colors as mcolors 
import matplotlib.colorbar as mcolorbar 
pl.figure() 

nz = mcolors.Normalize() 
nz.autoscale(C) 

pl.quiver(X, Y, U, V, color=cm.jet(nz(C))) 
cax,_ = mcolorbar.make_axes(pl.gca()) 
cb = mcolorbar.ColorbarBase(cax, cmap=cm.jet, norm=nz) 
cb.set_label('color data meaning') 

colorbar कार्य करने के लिए किसी अन्य तर्क देते हुए मुझे त्रुटियों की एक किस्म दे दी है।

My example, where vector color shows third data axis

+0

क्या आप कृपया दिखा सकते हैं कि आपने सी में रंग कैसे उत्पन्न किए? धन्यवाद! – pyan

+0

@pyan, उस मामले में रंग * समय * दिखा रहा था, और ये सभी तर्क 1 डी सरणी हैं, इसलिए यह 'सी = डीटी * एनपी.एरेंज (लेन (एक्स))' – askewchan

+0

जैसे कुछ आसान था! मैंने सोचा कि यह परिमाण या दिशा से संबंधित कुछ था। – pyan

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