Пиксели обрезаются при использовании matplotlib imshow в Jupyter Notebook - PullRequest
0 голосов
/ 31 октября 2019

Я использовал pyplot.imshow много раз, но в прошлом я никогда не сталкивался с этой проблемой при построении таблиц значений с помощью imshow. При построении небольшого изображения с метками / метками, отрегулированными так, чтобы они располагались в центре каждого края пикселя, полученное изображение обрезает половину верхнего и нижнего рядов пикселей.

В идеале, я бы выбрал галочки иметки по центру по краям каждого пикселя, и все пиксели будут отображаться в полном квадрате без обрезания.

Я использую ноутбук Jupyter с этим рабочим примером:

%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots(1,2)
ax[0].imshow(np.arange(9).reshape((3,3)))
ax[0].set(xticks=np.arange(3),
          xticklabels=['D', 'E', 'F'], yticklabels=['', 'A', '', 'B', '', 'C' ''])
ax[0].set_title('Pixels with undesirable ticks')

im1 = ax[1].imshow(np.arange(9).reshape((3,3)))
ax[1].set(xticks=np.arange(3), yticks=np.arange(3),
       xticklabels=['D', 'E', 'F'], yticklabels=['A', 'B', 'C'])
ax[1].set_title('Cut off pixels with desired ticks')
plt.show()

Это приводит к следующему изображению, где я хочу получить полное изображение, подобное этому слева, но отметки и метки по центру в каждом пикселе, как показано справа:

Примеры изображений 3x3

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

ax[1].imshow(np.arange(9).reshape((3,3)), extent=[-0.5, 2.5, -0.5, 2.5])

или явно указав экстент:

im1.set_extent([-0.5, 2.5, -0.5, 2.5])

Итак ... почему экстент по умолчанию не отображается в квадрате?

...