2016-12-05 152 views
0

我想繪製給定函數f(x,y)的輪廓映射,但由於函數輸出的比例非常快,我失去了很多信息, x和y。我發現在論壇上使用vmax=vmax來解決這個問題,它確實有效,但是隻有繪製了x和y的特定限制以及colormap的級別時纔有效。輪廓和輪廓的比例顏色映射

說我有這樣的情節:

enter image description here

import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
u = np.linspace(-2,2,1000) 
x,y = np.meshgrid(u,u) 
z = (1-x)**2+100*(y-x**2)**2 
cont = plt.contour(x,y,z,500,colors='black',linewidths=.3) 
cont = plt.contourf(x,y,z,500,cmap="jet",vmax=100) 
plt.colorbar(cont) 
plt.show 

我想揭開什麼超出軸極限保持相同的規模,但如果我改變德x和y限制-3和3我得到:

enter image description here

看我怎麼失去了我大部分的水平,因爲我的最大值爲函數在這些限制條件要高得多。解決這個問題的方法是將等級提高到1000,但這需要大量的計算時間。

有沒有一種方法只繪製我需要的等高線?也就是說,從0到100

所希望的輸出的一個例子是:

enter image description here

隨着白色空間是所述曲線的延續,而不調整大小的水平。

我使用的代碼是在第一張圖片後給出的代碼。

回答

1

這裏有幾個可能的想法。我非常喜歡的是數據的對數表示。一個示例是

from matplotlib import ticker 
fig = plt.figure(1) 
cont1 = plt.contourf(x,y,z,cmap="jet",locator=ticker.LogLocator(numticks=10)) 
plt.colorbar(cont1) 
plt.show() 

fig = plt.figure(2) 
cont2 = plt.contourf(x,y,np.log10(z),100,cmap="jet") 
plt.colorbar(cont2) 
plt.show() 

第一個示例使用matplotlib LogLocator函數。第二個只是直接計算數據的對數和通常的繪圖。

第三個例子只是帽以上100

fig = plt.figure(3) 
zcapped = z.copy() 
zcapped[zcapped>100]=100 
cont3 = plt.contourf(x,y,zcapped,100,cmap="jet") 
cbar = plt.colorbar(cont3) 
plt.show() 
+0

所有數據的第三個例子正是我想要做的事。謝謝! – yellow01