основной заголовок сюжета, состоящий из картинок, вне диапазона - PullRequest
2 голосов
/ 14 февраля 2020

Я пытаюсь создать сюжет, состоящий из 6 изображений, каждое из которых имеет собственное название и, главное, имеет основное название для всего сюжета. Когда я пытаюсь его создать, он виден на встроенной графике, но при сохранении в формате png он не отображается. Я пытался сделать фигуру вертикально больше, но это не помогло

Видимо в строке: plot in line - very good

При сохранении в файл - ему не хватает основного заголовка: plot when saved to file - :(

Данные для проверки:

1) создание временной фотографии для работы с 0 в моей реальной проблеме это различные изображения

import pandas as pd
import os
import cv2
import matplotlib.pyplot as plt

Test_df = pd.DataFrame(data = {'x': [1, 2, 3, 4], \
                               'y' : [1, 2, 3, 4]})

#creating fake photo
plt.plot(Test_df['x'], Test_df['y'], "o")
plt.savefig('test.png')

#read as picture
tmp = cv2.imread('test.png')

2) создание окончательного сюжета

#creating desired plot
f, axarr = plt.subplots(2,3, figsize=(7.5,5))

# add main title
f.text(0, 1, 'main title', 
         fontsize=15, fontweight='black', color = '#333F4B')

for i in range(1,3):
    for j in range(1,4):
        axarr[i - 1, j - 1].imshow(tmp)
        axarr[i - 1, j - 1].set_axis_off()
        axarr[i - 1, j - 1].axis("tight")  # gets rid of white border
        axarr[i - 1, j - 1].axis("image") # square up the image instead of filling the "figure" space
        title = str(i + j)
        axarr[i - 1, j - 1].set_title(title, fontsize = 8, color = '#333F4B')
        axarr[i - 1, j - 1].set_facecolor('b')


plt.tight_layout()         

plt.savefig('result.png')
РЕДАКТИРОВАНИЕ

Работало нормально, когда использовалось subtitle и удалялось plt.tight_layout()

1 Ответ

2 голосов
/ 14 февраля 2020

Поскольку вы используете его как текст прямо сейчас, он как-то обрезается из-за tight_layout при сохранении. Ваш код будет работать нормально, если вместо 1 для y-координаты вы используете что-то до 0,97. Чтобы проверить это, попробуйте также f.text(0, 0.97, 'main title', ....

Я бы порекомендовал использовать встроенную функцию suptitle для этой задачи.


f.suptitle('main title', x=0, y=1, fontsize=15, 
           fontweight='black', color = '#333F4B') 
plt.tight_layout()

enter image description here

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