2016-02-08 122 views
1

下面是我的代碼和情節:位置的輪廓線

import matplotlib 
import matplotlib.mlab as mlab 
import matplotlib.cm as cm 
import matplotlib.pyplot as plt 
import numpy as np 
%matplotlib inline 

delta = 0.00025 
A=0 
x = np.arange(0, 0.10, delta) 
y = np.arange(0, 0.1, delta) 
X, Y = np.meshgrid(x, y) 
Z = A*(X**2+Y**2)+2*X*Y 

manual_locations = [(0.1,0.1), (0.2,0.2), (0.3,0.3), 
        (0.015, 0.015), (0.00255, 0.0025), (0.00005,0.00005)] 
line_widths = (1, 1, 1, 1, 1, 1) 

plt.figure() 
CS = plt.contour(X, Y, Z, 6,      # add 6 contour lines 
       linewidths=line_widths,   # line widths 
       colors = line_colours)    # line colours 

plt.clabel(CS, inline=1,       # add labels 
      fontsize=10,        # label font size 
      manual=manual_locations)     # label locations 
plt.title('Indifference Map')  # title 

plt.show() 

enter image description here

看來我manual_locations什麼都不做,自動挑選蟒等距輪廓線。雖然我想調查更多的細節。我怎樣才能看到更多的曲線/輪廓線收斂到(0,0)? 在此先感謝。

回答

2

探索更多細節部分數據的最簡單方法是使用levels。這設置要檢查的Z值,並且在您的問題中將此短語描述爲要檢查的(x,y)位置,但它與contour如何工作以直接指定位置點相反。

您還可以通過適當地更改圖的邊界來檢查(0,0)區域。

下面我使用levels的對數值,但線性值工作得很好,更爲常見,而且更易於解釋。對數值只是容易強調你最感興趣的陰謀的一部分。

enter image description here

import matplotlib 
import matplotlib.mlab as mlab 
import matplotlib.cm as cm 
import matplotlib.pyplot as plt 
import numpy as np 
#%matplotlib inline 

delta = 0.00025 
A=0 
x = np.arange(0, 0.10, delta) 
y = np.arange(0, 0.1, delta) 
X, Y = np.meshgrid(x, y) 
Z = A*(X**2+Y**2)+2*X*Y 

manual_locations = [(0.1,0.1), (0.2,0.2), (0.3,0.3), 
        (0.015, 0.015), (0.00255, 0.0025), (0.00005,0.00005)] 
line_widths = (1, 1, 1, 1, 1, 1) 

plt.figure() 
CS = plt.contour(X, Y, Z, 6,      # add 6 contour lines 
       linewidths=line_widths, 
       #levels=np.linspace(0, .003, 20)) 
       levels=np.logspace(-5, -2, 20)) 

plt.clabel(CS, inline=1,       # add labels 
      fontsize=10, 
      fmt="%.5f") 
plt.title('Indifference Map')  # title 

plt.show() 

如果你真正需要的輪廓在特定的位置,你可以把(X,Y)將該位置的值輸入到等式中以計算該位置的z值,然後將此值用作levels參數中的一個值。