2017-02-22 43 views
1

Допустим, вы имеете следующие numpy.array:Matplotlib: разрезание plt.imshow() соответствует разрезанию массива numpy?

a=numpy.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]) 

которого участок с

import matplotlib.pyplot as plt 
b=plt.imshow(a) 

enter image description here

Мой вопрос: если вы "срез" образ как этот

b=plt.imshow(a) 
plt.xlim(0.5,2.5) 
plt.ylim(0.5,2.5) 

делают нанесенные на график значения соответствуют

a[1:3,1:3]? 

ответ

1

каждой строки и столбца будет охватывать или иметь ширину 1,0. Строки матрицы охватывают ось x, а столбцы матрицы охватывают ось y. Если мы начнем с просмотра строк в матрице, первая запись будет центрирована на 0.0, следующая на 1.0 и т. Д. То же самое для столбцов. Поскольку ширина равна 1,0, можно указать, что первая запись имеет значение от -0,5 до 0,5, а затем от 0,5 до 1,5. Из-за интерполяции на самом деле это будет взвешивание соседних значений матрицы.

Если мы устанавливаем пределы сюжета, как это:

plt.xlim(1,2) 
plt.ylim(1,2) 

мы выбрали бы область между входом 2 и 3 (1 индексируются) в строках и столбцах. Но эти значения равны между значениями матрицы.

Выбор a[1:3,1:3] будет больше похож:

plt.xlim(0.5, 2.5) 
plt.ylim(0.5, 2.5) 
+0

Так, по существу, ваш ответ «да», но мне нужно изменить 'limits' для учета точных позиций значений. Это так? Является ли ваш ответ «да»? – FaCoffee

+0

По существу «да» - пределы должны соответствовать :) –

+0

Нет ли способа поворота интерполяции? –