Plt.show показывает полный график, но savefig обрезает изображение

87

Мой код успешно сохраняет изображения в файл, но важные детали обрезаются с правой стороны. Существуют ответы для решения этой проблемы, когда она возникает plt.show, но это savefigкоманда, которая неправильно создает график в этом примере. Как это исправить?

Соответствующий образец моего кода:

import glob
import os
for file in glob.glob("*.oax"):
    try:
        spc_file = open(file, 'r').read()
        newName = file[6:8] + '-' + file[4:6] + '-' + file[0:4] + ' ' + file[8:12] +  ' UTC (Observed) - No Sea Breeze Day'
        plt.title(newName, fontsize=12, loc='left')
        plt.savefig('X:/' + newName + '.png')        
        plt.show()
    except Exception:
        pass

И изображения (вверху plt.showи внизу - файл, полученный из savefig:

Изображение при отображении с помощью plt.show Изображение при сохранении в файл


Джосс Кирк
источник
Можете ли вы сделать простой пример, который другие смогут протестировать, желательно без загрузки дополнительных данных и пакетов?
Neapolitan
1
@ Неаполитанский. Это немного выходит за рамки моих навыков. Приведенный ниже ответ предполагает, что для этой проблемы существует общее решение, не зависящее от данных.
Джосс Кирк
@Neopolitan Я не знаю, как возникла проблема, поэтому я не уверен, как создать более простые данные, которые могли бы их воспроизвести.
Джосс Кирк

Ответы:

164

Вы можете попробовать

plt.savefig('X:/' + newName + '.png', bbox_inches='tight')

Или вы можете определить размер фигуры как

fig = plt.figure(figsize=(9, 11))
...
plt.savefig(filename, bbox_inches = 'tight')
Безмятежность
источник
Спасибо за ответ, завтра реализую и дам знать, как идет!
Джосс Кирк,
4
Я реализовал первый ответ, и он сработал! Спасибо!
Джосс Кирк
2
Это должна быть опция по умолчанию, bbox_inches = 'tight'. Я использовал его в сочетании с высоким значением dpi, и он отлично работал.
Deepak V