Решение проблемы с пустыми изображениями в matplotlib
Быстрый ответ
Для предотвращения создания пустых файлов изображений при использовании команды plt.savefig('output.png')
, следует сохранять график до его отображения на экране с помощью plt.show()
. В противном случае, все элементы графика, отрисованные после plt.show()
, не будут сохранены в файле.
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [4, 5, 6])
plt.savefig('output.png') # Сначала сохраняем
plt.show() # Затем отображаем
Переключение между графиками с помощью plt.gcf()
При работе с несколькими графиками команда plt.gcf()
помогает ориентироваться. Она устанавливает на текущий график фокус, позволяя сосредоточиться на нём.
fig = plt.figure()
plt.plot([1, 2, 3], [4, 5, 6])
fig.savefig('current_figure.png') # Сохраняем текущий график
Управление субплотами
Функция plt.subplots()
облегчает управление позицией и размером субплотов на графике.
fig, ax = plt.subplots(nrows=2, ncols=2)
# Далее отрисовываем на созданных осях...
fig.savefig('subplots_figure.png')
Количество точек на дюйм
Для создания изображений высокого качества рекомендуется увеличивать значение параметра dpi
(точек на дюйм) при сохранении.
plt.plot([1, 2, 3], [4, 5, 6])
plt.savefig('high_res_output.png', dpi=300)
Визуализация
Детально рассмотрим, как ненадлежащее использование savefig
может привести к созданию пустых изображений на примере:
У нас есть холст 🖼️ и кисти 🖌️ — это наши инструменты.
Если показать изображение до его сохранения, данные могут быть утеряны:
plt.show() # 🖌️ кисти использованы
plt.savefig('beautiful_plot.png') # 🖼️ холст при этом остаётся пустым!
Чтобы успеть зафиксировать картина, следуйте правильной последовательности: сначала рисуйте, потом сохраняйте:
plt.plot(x, y) # 🖌️ мазки на холсте
plt.savefig('beautiful_plot.png') # 🖼️ холст сохранён
plt.show() # Теперь можно показать
Проверка полноты отображения данных
Прежде чем сохранить рисунок, убедимся, что все его элементы есть на месте: легенда, подписи осей и так далее. После этого можно его сохранять:
plt.plot([1, 2, 3], [4, 5, 6])
plt.xlabel('Ось Временных Путешествий')
plt.ylabel('Параллельные Вселенные')
plt.legend(['Теория Мультивселенной'], facecolor='white')
plt.savefig('complete_plot.png')
Графики на основе imshow и Seaborn
Функция imshow
заслуживает такого же внимания, как и остальные:
plt.imshow(image_data)
plt.colorbar() # Добавляем цветовую шкалу
plt.savefig('image_plot.png') # Изображение сохранено
При использовании библиотеки Seaborn, вам пригодится параметр ax
:
import seaborn as sns
fig, ax = plt.subplots()
sns.barplot(x="soup", y="crackers", data=df, ax=ax)
plt.savefig('seaborn_plot.png')
Полезные материалы
- matplotlib.pyplot.savefig — Документация Matplotlib 3.8.2: Полное описание функции
savefig
. - Real Python Tutorial on Saving Plots: Подробное руководство по сохранению графиков.
- Visualization with Matplotlib | Python Data Science Handbook: Введение в Matplotlib с описанием типичных ошибок.
- Savefig outputs blank image – Stack Overflow: Обсуждение проблем с
plt.show()
иsavefig()
на StackOverflow. - Issues · matplotlib/matplotlib · GitHub: Раздел проблем и ошибок Matplotlib на GitHub.
Обеспечение всей видимости данных
Прежде чем поделиться графиком, удостоверьтесь, что все данные видны, и они не скрыты за пределами осей:
plt.plot(x, y)
plt.xlim(0, 10) # Задаём границы осей
plt.ylim(0, 10)
plt.savefig('data_visible_plot.png') # Данные сохранены и видны
Правильное именование файлов
Чтобы избежать перезаписывания файлов, используйте уникальные временные метки в их именах:
from datetime import datetime
current_time = datetime.now().strftime('%Y%m%d_%H%M%S')
filename = f'plot_{current_time}.png' # Имя файла с временной меткой
plt.savefig(filename)