09.08.2009

Пакет matplotlib. Установка, проверка, настройка

Введение

matplotlib - набор дополнительных модулей (библиотек) языка Python. Предоставляет средства для построения самых разнообразных 2D графиков и диаграмм данных. Достоинства. Отличается простотой использования - для построения весьма мудреных и красочно оформленных диаграмм достаточно нескольких строк кода. При этот качество получаемых изображений более чем достаточно для их публикования. Один из выходных формата файлов - Postscript, что, соответственно, позволяет вставлять изображения в документы TeX. Предоставляет API для встраивания своих графических объектов в приложения пользователя.

Установка

Официальный сайт проекта matplotlib. Дистрибутив для Windows можно заполучить на Sourceforge. Текущая версия 0.99.0, выпущена 06 августа 2009.

Для установки необходим, разумеется, сам Python и модуль NumPy. NumPy предоставляет методы для работы с огромными многомерными массивами. Дистрибутив для Windows так же можно взять на Sourceforge. Текущая версия 1.3.0 от 05 апреля 2009.

В Windows установка и matplotlib и NumPy не должна вызвать ни каких проблем. Скачиваем и запускаем файл дистрибутива.

Проверка

После установки проверяем работоспособность. Запускаем консоль Python, вводим:

>>> import matplotlib.pyplot as plt
>>> plt.plot([1,2,3])
[<matplotlib.lines.Line2D object at 0x0301E810>]
>>> plt.title('Прямая линия')
<matplotlib.text.Text object at 0x03062430>
>>> plt.show()

В результате должно появиться вот такое окно диаграммы:

Matplotlib. Пример окна диаграммы

Что было сделано? Из пакета matplotlib импортирован модуль pyplot под именем plt. Модуль pyplot содержит функции (похожие на команды) создания диаграмм и изменения свойств их элементов. Функция plot() строит прямоугольные двумерные диаграммы (графики) в координатах X - Y. Если функции plot передан один аргумент (в нашем случае - список [1,2,3]), она рассматривает его как совокупность значений откладываемых по оси Y, тогда по оси X ему будет соответствовать автоматически сгенерированный набор чисел 0,1,2...N - 1, где N - число элементов в переданном списке. Функция title() задает заголовок диаграммы, а функция show() выводит интерактивное окно диаграммы. В общем все очень просто. Вот только вместо заголовка диаграммы "Прямая линия" 11 прямоугольников, не настроенный matplotlib не может найти шрифты с кириллическими символами.

Настройка

Пакет matplotlib можно легко настроить через конфигурационный файл matplotlibrc. Если Python установлен в папку C:\Python26\ файл matplotlibrc находится в папке: C:\Python26\Lib\site-packages\matplotlib\mpl-data\. Вносить изменения можно прямо здесь, но лучше скопировать файл в папку пользователя: C:\Documents and Settings\UserName\.matplotlib\, иначе при переустановке пакета конфигурационный файл будет перезаписан. Параметры пакета задаются в файле в виде пар свойство : значение, символ # отделяет комментарий. Свойство font.family определяет тип активного шрифта по умолчанию, может принимать пять значений: serif, sans-serif, cursive, fantasy, monospace. В свою очередь свойства font.serif, font.sans-serif, font.cursive, font.fantasy, font.monospace содержат списки имен шрифтов (через запятую, в порядке уменьшения приоритета) соответствующих каждому типу. Для "русификации" matplotlib необходимо изменить имена шрифтов в списке, на имена доступных в системе шрифтов, содержащих кириллические символы. Например так:

font.serif : Verdana, Arial
font.sans-serif : Tahoma, Arial
font.cursive : Courier New, Arial
font.fantasy : Comic Sans MS, Arial
font.monospace : Arial

Для корректного отображения кириллических символов так же необходимо внести небольшие изменения в код программы. Все строки, содержащие символы национальных алфавитов должны быть типа unicode. Тип строкового литерала необходимо указать явно.

plt.title(u'Прямая линия')

В случае скрипта исходный файл должен быть в кодировке UTF-8. Кодировку файла так же следует указать явно. Для этого в первых строках программы пишем:

# -*- coding: UTF-8 -*-

Вносим изменения в файл matplotlibrc, повторяем ввод в консоле Python:

>>> import matplotlib.pyplot as plt
>>> plt.plot([1,2,3])
[<matplotlib.lines.Line2D object at 0x02F118F0>]
>>> plt.title(u'Прямая линия')
<matplotlib.text.Text object at 0x02F59510>
>>> plt.xlabel(u'Значения по оси X')
<matplotlib.text.Text object at 0x02F1BBF0>
>>> plt.ylabel(u'Значения по оси Y')
<matplotlib.text.Text object at 0x02F44D10>
>>> plt.show()

Ну вот теперь подписи диаграммы отображаются корректно:

Matplotlib. Пример окна диаграммы

Функции pyplot.xlabel(), pyplot.ylabel(), как легко догадаться по названию, устанавливают подписи к осям X и Y соответственно.

Пакет matplotlib можно настраивать и динамически (во время выполнения программы). В пакете определена структура matplotlib.rcParams, с которой работают как со словарем. Ключевые слова в данном случае - имена свойств файла matplotlibrc.

Настройки шрифтов через matplotlib.rcParams можно изменить например так:

