Использование библиотеки Matplotlib. Как изменять настройки по умолчанию

Содержание

При рисовании графиков в Python с помощью библиотеки Matplotlib, если некоторые параметры не задавать явно, они принимают значения по умолчанию (например, толщина линий, размеры окна с фигурой, шрифты). Но иногда требуется часто менять одни и те же параметры для многих графиков (например, у всех включать сетку), в этом случае можно для каждого графика устанавливать нужные параметры явно или один раз в начале скрипта изменить значения параметров по умолчанию, чтобы больше о них не задумываться. Кроме того, можно изменять эти параметры глобально для всех пользователей или для конкретного пользователя с помощью специального файла настроек. О том, как изменять параметры рисования, принятые по умолчанию, и пойдет речь в этой статье.

Глобальное изменение настроек

Для начала рассмотрим, как можно изменять параметры по умолчанию глобально для всех скриптов, использующих Matplotlib. Для этого предназначен файл с именем matplotlibrc. Располагаться он может в разных местах в зависимости от его области действия:

  1. В директории со скриптом. В этом случае изменение глобальных параметров с помощью matplotlibrc влияет только на скрипты, расположенные в этой директории.
  2. В поддиректории .matplotlib внутри директории пользователя, то есть под Linux полный путь до файла настроек будет выглядеть как ~/.matplotlib/matplotlibrc, а под Windows (например, XP) - C:\Documents and Settings\USERNAME\.matplotlib\matplotlibrc. В этом случае параметры, измененные в этом файле будут касаться всех скриптов, запущенных из-под данного пользователя.
  3. В директории, где установлена библиотека matplotlib. Например, под Linux это может быть /usr/local/lib/python2.7/dist-packages/matplotlib/mpl-data/matplotlibrc. Изменения, внесенные в этом файле, касаются всех пользователей.

matplotlibrc представляет собой текстовый файл, каждая строка которого описывает параметры в виде:

параметр : значение

При этом некоторые параметры имеют вложенную структуру:

параметр.подпараметр1 : значение
параметр.подпараметр2 : значение

Для комментариев используется символ #, работающий так же, как и в Python.

Какие же мы можем изменять параметры? Для этого полезно взглянуть на файл matplotlibrc, прилагающийся к библиотеке. В этом файле описаны возможные параметры с подробными комментариями (разумеется, на английском языке).

Прежде чем приступать к демонстрации работы matplotlibrc, нужно сказать об одном параметре, который обязательно должен присутствовать в этом файле (то есть файл matplotlibrc не может быть пустым). Это параметр backend, который задает, с помощью какой библиотеки будут создаваться окна с фигурами. Параметр backend может принимать следующие значения:

  • GTK
  • GTKAgg
  • GTKCairo
  • CocoaAgg
  • FltkAgg
  • MacOSX
  • QtAgg
  • Qt4Agg
  • TkAgg
  • WX
  • WXAgg
  • Agg
  • Cairo
  • GDK
  • PS
  • PDF
  • SVG
  • Template

Значения этих параметров регистронезависимы.

Работоспособность того или иного значения параметра backend зависит от установленных в системе библиотек. Для примера далее приведен скрипт и внешний вид окна при различных значениях backend:

#!/usr/bin/env python
# -*- 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 они все описаны, поэтому просто приведу некоторые примеры его использования. Во всех примерах в этом разделе используется вышеприведенный скрипт.

Изменим толщину линии по умолчанию и сделаем ее пунктирной:

backend           : GTKAgg
lines.linewidth   : 3
lines.linestyle   : --

Результат показан на следующем рисунке:

Теперь изменим размер окна с фигурой.

backend          : GTKAgg
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 в директории пользователя, то в результате выполения следующих команд мы увидим:

>>> import matplotlib
>>> matplotlib.matplotlib_fname()
'/home/jenyay/.matplotlib/matplotlibrc'

Если вызвать функцию matplotlib_fname() под Windows, то при условии, что ни в директории пользователя, ни в папке со скриптом нет файла matplotlibrc, мы получим следующий результат:

>>> import matplotlib
>>> matplotlib.matplotlib_fname()
'C:\\Python27\\lib\\site-packages\\matplotlib\\mpl-data\\matplotlibrc'

Изменение значений по умолчанию в пределах скрипта

Как изменять глобальные параметры сразу для многих скриптов мы разобрались, однако есть еще способ изменения этих параметров в пределах скрипта. Для этого используется переменная rcParams из модуля matplotlib, которая представляет собой словарь, где в качестве ключа используются все те же параметры, что используются в файле matplotlibrc, а в качестве значений - соответственно значения этих параметров.

Например, мы можем изменить наш скрипт следующим образом:

#!/usr/bin/env python
# -*- 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():

#!/usr/bin/env python
# -*- 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.
0 stars Пока еще нет оценок




Подписаться на комментарии
Автор:
Тема:
 Ваш комментарий
 
 
Введите код 285