Те кому хотя бы раз в жизни приходилось обучаться в техническом ВУЗ'е строили такие графики штук по 5-10 в день. Банальный график это две пересекающиеся под прямым углом линии (координатные оси) на которые нанесены масштабные деления с числами. Линии снабжены подписями - что собственно эти числа обозначают. В плоскости образованной линиями, тем или иным способом (с помощью точек, кружков, треугольничков, крестиков и т.д.) помечаются некоторые значения. График снабжается легендой, чтобы можно было узнать чем кружки отличаются от крестиков и подписью, чтобы можно было узнать что и зачем построено. Вот именно такой график рисует нижеприведенный скрипт.
# -*- coding: UTF-8 -*- import matplotlib.pyplot as plt # Значения по оси X X = [20.0, 40.0, 60.0, 80.0, 100.0] # Набор значений по оси Y Y_10 = [0.97252, 0.94238, 0.89927, 0.85197, 0.79784] Y_20 = [0.96864, 0.93518, 0.89113, 0.84344, 0.78934] Y_30 = [0.96395, 0.92770, 0.88278, 0.83473, 0.78075] # Строим диаграмму # Задаем исходные данные для каждой линии диаграммы, внешний вид линий и маркеров. # Функция plot() возвращает кортеж ссылок на объекты класса matplotlib.lines.Line2D line_10, line_20, line_30 = plt.plot(X, Y_10, 'bD:', X, Y_20, 'r^:', X, Y_30, 'go:') # Задаем интервалы значений по осям X и Y plt.axis([15.0, 105.0, 0.75, 1.0]) # Задаем заголовок диаграммы plt.title(u'Зависимость плотности водных растворов этилового спирта от температуры') # Задаем подписи к осям X и Y plt.xlabel(u'Массовая доля этилового спирта, %') plt.ylabel(u'Плотность, г/мл') # Задаем исходные данные для легенды и ее размещение plt.legend( (line_10, line_20, line_30), (u'Температура 10 \u00b0C', u'Температура 20 \u00b0C', u'Температура 30 \u00b0C'), loc = 'best') # Включаем сетку plt.grid() # Сохраняем построенную диаграмму в файл # Задаем имя файла и его тип plt.savefig('spirit.png', format = 'png')
В результате выполнения скрипта файл spirit.png должен содержать такое изображение.

Комментарии к коду.
Функция plot() строит 2D диаграмму - задает исходные данные и внешний вид линии (линий) диаграммы. Функция принимает произвольное число наборов аргументов вида X_set, Y_set, format_string. Где X_set и Y_set типа list или numpy.array - значения откладываемые по осям X и Y соответственно, format_string - строка форматирования (не обязательный аргумент набора), определяет стиль и цвет линии. Строка форматирования (позаимствована из системы Matlab) включает (в произвольном порядке) три подстроки определяющих стиль линии, стиль маркера, цвет. Например 'g^:' = 'g' + '^' + ':' - цвет зеленый, маркер треугольник вершиной вверх, линия состоит из точек.
Ниже в таблицах приведены возможные значения для каждой из подстрок строки форматирования, а на рисунках представлены результаты их применения.
Стили линий
Символ | Описание | |
---|---|---|
'-' | solid line style | непрерывная линия |
'--' | dashed line style | линия из штрихов |
'-.' | dash-dot line style | чередование штрихов и точек |
':' | dotted line style | линия из точек |

Стили маркеров
Я умышленно не стал переводить названия маркеров из документации, дабы не придумывать как по русски выразить различия между point marker и pixel marker или как обозвать tri_right marker с thin_diamond marker.
Символ | Описание |
---|---|
'.' | point marker |
',' | pixel marker |
'o' | circle marker |
'v' | triangle_down marker |
'^' | triangle_up marker |
'<' | triangle_left marker |
'>' | triangle_right marker |
'1' | tri_down marker |
'2' | tri_up marker |
'3' | tri_left marker |
'4' | tri_right marker |
's' | square marker |
'p' | pentagon marker |
'*' | star marker |
'h' | hexagon1 marker |
'H' | hexagon2 marker |
'+' | plus marker |
'x' | x marker |
'D' | diamond marker |
'd' | thin_diamond marker |
'|' | vline marker |
'_' | hline marker |

Цвета
Символ | Цвет | |
---|---|---|
'b' | blue | синий |
'g' | green | зеленый |
'r' | red | красный |
'c' | cyan | бирюзовый |
'm' | magenta | пурпурный |
'y' | yellow | желтый |
'k' | black | черный |
'w' | white | белый |