>>> import matplotlib as mpl
>>> import matplotlib.pyplot as plt
>>> mpl.rcParams['font.family'] = 'fantasy'
>>> mpl.rcParams['font.fantasy'] = 'Comic Sans MS, Arial'
>>> plt.plot([1,2,3,4], [1,4,9,16], 'ro')
[<matplotlib.lines.Line2D object at 0x02E837B0>]
>>> plt.title(u'Парабола')
<matplotlib.text.Text object at 0x02E65530>
>>> plt.xlabel(u'Значения x')
<matplotlib.text.Text object at 0x02E2DC70>
>>> plt.ylabel(u'Значения x в квадрате')
<matplotlib.text.Text object at 0x02E50D30>
>>> plt.show()

В результате должно получиться вот что:

Matplotlib. Пример окна диаграммы

Функции pyplot.plot() можно передать произвольное число пар аргументов типов list или array (тип array определен в модуле numpy). В примере выше передана одна пара: [1,2,3,4], [1,4,9,16]. Первый элемент каждой пары функция рассматривает как значения откладываемые по оси X, второй элемент как значения по оси Y. Соответственно для каждой пары элементов строиться своя кривая на диаграмме. После каждой пары данных может быть передан дополнительный аргумент типа string - строка форматирования, которая определяет внешний вид кривой. Формат строки позаимствован из системы Matlab. Строка включает три подстроки. Первая подстрока задает цвет графического элемента, вторая стиль маркера, третья стиль линии. В примере 'ro' = 'r' + 'o', где 'r' - красный, 'o' - кружок. По умолчанию 'b-' - синяя непрерывная линия.

Немного о назначении кнопок интерактивного окна диаграммы.

Кнопка

Matplotlib. Кнопка pan/zoom

(pan/zoom) предназначена для прокрутки/масштабирования диаграммы. Нажимаем на кнопку, указатель мыши приобретает вид перекрещенных стрелок. Если двигать мышь и удерживать левую кнопку - диаграмма будет прокручиваться по направлению движения указателя. Если двигать мышь и удерживать правую кнопку - масштаб диаграммы будет изменяться, при движении вверх/вправо - уменьшаться, вниз/влево - увеличиваться. При нажатых клавишах "x" и "y" перемещение/масштабирование диаграммы будет происходить по осям X и Y соответственно, при нажатой клавише Ctrl диаграмма будет изменяться так, чтобы сохранились её пропорции (aspect ratio).

Кнопка

Matplotlib. Кнопка прямоугольного масштабирования

при нажатии включает режим прямоугольного масштабирования. Если нажать на кнопку указатель мыши приобретет вид креста. При нажатой левой кнопки мыши на диаграмме можно выделить прямоугольную область. После освобождения кнопки масштаб диаграммы будет изменен так, чтобы выделенная область заняла как можно большую площадь диаграммы.

Кнопки

Matplotlib. Кнопка навигации

позволяют перемещаться по истории изменения диаграммы. Все изменения вносимые в диаграмму пользователем (масштабирование, прокрутка) запоминаются. Кнопки со стрелками позволяют перемещаться вперед/назад по имеющимся вариантам диаграммы. Кнопка с домиком возвращает диаграмму к исходному состоянию.

Кнопка

Matplotlib. Кнопка сохранения диаграммы

вызывает стандартный для системы диалог сохранения файла. Позволяет сохранить диаграмму в файл. Можно выбрать следующие форматы файла диаграммы: png, pdf, svg, eps, ps. К сожалению не работает сохранение в формате emf (модуль pyemf разработчиком больше не поддерживается). Через формат emf было очень удобно вставлять диаграммы в документы Word.

Следующий пост по теме: Пакет matplotlib. Строим банальный график.

3 комментария:

  1. Я не совсем хорошо разбираюсь в импортах, так что:
    import matplotlib.pyplot as plt
    from pylab import *

    #подержка кирилицы
    rcParams['font.serif']="Verdana, Arial"
    rcParams['font.sans-serif']="Tahoma, Arial"
    rcParams['font.cursive']="Courier New, Arial"
    rcParams['font.fantasy']="Comic Sans MS, Arial"
    rcParams['font.monospace']="Arial"

    # очистить фигуру, у меня несколько функций которые используют глобально фигуру с разными типами графиков
    plt.clf()
    # смещение графика чтобы помещались длинные вертикальные подписи по оси Х
    plt.axes([0.1, 0.2, 0.8, 0.4])
    plt.plot( pos, val )
    #собственно вертикальные подписи по оси Х
    plt.xticks(pos, dates,rotation='vertical')
    #запись фигуры в файл
    plt.savefig('chart.png',dpi=200)

    ОтветитьУдалить
  2. Не заработало ничего из вышеперечисленного на W7 + python(x,y)
    Результаты разные - от красивых квадратиков на месте заголовка, до падения matplot и питона. Matplotlibrc на винде поддерживается криво.
    Моё решение оказалось
    plt.title(u"I speak Русский",{'fontname':'Arial','fontsize':16})
    Оставляю тут если кто будет искать :)

    ОтветитьУдалить
  3. Я видел комментарии людей, которые уже получили ссуду от г-на Бенджамина Ли, и я решил подать заявку в соответствии с их рекомендациями, и всего через 5 дней я подтвердил свою ссуду на моем банковском счете на общую сумму 850 000,00 долларов США, которую я запросил. Это действительно отличная новость, и я советую всем, кому нужен настоящий кредитор, подать заявку по электронной почте: 247officedept@gmail.com или WhatsApp: + 1-989-394-3740. Я счастлив, что получил ссуду, о которой просил.

    ОтветитьУдалить