Динамическое добавление столбцов в pyplot не работает - PullRequest
0 голосов
/ 03 ноября 2019

Не очень актуальная проблема, но она меня беспокоит: я хочу отображать несколько изображений рядом (то есть несколько столбцов), но по какой-то причине следующий код (взят из Python Tutorial ) отображает только изображенияв одном столбце. Итак, мне нужен макет, подобный этому

X X X 

, но я получаю

X
X
X

код:

...
plt.ion() 
...
fig = plt.figure()
sample = face_dataset[65]       # <== this is a simple image of size 640x480
for i, tsfrm in enumerate([scale, crop, composed]):
    transformed_sample = tsfrm(sample)

    ax = plt.subplot(1, 3, i + 1)
    plt.tight_layout()
    ax.set_title(type(tsfrm).__name__)
    show_landmarks(**transformed_sample)
plt.show()
...

Вот определение функции show_landmarks:

def show_landmarks(image, landmarks):
    """Show image with landmarks"""
    plt.imshow(image)
    plt.scatter(landmarks[:, 0], landmarks[:, 1], s=10, marker='.', c='r')
    plt.pause(0.001)  # pause a bit so that plots are updated

Я не думаю, что разные преобразования (масштаб, обрезка, составление) имеют значение, поэтому я их пропустил, но их можно найти по ссылке выше.

Если я напишу в основном то же, что и тестовый код, столбцы будут отображаться нормально:

fig = plt.figure()
for i in (0,1,2):
    ax = plt.subplot(1, 3, i + 1)
    plt.tight_layout()
    ax.set_title(i)
plt.show()

Так что я предполагаю, что каким-то образом show_landmarks все испортило. Кто-нибудь может указать мне правильное направление относительно того, почему / как это?

1 Ответ

1 голос
/ 03 ноября 2019

Вам нужно изменить show_landmarks, чтобы он вызывал текущую ось построения, а не plt. Затем передайте ось функции и другим аргументам.

def show_landmarks(ax, image, landmarks):
    """Show image with landmarks"""
    ax.imshow(image)
    ax.scatter(landmarks[:, 0], landmarks[:, 1], s=10, marker='.', c='r')

...
for i, tsfrm in enumerate([scale, crop, composed]):
    transformed_sample = tsfrm(sample)

    ax = plt.subplot(1, 3, i + 1)
    ax.set_title(type(tsfrm).__name__)
    show_landmarks(ax, **transformed_sample)

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