Я пытаюсь сделать некоторые цифры для научной статьи, поэтому хочу, чтобы мои цифры имели определенный размер. Я также вижу, что Matplotlib по умолчанию добавляет много дополнений на границу цифр, которые мне не нужны (так как цифры будут на белом фоне в любом случае).
Чтобы установить определенный размер фигуры, я просто использую plt.figure(figsize = [w, h])
, и добавляю аргумент tight_layout = {'pad': 0}
, чтобы удалить дополнение. Это работает отлично и даже работает, если я добавляю заголовок, y/x-метки и т.д. Пример:
fig = plt.figure(
figsize = [3,2],
tight_layout = {'pad': 0}
)
ax = fig.add_subplot(111)
plt.title('title')
ax.set_ylabel('y label')
ax.set_xlabel('x label')
plt.savefig('figure01.pdf')
Это создает файл PDF с точным размером 3x2 (дюймы).
Проблема заключается в том, что когда я, например, добавляю текстовое поле за пределами оси (как правило, это поле с условным обозначением), Matplotlib не освобождает место для текстового поля, как при добавлении заголовков/осей. Обычно текстовое поле отключается или вообще не отображается на сохраненной фигуре. Пример:
plt.close('all')
fig = plt.figure(
figsize = [3,2],
tight_layout = {'pad': 0}
)
ax = fig.add_subplot(111)
plt.title('title')
ax.set_ylabel('y label')
ax.set_xlabel('x label')
t = ax.text(0.7, 1.1, 'my text here', bbox = dict(boxstyle = 'round'))
plt.savefig('figure02.pdf')
Решение, которое я нашел в другом месте на SO, заключалось в том, чтобы добавить аргумент bbox_inches = 'tight'
в команду savefig. Текстовое окно теперь включено, как хотелось, но формат pdf теперь неправильный. Похоже, что Matplotlib просто делает фигуру больше, а не уменьшает размер осей, как при добавлении заголовков и x/y-меток.
Пример:
plt.close('all')
fig = plt.figure(
figsize = [3,2],
tight_layout = {'pad': 0}
)
ax = fig.add_subplot(111)
plt.title('title')
ax.set_ylabel('y label')
ax.set_xlabel('x label')
t = ax.text(0.7, 1.1, 'my text here', bbox = dict(boxstyle = 'round'))
plt.savefig('figure03.pdf', bbox_inches = 'tight')
(Эта цифра 3,307x2,248)
Есть ли какое-либо решение для этого, которое охватывает большинство случаев с легендой, находящейся за пределами осей?