2014-11-14 142 views
2

我想創建一個輪廓,以便用戶可以指定一個輪廓範圍,以便他們可以專注於某個值範圍。根據數據的不同,用戶指定範圍之外會有值。我適應這個代碼來說明我的問題:Matplotlib顏色條擴展,顯示值

Python/Matplotlib - Colorbar Range and Display Values

此代碼重複值從0到2,但我已經設置了輪廓範圍「V」(0.1至1.5),因此,將有外的值輪廓,我使用擴展(extend = both)來擴展輪廓,使得超出範圍的值顯示爲顏色(以確保沒有白色區域)。我想要的是在等高線範圍外顯示輪廓範圍外的最大值(2)和最小值(-0.1),以便它們也出現在比例尺上,我該怎麼做?

在較少有另一種方式

import numpy as np 
import matplotlib.pyplot as plt 
xi = np.array([0., 0.5, 1.0]) 
yi = np.array([0., 0.5, 1.0]) 
zi = np.array([[0., 1.0, 2.0],[0., 1.0, 2.0],[-0.1, 1.0, 2.0]]) 
v = np.linspace(0.1, 1.5, 10, endpoint=True)#set so that there are values outside contour 
plt.contour(xi, yi, zi, v, linewidths=0.5, colors='k') 
plt.contourf(xi, yi, zi, v, cmap=plt.cm.jet,extend='both') 
cbar=plt.colorbar(ticks=v,extendrect='True') 
plt.show() 

see image

我要的是數據和數據的最大值最小值顯示的擴展。

我修改了輪廓標籤的代碼,以包含輪廓的最小值,輪廓等級和輪廓的最大值。顏色條上沒有出現最小值和最大值(更新後的圖像)zi.min()爲-0.1,zi.max()爲2.
我調查了y-ticks: print cbar.ax.get_yticks ():生成值0到1 print cbar.ax.get_ylim():生成值-0.11和1.11(擴展條的末端)

如何獲取最小值和最大值以顯示?我可以使用yticks/ylim信息嗎?

import numpy as np 
import matplotlib.pyplot as plt 

xi = np.array([0., 0.5, 1.0]) 
yi = np.array([0., 0.5, 1.0]) 
zi = np.array([[0., 1.0, 2.0], 
       [0., 1.0, 2.0], 
       [-0.1, 1.0, 2.0]]) 
v = np.linspace(0.1, 1.5, 10, endpoint=True)#contour levels 
plt.contour(xi, yi, zi, v, linewidths=0.5, colors='k') 
plt.contourf(xi, yi, zi, v, cmap=plt.cm.jet,extend='both') 
cbarticks=np.hstack([zi.min(),v,zi.max()])#contour tick labels 
cbar=plt.colorbar(ticks=cbarticks,extendrect='True',extendfrac='auto',spacing='proportional') 
print cbar.ax.get_ylim() 
print cbar.ax.get_yticks()# 
plt.show() 

enter image description here

回答

0
xi = np.array([0., 0.5, 1.0]) 
yi = np.array([0., 0.5, 1.0]) 
zi = np.array([[0., 1.0, 2.0],[0., 1.0, 2.0],[-0.1, 1.0, 2.0]]) 
v = np.linspace(0.1, 1.5, 10, endpoint=True) 
tick = v.flatten() 
tick = np.insert(tick,[0,10],[-0.1, 2.0]) 
CS = plt.contourf(xi, yi, zi, len(tick), cmap=plt.cm.jet, levels=tick) 
C = plt.contour(xi, yi, zi, len(tick), colors='black', levels=tick) 
plt.colorbar(CS, shrink=0.5, aspect=5, ticks=tick) 
plt.show() 

Result Plot

+0

謝謝您的建議抽動,但這不是我想要的。沒有辦法只編輯刻度標籤,以便輪廓標籤上顯示輪廓外的最大值和最小值。這是因爲我的程序允許用戶更改級別數量和輪廓範圍,以便他們可以在某個輪廓範圍內磨合,但我想顯示異常值 – Jay 2014-11-16 00:04:46

+0

當您使用extend ='both'時,它將值擴展爲-inf和inf兩側。查看'print CS.cvalues'的輸出 – 2014-11-16 07:47:44

0

說你有從希望把重點放在z值的特定範圍用戶輸入從數據zminzmaxuminumax

你應該能夠定義和使用從stdcm=pl.cm.whatever開始自定義顏色映射,像這樣

blue  blue ---------- red  red 
zmin  umin    umax  zmax 

,並最終明確指定的顏色條

cbtics = [zmin]+[umin+i*(umax-umin)/n for i in range(n+1)]+[zmax]