Те кому хотя бы раз в жизни приходилось обучаться в техническом ВУЗ'е строили такие графики штук по 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
А отобразить показатели данных на диаграмме?
ОтветитьУдалить