2016-04-28 2 views
0

У меня есть следующие наборы:Понимание функции контура в Matplotlib

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 изменяется более постепенно. Вы можете увидеть это, построив ваши значения x и y в виде точек (pyplot.plot(x[i][j],y[i][j],'ok'), перевернув i и j). Если вы сделаете это, вы увидите, что линии все падают между точками, поэтому они фактически разделяют область на три области.

Вы можете указать, какие строки, чтобы показать с помощью аргумента levels ключевого слова: (. Вам нужно всего лишь две линии, чтобы разделить эти три области)

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

Если вы хотите посмотреть на матричные элементы без интерполяции, Вы можете использовать matshow:

pyplot.matshow(z) 
Смежные вопросы