Функция plot() возвращает кортеж ссылок на объекты класса matplotlib.lines.Line2D. Каждый из объектов кортежа представляет линию на диаграмме. Посредством методов объектов можно менять свойства (внешний вид) любой из линий. В нашем случае кортеж ссылок в дальнейшем передается функции legend().
Функция axis() задает свойства осей диаграммы. В частности с её помощью можно установит масштаб осей. Для этого функции необходимо передать одни аргумент - список из четырех значений. Функция рассматривает такой список как [x_min, x_max, y_min, y_max], где x_min, y_min минимальные, x_max, y_max максимальные значения откладываемые по осям X и Y соответственно.
Функция может принимать в качестве одного аргумента и строку. Возможные значения такого аргумента и оказываемые ими действия представлены в таблице.
Аргумент | Действие |
---|---|
'off' | Выключает отображение осей (вместе с подписями) |
'equal' | Изменяет масштаб по осям так, чтобы равному изменению x или y соответсвовала одинаковая длинна на диаграмме. Как сказано в документации "круг превращается в круг". |
'scaled' | Тот же эффект, что у 'equal' достигается изменением соотношения сторон диаграммы. |
'tight' | Масштаб по осям изменяется так, что бы отображались все данные. Если все данные уже находятся в поле диаграммы, масштаб изменяется так, чтобы линии располагались в центре диаграммы. |
Функция legend() задает свойства и расположения легенды диаграммы. В примере использован вызов функции принимающий в качестве первых двух аргументов кортежи - первый содержит ссылки на объекты типа Line2D, второй соответствующие им подписи. Именованный аргумент loc задает расположение легенды, может быть или строкой или числом. Возможные варианты значений аргумента loc представлены в таблице.
Значения аргумента loc | Расположение легенды | |
---|---|---|
Строка | Число | |
'best' | 0 | Оптимальное расположение легенды определяется автоматически. Значение по умолчанию. |
'upper right' | 1 | сверху справа |
'upper left' | 2 | сверху слева |
'lower left' | 3 | снизу слева |
'lower right' | 4 | снизу справа |
'right' | 5 | справа |
'center left' | 6 | в центре слева |
'center right' | 7 | в центре справа, не отличается от 'right' |
'lower center' | 8 | в сентер снизу |
'upper center' | 9 | в центре сверху |
'center' | 10 | в центре диаграммы |
Сформировать легенду можно и другим (на мой взгляд менее громоздким) способом. Функция plot() (если задано построение только одной линии) принимает именованный аргумент label. Это строка, подпись к линии, на основании которой вызов функции legend() без аргументов добавляет к диаграмме легенду. Вышеприведенный скрипт мог быть написан и так:
# Строим диаграмму # Задаем исходные данные для каждой линии диаграммы, внешний вид линий и маркеров, подписи. plt.plot(X, Y_10, 'bD:', label = u'Температура 10 \u00b0C') plt.plot(X, Y_20, 'r^:', label = u'Температура 20 \u00b0C') plt.plot(X, Y_30, 'go:', label = u'Температура 30 \u00b0C') # Добавляем к диаграмме легенду plt.legend(loc = 'best')
Функция grid() строит сетку координатных осей.
Функция savefig() сохраняет диаграмму в файл. Первый аргумент - строка, путь к файлу. Именованный аргумент format - строка, задает формат файла, может принимать значения 'png', 'pdf', 'ps', 'eps', 'svg'.
Здесь необходимо сказать пару слов о размерах и разрешении получающихся изображений диаграмм. В файле matplotlibrc можно задать два свойства figure.figsize и figure.dpi (свойства можно задать, разумеется и через структуру rcParams, смотри предыдущий пост).
Первое определяет размер диаграммы в дюймах, второе разрешение в точках на дюйм. Меняя указанные свойства, можно добиться требуемого размера и соотношения сторон диаграммы.В заключении отмечу, что здесь описаны далеко не все способы настройки внешнего вида элементов диаграммы. Наведение всяких красивостей тема для отдельного разговора.
Предыдущий пост по теме: Пакет matplotlib. Установка, проверка, настройка.
Следующий пост по теме: Пакет matplotlib. График с дополнительной осью ординат.
Can you tell us more about this? I'd care to find out some additional information.
ОтветитьУдалитьmy weblog fatloss factor reviews
А отобразить показатели данных на диаграмме?
ОтветитьУдалить