Обрезка изображения matplotlib в подзаговоре - PullRequest
1 голос
/ 03 апреля 2019

Обрезка картинки с помощью python и matplotlib кажется легкой (см. этот ТАК вопрос ). Однако при кадрировании одной фигуры в сюжете с субплотом общий размер изображения изменяется. Я привожу пример и нежелательный результат:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('http://res.freestockphotos.biz/pictures/15/15912-illustration-of-a-banana-pv.png')
fig=plt.figure(figsize=(18, 4))

for i in range(1, 4):
    fig.add_subplot(rows, columns, i)
    plt.imshow(img)
    if i > 2:
        plt.imshow(img[:img.shape[0],:int(img.shape[1]/2)])

и вот ужасный результат.

enter image description here

Как сделать так, чтобы все изображения имели одинаковый размер по вертикали?

1 Ответ

1 голос
/ 03 апреля 2019

Код, который вы разместили, не запустился для меня.rows и columns не определены.Я запустил:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('http://res.freestockphotos.biz/pictures/15/15912-illustration-of-a-banana-pv.png')
fig = plt.figure(figsize=(18, 4))

rows = 1 # I added this
columns = 3 # and this
for i in range(1, 4):
    fig.add_subplot(rows, columns, i)
    plt.imshow(img)
    if i > 2:
        plt.imshow(img[:img.shape[0], :int(img.shape[1] / 2)])

plt.show() # and this

С результатом:

output

Поэтому я не могу воспроизвести проблему (и предположить, что другие тоже не могут),Возможно, этот код решил вашу проблему, хотя?Удачи!

update

После того, как столбцы с комментариями @ImportanceOfBeingErnest должны быть равны 6, я возился с этим, и, возможно, вы ищете параметр extent?Я запустил

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('http://res.freestockphotos.biz/pictures/15/15912-illustration-of-a-banana-pv.png')
fig = plt.figure(figsize=(18, 4))

rows = 1
columns = 6
for i in range(1, 4):
    fig.add_subplot(rows, columns, i)
    if i > 2:
        plt.imshow(img[:img.shape[0], :int(img.shape[1] / 2)], extent=(0, 50, 0, 50))
    else:
        plt.imshow(img, extent=(0, 50, 0, 50))
plt.tight_layout()
plt.show()

Выход:

new output

По сути, он просто растягивает изображение в соответствии с указанным диапазоном extent,который я считаю, это просто соотношение сторон по существу.Будет ли это желаемым эффектом искажения изображения, чтобы оно соответствовало размеру других изображений?

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