Построение графиков с помощью MatPlotLib
- Построение по точкам с указанием погрешностей в виде крестов, который можно допонить:
- графиком МНК
- графиком МНК на логарифмической шкале
- графиком полиномиальной регрессии
- Построение графика произвольной функции или заданной вручную линии
- Запись рассчитанных коэффициентов для МНК и полиномиальной регрессии всех графиков в файл
- Построение нескольких графиков на одной координатной плоскости
- Построение нескольких координатных плоскостей
- Добавление названий графиков, осей, легенды
Рядом с main.py
создаёте файл conf.json
и добавляете в него информацию о графике, который вы хотите построить. Рассмотрим пример файла conf.json
:
{
"data" : [
{
"title" : "Plot 1",
"subplots" : [
{
"type" : "poly_4",
"x" : [0.09, 0.17, 0.26, 0.32, 0.39],
"y" : [0.05, 0.09, 0.17, 0.17, 0.21],
"xerr_mode": "absolute",
"xerr" : [0.01, 0.02, 0.02, 0.01, 0.02],
"yerr_mode": "absolute",
"yerr" : [0.03, 0.01, 0.01, 0.04, 0.01],
"axes_labels" : ["dx", "F"],
"axes_pupils" : ["м", "Н"],
"color" : "red",
"shape" : "o",
"description" : "пример полинома степени 4"
},
{
"type" : "lsq",
"x" : [0.09, 0.17, 0.26, 0.32, 0.39],
"y" : [0.18, 0.34, 0.52, 0.64, 0.78],
"xerr_mode": "absolute",
"xerr" : [0.01, 0.02, 0.02, 0.01, 0.02],
"yerr_mode": "absolute",
"yerr" : [0.03, 0.01, 0.01, 0.04, 0.01],
"axes_labels" : ["dx", "F"],
"axes_pupils" : ["м", "Н"],
"color" : "blue",
"shape" : "s",
"description" : "характеристика пружины с МНК"
},
{
"type" : "plot",
"x" : [0.0, 0.125, 0.25, 0.375, 0.5],
"y" : [0.25, 0.75, 0.5, 0.75, 0.25],
"axes_labels" : ["dx", "F"],
"axes_pupils" : ["м", "Н"],
"color" : "green",
"description" : "пример графика"
}
]
}
]
}
По структуре это вложенный словарь. Ключу "data" соответствует массив объектов. Каждый из элементов этого массива является координатной плоскостью.
У каждого элемента есть поля "title" -- название и "subplots" -- массив из графиков, которые должны быть построены на этой координатной плоскости.
В данном примере будет одна координатная плоскость, на которой будут построены три графика, один с МНК, другой с полиномиальной регрессией степени 4, а третий -- заданная вручную линия в форме буквы "М".
Примечание: Пока есть некоторые траблы с построением нескольких координатых плоскостей -- графики очень сильно сжимаются, поэтому лучше строить только одну координатную плоскость за раз.
У каждого графика есть поля:
- "type" : какой график строить по данным. В данный момент поддерживаются:
- "dots" -- просто точки
- "lsq" -- МНК
- "log_axis" -- логарифмическая шкала с МНК; "log_x", "log_y" или "log_x_y" отвечают за перевод в логарифмическую шкалу различных осей
- "poly_n" -- полиномиальная регрессия степени n
- "plot" -- проведение линии по точкам (полезно, если нужно показать теоретическое ожидание, провести асимптоту и т.п.)
- "x" : массив из x-координат точек
- "y" : массив из y-координат точек
- "xerr_mode" : режим погрешности по оси Ox
- "xerr" : погрешности x-координат точек
- "yerr_mode" : режим погрешности по оси Oy
- "yerr" : погрешности y-координат точек
- "axes_labels" : массив из названий осей в порядке Ox, Oy
- "axes_pupils" : массив из единиц измерения для осей в порядке Ox, Oy
- "color" : цвет построенной кривой
- "shape" : форма точек. Самые ходовые варианты:
- "o" -- круг
- "s" -- квадрат
- "v", "^" -- треугольники
- "D" -- ромб
- "description" : описание графика в легенде
Дополнительно к режимам "lsq", "log_axis" и "poly_n" можно добавить "_zero" (например: "log_y_zero"). В этом случае график будет принудительно проведён через начало координат (0, 0), и по обе стороны от него будет вести себя как нечётная функция. Область построения графика будет автоматически доведена до (0, 0) при необходимости.
Для упрощения жизни поддерживаются три режима ("xerr_mode", "yerr_mode") задания погрешностей точек ("xerr", "yerr"):
- "absolute" -- стандартный режим, абсолютная погрешность указывается для каждой точки отдельно. Пример:
"xerr_mode" : "absolute", "xerr" : [0.01, 0.02, 0.02, 0.01, 0.02]
- "constant" -- на случай, если везде одна и та же абсолютная погрешность. Пример:
"xerr_mode" : "constant", "xerr" : 0.3
- "relative" -- на случай, если везде одна и та же относительная погрешность. Пример погрешности 5%:
"xerr_mode" : "relative", "xerr" : 0.05
Можно строить произвольные линии, задав "type" : "plot"
. Это может пригодиться, например, если нужно отобразить на графике визуальные референсы (какую-нибудь асимптоту, скорость звука на графике разгона и т.п.).
Для построения прямой достаточно задать всего две точки -- откуда и куда её нужно провести.
В случае же, если вам нужно отобразить, например, теоретическое ожидание, представленное сложным уравнением, вы можете воспользоваться скриптом equation.py
. Открыв его в текстовом редакторе, задайте начальную и конечную координату по оси X, число точек на этом промежутке (100 штук обычно достаточно с головой), после чего внутри функции equation()
опишите желаемое уравнение. Функция должна принимать одно значение X и возвращать одно значение Y.
Теперь, запустив equation.py
вы увидите окно с визуализацией заданной функции -- убедитесь, что она соответствует ожиданию. Точки для графика будут сохранены в папку /generated_files/plot.txt
. Просто скопируйте всё и вставьте на место "x"
и "y"
в файле conf.json
, в отдельном subplot
(см. пример) -- после этого линия будет добавлена на итоговый график.
Задавать погрешности и форму точек для "type" : "plot"
не обязательно, ни то, ни другое здесь не рисуется.
Когда вы запишете информацию в conf.json
, необходимо запустить main.py
.
Примечание: при первом запуске может быть автоматически произведена установка python-библиотек NumPy и MatPlotLib, если таковые не установлены. Суммарный вес не превышает нескольких десятков мегабайт.
Помимо интерактивного графического окна, результат будет сохранен в файле /images/fig.png
, параметры всех построенных прямых МНК и полиномов будут записаны в файл /generated_files/coefs.txt
.
Несмотря на то, что в 99% случаев графики получаются как раз какие нужны, иногда нужно больше опций, поэтому для пользователей, запускающих скрипт из терминала, предусмотрены следующие опции:
- "
--size=WxH
" -- размер выходного изображения в системе MatPlotLib,W
иH
-- ширина и высота - "
--dpi=value
" -- разрешение выходного изображения (также зависит от размера) - "
--format=abc
" -- выходной формат изображения. Поддерживаются png, pdf, svg и др.