9

imshow() tarafından görüntülenen bir görüntü, bir kontur ve quiver() tarafından ayarlanan bir vektör alanı oluşan bir rakam var. Vektör alanını başka bir skaler miktara göre renklendirdim. Figürün sağında, colorbar() yaptım. Bu colorbar(), imshow() tarafından görüntülenen değerleri gösterir (durumumda pozitif ve negatif olabilir). Vektörlerin renginin temel aldığı skaler miktarın değerlerine dayanan başka bir renk çubuğunu nasıl kurabileceğimi bilmek isterim. Bunu yapmayı bilen var mı?Matplotlib: Quiver ve imshow üst üste bindirildi, iki renk çubuğunu nasıl ayarlayabilirim?

Yapabileceğim görüntünün bir örneği. Vektörlerin renklerinin maviden kırmızıya gittiğine dikkat edin. Mevcut renk çubuğuna göre, mavi negatif demektir. Ancak, vektörün rengiyle temsil edilen miktarın her zaman pozitif olduğunu biliyorum.

enter image description here

cevap

7

Basitçe sağ her komplo çağrısından sonra, iki kez colorbar diyoruz. Pileb, en yeni arsaya uyan yeni bir renk çubuğu oluşturacak. Örneğinizde olduğu gibi, imshow negatif değerler alırken, titreme değerleri 0,1 aralığındadır. Açıklık için (bu örnekte gösterilmemiştir), iki tür grafiği ayırt etmek için farklı renk haritaları kullanıyorum.

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

Bu kadar basit mi? Cevabınız için teşekkürler! Merak ediyorum: colorbar() hangi verilere bakılacağını nasıl biliyor? Bunu objets perspektifinden yapmak istersam nasıl çalışır? – MCF

+0

@Heimdall, docs: "colorbar uygulamasının uygulandığı Image, ContourSet, vb., Bu argüman colorbar() yöntemi için zorunludur, ancak isteğe bağlı olarak varsayılan görüntüyü ayarlayan colorbar() işlevi için zorunludur." http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.colorbar. Böylece 'colorbar' varsayılan argümanı en son çizilen Sanatçıya koyulmalıdır. Dokümanlar ayrıca, colorbar -> arsa üzerinde daha hassas bir kontrole sahip olmanın bir yolunu önerir. – Hooked

4

mutlaka colorbar() gerektirdiği Haritalanabilir nesnenin türünü dönmez titreme Running. Sanırım bunun nedeni, Heimdall'ın yaptığı gibi “açık bir şekilde başka bir skaler miktara dayanarak vektör alanını renklendirdim”. Bu yüzden, Hooked'in cevabı benim için çalışmadı.

Okumak için renk çubuğum için kendi eşlememi oluşturmam gerekiyordu. Benim titreme vektörleri (ki ben X, Y, U ve V aynı şekle dizisi olan C, arayacağım.)

renklendirmek için kullanmak istediğini verilere matplotlib.colors dan Normalize kullanarak bunu

Benim titreme çağrısı şöyle görünür:

Colorbar işlevine başka argümanlar verilmesi
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') 

bana hataları çeşitli verdi.

My example, where vector color shows third data axis

+0

C renkleri nasıl oluşturduğunuzu gösterir misiniz? Teşekkürler! – pyan

+0

@pyan, bu durumda renk * time * gösteriyordu ve tüm bu argümanlar 1D dizileridir, bu yüzden 'C = dt * np.arange (len (X)) ' – askewchan

+0

gibi bir şey kadar kolaydı. Teşekkürler! Bunun büyüklük veya yön ile ilgili bir şey olduğunu düşündüm. – pyan

İlgili konular