Я использовал 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])
Итак ... почему экстент по умолчанию не отображается в квадрате?