2015-09-02 25 views
1

我正在與Python和matplotlib。 我正在做一個從頻譜分析儀獲得的一些數據的連續陰謀。因此,我的循環的每一個新步驟都會添加到我的情節中。保持顏色縮放相同的不同情節 - Python

但我只是意識到顏色縮放不會保持不變。所以有時候如果數據有一點不同會產生一個完全新的比例:

enter image description here

你可以在中間的大紅色圓圈識別。紅色圓圈的條目值全爲零。所以通常它應該與每次新的迭代具有相同的顏色。但正如你所看到的,如果你仔細觀察,情況並非如此。有時候紅色有點黑。

我已經把我的vmin -100和我vmax以0:

while True: 
    ... #some code 

    a = np.linspace((i*np.pi/8-np.pi/16)%(np.pi*2) ,(i*np.pi/8+np.pi/16)%(np.pi*2) , 2)#Angle, circle is divided into 16 pieces 
    b = np.linspace(start -scaleplot, stop,801) #points of the frequency + 200 more points to gain the inner circle 
    A, B = np.meshgrid(a, longzeroarray) 

    ax.contourf(a, b, B , cmap=cm.jet, vmin=-100, vmax=0) 

    plt.draw() 

我希望你有一些有益的想法。

回答

1

可以指定一個固定的levels,例如(來自doc修改):

不能使用vmaxvminlevels一起,因爲前者將覆蓋了後者。爲了避開它,你可以使用屏蔽數組:

import numpy as np 
import matplotlib.pyplot as plt 

origin = 'lower' 
#origin = 'upper' 

delta = 0.025 

x = y = np.arange(-3.0, 3.01, delta) 
X, Y = np.meshgrid(x, y) 
Z1 = plt.mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) 
Z2 = plt.mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1) 
Z = 10 * (Z1 - Z2) 

levels = np.linspace(-3,2,50) 
Vmin = -1. 
Vmax = 1. 
M = np.ma.array(Z, mask=((Z<Vmin)|(Z>Vmax))) 

#levels = np.hstack(([Vmin], levels, [Vmax])) 

f, (ax1, cax1, ax2, cax2) = plt.subplots(1,4,gridspec_kw={'width_ratios':[9,1,9,1]}) 
cf1 = ax1.contourf(X, Y, M, levels=levels) 
plt.colorbar(cf1, cax=cax1) 
cf2 = ax2.contourf(X, Y, M*0.5, levels=levels) 
plt.colorbar(cf2, cax=cax2) 

enter image description here

+0

感謝您的幫助。我理解'levels'部分,但可以解釋我是什麼'f,(ax1,cax1,ax2,cax2)= plt.subplots(1,4,gridspec_kw = {'width_ratios':[9,1,9,1] })? 顏色欄中的選項'cax'是做什麼的? – Peter

+0

還有一件事,我是否還需要'vmin'和'vmax'以及'levels' – Peter

+0

'f,(ax1,cax1,ax2,cax2)= plt.subplots(1,4,gridspec_kw = {'width_ratios':[ 9,1,9,1]})'是連續做4個子圖,寬度比爲9:1:9:1。 'cax'指定了哪些軸的顏色條。關於'vmin'和'vmax',不,他們不會使用'levels',他們會覆蓋它。你想讓邊界之外的值被忽略,還是希望它們與最小或最大值具有相同的顏色? –

相關問題