Использование библиотеки Matplotlib. Как изменять настройки по умолчанию
Содержание
При рисовании графиков в Python с помощью библиотеки Matplotlib, если некоторые параметры не задавать явно, они принимают значения по умолчанию (например, толщина линий, размеры окна с фигурой, шрифты). Но иногда требуется часто менять одни и те же параметры для многих графиков (например, у всех включать сетку), в этом случае можно для каждого графика устанавливать нужные параметры явно или один раз в начале скрипта изменить значения параметров по умолчанию, чтобы больше о них не задумываться. Кроме того, можно изменять эти параметры глобально для всех пользователей или для конкретного пользователя с помощью специального файла настроек. О том, как изменять параметры рисования, принятые по умолчанию, и пойдет речь в этой статье.
Глобальное изменение настроек
Для начала рассмотрим, как можно изменять параметры по умолчанию глобально для всех скриптов, использующих Matplotlib. Для этого предназначен файл с именем matplotlibrc. Располагаться он может в разных местах в зависимости от его области действия:
- В директории со скриптом. В этом случае изменение глобальных параметров с помощью matplotlibrc влияет только на скрипты, расположенные в этой директории.
- В поддиректории .matplotlib внутри директории пользователя, то есть под Linux полный путь до файла настроек будет выглядеть как ~/.matplotlib/matplotlibrc, а под Windows (например, XP) - C:\Documents and Settings\USERNAME\.matplotlib\matplotlibrc. В этом случае параметры, измененные в этом файле будут касаться всех скриптов, запущенных из-под данного пользователя.
- В поддиректории ~/.config/matplotlib под Linux.
- В директории, где установлена библиотека matplotlib. Например, под Linux это может быть /usr/local/lib/python2.7/dist-packages/matplotlib/mpl-data/matplotlibrc. Изменения, внесенные в этом файле, касаются всех пользователей.
matplotlibrc представляет собой текстовый файл, каждая строка которого описывает параметры в виде:
параметр : значение
При этом некоторые параметры имеют вложенную структуру:
параметр.подпараметр1 : значение
параметр.подпараметр2 : значение
Для комментариев используется символ #, работающий так же, как и в Python.
Какие же мы можем изменять параметры? Для этого полезно взглянуть на файл matplotlibrc, прилагающийся к библиотеке. В этом файле описаны возможные параметры с подробными комментариями (разумеется, на английском языке).
Прежде чем приступать к демонстрации работы matplotlibrc, нужно сказать об одном параметре, который обязательно должен присутствовать в этом файле (то есть файл matplotlibrc не может быть пустым). Это параметр backend, который задает, с помощью какой библиотеки будут создаваться окна с фигурами. Параметр backend может принимать следующие значения:
- GTK3Agg
- GTK3Cairo
- GTK4Agg
- GTK4Cairo
- MacOSX
- nbAgg
- QtAgg
- QtCairo
- Qt5Agg
- Qt5Cairo
- TkAgg
- TkCairo
- WebAgg
- WX
- WXAgg
- WXCairo
- agg
- cairo
- pgf
- ps
- svg
- template
Значения этих параметров регистронезависимы.
Работоспособность того или иного значения параметра backend зависит от установленных в системе библиотек. Для примера далее приведен скрипт и внешний вид окна при различных значениях backend:
# -*- coding: UTF-8 -*-
import math
import pylab
def sinc (xlist):
return [math.sin (x) / x if x != 0 else 1.0 for x in xlist]
if __name__ == "__main__":
# Создаем список точек по оси X в интервале -20 до 20 с шагом 0.1
x = pylab.arange (-20.0, 20.1, 0.1)
# Для каждой точки по оси X рассчитаем соответствующее значение по оси Y
y = sinc (x)
# Нарисуем график
pylab.plot (x, y)
pylab.show()
![]() backend : GTKAgg (значение по умолчанию) | ![]() backend : WX |
![]() backend : Qt4Agg (значение по умолчанию) | ![]() backend : FltkAgg |
Под Windows в качестве значения по умолчанию для backend используется TkAgg, то есть для создания окон используется Tkinter. Если у вас установлены другие перечисленные библиотеки, то их также можно использовать.
Значения параметра backend Agg, Cairo, GDK, PS, PDF, SVG предназначены для вывода результатов в файлы, а не на экран.
Нет смысла описывать все возможные параметры из файла matplotlibrc, в файле matplotlibrc они все описаны, поэтому просто приведу некоторые примеры его использования. Во всех примерах в этом разделе используется вышеприведенный скрипт.
Изменим толщину линии по умолчанию и сделаем ее пунктирной:
lines.linewidth : 3
lines.linestyle : --
Результат показан на следующем рисунке:

Теперь изменим размер окна с фигурой.
figure.dpi : 80
figure.figsize : 4, 3
В этом примере мы оставили разрешение рисунка, заданное по умолчанию (80 dpi), а затем задали размер фигуры 4 x 3 dpi (по умолчанию задано 8 x 6 dpi). Размер задается в dpi, т.к. Matplotlib может рисовать графики не только на экране, но и выводить их в файлы, например в графические PNG, SVG, Tiff и т.д. или в PDF и PS.
Результат работы все того же скрипта с данными настройками показан на следующем рисунке.

Особенностью работы Matplotlib с файлами matplotlibrc заключается в том, что при выполнении скрипта учитывается только один такой файл. То есть, если в папке со скриптом есть этот файл, то в директории пользователя matplotlibrc уже не учитывается. Аналогично, если есть файл в директории пользователя, то не важно, что содержит файл в директории с установленной библиотекой.
Для того, чтобы определить, какой именно файл matplotlibrc используется, предназначена функция matplotlib_fname() из модуля matplotlib.
Например, если есть файл matplotlibrc в директории пользователя, то в результате выполения следующих команд мы увидим:
>>> matplotlib.matplotlib_fname()
'/home/jenyay/.matplotlib/matplotlibrc'
Если вызвать функцию matplotlib_fname() под Windows, то при условии, что ни в директории пользователя, ни в папке со скриптом нет файла matplotlibrc, мы получим следующий результат:
>>> matplotlib.matplotlib_fname()
'C:\\Python27\\lib\\site-packages\\matplotlib\\mpl-data\\matplotlibrc'
Изменение значений по умолчанию в пределах скрипта
Как изменять глобальные параметры сразу для многих скриптов мы разобрались, однако есть еще способ изменения этих параметров в пределах скрипта. Для этого используется переменная rcParams из модуля matplotlib, которая представляет собой словарь, где в качестве ключа используются все те же параметры, что используются в файле matplotlibrc, а в качестве значений - соответственно значения этих параметров.
Например, мы можем изменить наш скрипт следующим образом:
# -*- coding: UTF-8 -*-
import math
import pylab
import matplotlib
matplotlib.rcParams["lines.linewidth"] = 3
matplotlib.rcParams["lines.linestyle"] = "--"
def sinc (xlist):
return [math.sin (x) / x if x != 0 else 1.0 for x in xlist]
if __name__ == "__main__":
# Создаем список точек по оси X в интервале -20 до 20 с шагом 0.1
x = pylab.arange (-20.0, 20.1, 0.1)
# Для каждой точки по оси X рассчитаем соответствующее значение по оси Y
y = sinc (x)
# Нарисуем график
pylab.plot (x, y)
pylab.show()
В результате чего мы получим тот же самый результат, что и при модификации файла matplotlibrc:

Или, например, мы можем указать, чтобы по умолчанию отображалась сетка. После этого нам не нужно будет вызывать для каждого графика функцию grid():
# -*- coding: UTF-8 -*-
import math
import pylab
import matplotlib
matplotlib.rcParams["axes.grid"] = True
def sinc (xlist):
return [math.sin (x) / x if x != 0 else 1.0 for x in xlist]
if __name__ == "__main__":
# Создаем список точек по оси X в интервале -20 до 20 с шагом 0.1
x = pylab.arange (-20.0, 20.1, 0.1)
# Для каждой точки по оси X рассчитаем соответствующее значение по оси Y
y = sinc (x)
# Нарисуем график
pylab.plot (x, y)
pylab.show()
Результат показан на следующем рисунке:

Кроме того, в модуле matplotlib есть еще переменная rcParamsDefault, аналогичная rcParams, но содержащая значения по умолчанию. Так что при желании можно восстановить значения по умолчанию из rcParamsDefault. Но только НЕ ДЕЛАЙТЕ так: matplotlib.rcParams = matplotlib.rcParamsDefault. Думаю, вы понимаете почему.
Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.