2016-12-05 29 views
0

与えられた関数f(x、y)の等高線図をプロットしようとしていますが、関数の出力が本当に速くなるので、 xとy。フォーラムでは、vmax=vmaxを使用して動作させることができましたが、実際には機能しましたが、xとyの特定の制限とカラーマップのレベルに対してプロットされた場合のみです。 等高線と等高線のスケールを調整する

私はこのプロットを持って言う:

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 

Iが同じスケールを維持軸の範囲を超えていただきました!を明らかにしたいが、私は-3と3にデxとyの制限を変更した場合私が取得:

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

です。最初の例では、matplotlibs LogLocator関数を使用しています。第2のものは、データの対数を直接計算し、通常はそれをプロットします。

3番目の例は、ちょうど第三の例は、私がやろうとしている正確に何である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