2016-04-28 67 views
0

我有以下組:瞭解輪廓功能

x = 
[[ 0. 1. 2. 3. 4. 5. 6. 7.] 
[ 0. 1. 2. 3. 4. 5. 6. 7.] 
[ 0. 1. 2. 3. 4. 5. 6. 7.] 
[ 0. 1. 2. 3. 4. 5. 6. 7.] 
[ 0. 1. 2. 3. 4. 5. 6. 7.]] 

y= 
[[-0.9 -0.9 -0.9 -0.9 -0.9 -0.9 -0.9 -0.9] 
[ 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1] 
[ 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1] 
[ 2.1 2.1 2.1 2.1 2.1 2.1 2.1 2.1] 
[ 3.1 3.1 3.1 3.1 3.1 3.1 3.1 3.1]] 

Z = 
[[0 0 0 0 0 0 1 1] 
[0 0 0 0 1 1 1 1] 
[0 0 0 1 1 1 1 1] 
[0 2 2 2 2 2 2 2] 
[2 2 2 2 2 2 2 2]] 

我有colors = ('red', 'blue', 'green'),當我使用matplotlib與plt.contour(x, y, Z, colors=colors)畫出輪廓,我得到:

enter image description here

我期望只有三條線將0區域從1區域和2區域分開。爲什麼我有這麼多?

回答

0

matplotlib已在您的點之間進行插值,以便z值的變化更加緩慢。您可以通過將您的xy值繪製爲點(pyplot.plot(x[i][j],y[i][j],'ok'),循環顯示爲ij)來查看此信息。如果你這樣做,你會發現線條都落在點之間,所以它們實際上將區域分成三個區域。

您可以指定使用levels關鍵字參數顯示哪些線路:(你只需要兩行這三個方面分開)

pyplot.contour(x,y,z,levels=[.5,1.5]) 

如果你想看看矩陣元素無需插值,您可以使用matshow:

pyplot.matshow(z)