Сохранить график как изображение с помощью Matplotlib
Matplotlib - одна из наиболее широко используемых библиотек визуализации данных в Python. Обычно графики и визуализации Matplotlib делятся с другими.
В этой статье мы рассмотрим, как сохранить график в виде файла изображения с помощью Matplotlib.
Создание сюжета
Сначала создадим простой сюжет:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
y = np.sin(x)
plt.plot(x, y)
plt.show()
Здесь мы построили синусоидальную функцию, начиная с 0
и заканчивая 10
с шагом 0.1
. Выполнение этого кода дает:
Теперь давайте посмотрим, как мы можем сохранить эту фигуру как изображение.
Сохранить график как изображение в Matplotlib
В предыдущем примере мы сгенерировали график с помощью функции plot()
, передав данные, которые мы хотели бы визуализировать.
Этот график создается, но не отображается нам, если мы не вызываем функцию show()
. Функция show()
, как следует из названия, показывает сгенерированный участок пользователю в окне.
После создания мы также можем сохранить этот рисунок / график как файл - используя функцию savefig()
:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
y = np.sin(x)
plt.plot(x, y)
plt.savefig('saved_figure.png')
Теперь, когда мы запускаем код, вместо всплывающего окна с графиком у нас есть файл (saved_figure.png
) в каталоге нашего проекта.
Этот файл содержит точно такое же изображение, которое мы бы показывали в окне:
Стоит отметить, что функция savefig()
не уникальна для экземпляра plt
. Вы также можете использовать его на объекте Figure
:
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
x = np.arange(0, 10, 0.1)
y = np.sin(x)
plt.plot(x, y)
fig.savefig('saved_figure.png')
У функции savefig()
есть обязательный аргумент filename
. Здесь мы указали имя файла и формат.
Кроме того, она принимает другие варианты, такие как dpi
, transparent
, bbox_inches
, quality
и т.д.
В следующих разделах мы рассмотрим некоторые популярные варианты.
Настройка разрешения изображения
Параметр DPI определяет количество точек (пикселей) на дюйм. По сути, это разрешение создаваемого изображения. Давайте протестируем несколько разных вариантов:
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
x = np.arange(0, 10, 0.1)
y = np.sin(x)
plt.plot(x, y)
fig.savefig('saved_figure-50pi.png', dpi = 50)
fig.savefig('saved_figure-100dpi.png', dpi = 100)
fig.savefig('saved_figure-1000dpi.png', dpi = 1000)
Это приводит к появлению трех новых файлов изображений на нашем локальном компьютере, каждый с разным DPI:
Значение по умолчанию - 100
.
Сохраните прозрачное изображение с помощью Matplotlib
Аргумент transparent
может быть использован для создания участка с прозрачным фоном. Это полезно, если вы будете использовать графическое изображение в презентации, на бумаге или хотите представить его в настройках индивидуального дизайна:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
y = np.sin(x)
plt.plot(x, y)
plt.savefig('saved_figure.png', transparent=True)
Если мы поместим это изображение на темный фон, это приведет к:
Изменение цвета графика
Вы можете изменить цвет подложки, используя аргумент facecolor
. Он принимает color
и по умолчанию white
.
Изменим его на red
:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
y = np.sin(x)
plt.plot(x, y)
plt.savefig('saved_figure-colored.png', facecolor = 'red')
Это приводит к:
Настройка границы изображения
Аргумент bbox_inches
принимает строку и определяет границу вокруг граффика. Если мы хотим установить его так tight
, то есть максимально обрезать рамку, мы можем установить аргументу bbox_inches
значение 'tight'
:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
y = np.sin(x)
plt.plot(x, y)
plt.savefig('saved_figure-tight.png', bbox_inches = 'tight', facecolor='red')
В результате получается плотно упакованная коробка. Это легче визуализировать, если для справки раскрасить края другим цветом:
Вывод
В этом уроке мы рассмотрели несколько способов сохранить график в виде файла изображения с помощью Matplotlib.