9

我有一個圖形,由imshow()顯示的圖像,輪廓和由quiver()設置的矢量字段組成。我已經根據另一個標量量化了矢量場。在我的身材右側,我做了一個colorbar()。這colorbar()代表由imshow()顯示的值(在我的情況下,這可能是正值和負值)。我想知道如何設置另一個顏色條,該顏色條將基於矢量顏色基於的標量的值。有誰知道這是怎麼做到的嗎?Matplotlib:箭頭和imshow疊加,我如何設置兩個顏色條?

這是我已經能夠做的圖像的一個例子。請注意,矢量的顏色從藍色變爲紅色。根據當前的顏色條,藍色表示負值。但是我知道,矢量顏色表示的數量總是正數。

enter image description here

回答

7

直接讓colorbar兩次,每次繪製調用之後。 Pylab將創建一個新的配色條到最新的情節。請注意,如您的示例中,箭頭值範圍從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

哦,這是簡單的嗎?感謝您的回答!我很好奇:colorbar()如何知道要查看哪些數據?如果我想從objets的角度來看它是如何工作的? – MCF 2012-08-15 18:33:35

+0

@Heimdall from the docs:「Image,ContourSet等顏色欄應用;該參數對於colorbar()方法是強制性的,但是對於colorbar()函數是可選的,它將默認設置爲當前圖像。 http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.colorbar。因此'colorbar'默認參數必須放入最新繪製的Artist中。該文檔還提供了一種更精細的控制哪個colorbar - > plot的方法。 – Hooked 2012-08-15 18:36:10

4

運行顫動不一定返回可映射對象,它colorbar()需要的類型。我認爲這可能是因爲我明確地「根據另一個標量量化了矢量場」,就像Heimdall所說的那樣。因此,胡克德的回答對我來說並不合適。

我必須創建我自己的顏色欄可讀的映射。我這樣做是通過使用Normalizematplotlib.colors上的數據,我想用上色我顫抖載體(我會打電話給C,這是同形狀的數組作爲XYUV。)

我顫抖調用如下:

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

給予任何其他參數的顏色條功能給了我各種各樣的錯誤。

My example, where vector color shows third data axis

+0

你可以請你說明你如何在C中生成顏色?謝謝! – pyan 2016-03-07 15:32:17

+0

@pyan,在這種情況下,顏色顯示* time *,並且所有這些參數都是1D數組,因此它就像'C = dt * np.arange(len(X))'一樣簡單' – askewchan 2016-03-07 15:48:12

+0

謝謝!我認爲這是與幅度或方向有關的東西。 – pyan 2016-03-07 20:42:25

相關問題