Проблемы с удалением вертикальных пробелов между рядами изображений в matplotlib - PullRequest
0 голосов
/ 23 декабря 2018

Я отображаю изображения из двумерного массива с pyplot и удалил маркировку осей и отступы.Однако между рядами изображений все еще есть пробелы, которые я хотел бы удалить.Сами изображения не имеют пробелов.

fig = plt.figure(figsize=(10, 10))

for x in range(quads_x):
    for y in range(quads_y):
        # ADD IMAGES
        fig.add_subplot(quads_y, quads_x, (quads_x * x) + y + 1)
        plt.imshow(cv2.imread("./map/" + winning_maps[x][y], 0))

        # PYPLOT FORMATTING
        plt.subplots_adjust(wspace=0, hspace=0)
        ax = plt.gca()
        ax.axis("off")
        ax.xaxis.set_major_locator(matplotlib.ticker.NullLocator())
        ax.yaxis.set_major_locator(matplotlib.ticker.NullLocator())

Код дает что-то вроде

this

Любые идеи о том, как мне решать эту проблему?

1 Ответ

0 голосов
/ 23 декабря 2018

Обычно использование plt.subplots_adjust(wspace=0, hspace=0) приведет к сворачиванию всех осей друг на друга.Проблема, с которой вы сталкиваетесь, заключается в том, что использование imshow фиксирует соотношение сторон осей на графике.

Чтобы компенсировать это, вам нужно отрегулировать размер холста так, чтобы кадр имел такое же соотношение, как и изображения, которые вы показываете.Следующая проблема заключается в том, что заполнение границ вокруг осей является отношением размера изображения.Если вы согласны с этим, вы можете удалить границу, добавить изображения, а затем отрегулировать высоту холста так, чтобы высота фигуры умножалась на отношение изображений к числу строк изображений, деленное на количество столбцовimages.

Вот пример:

from matplotlib import pyplot as plt
from PIL import Image

img = Image.open('fox.jpg').resize(80,50)

fig, axes = plt.subplots(rows, columns, figsize=(7,7))
for ax in axes.ravel():
    ax.imshow(img)
    ax.set_autoscale_on(False)
    ax.axis('off')
plt.subplots_adjust(hspace=0, wspace=0, left=0, bottom=0, right=1, top=1)
r, c = axes.shape
fig.set_figheight(fig.get_figwidth() * ax.get_data_ratio() * r / c )
plt.show()

Вот изображение перед использованием set_figheight:

enter image description here

А вот и с настройкой:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...