Skip to content
/ mkplot Public
forked from xdoni4/mkplot

A tool for easier applied plotmaking with matplotlib

Notifications You must be signed in to change notification settings

ShFsn/mkplot

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 

Repository files navigation

mkplot

Построение графиков с помощью MatPlotLib

Возможности

  • Построение по точкам с указанием погрешностей в виде крестов, который можно допонить:
    • графиком МНК
    • графиком МНК на логарифмической шкале
    • графиком полиномиальной регрессии
  • Построение графика произвольной функции или заданной вручную линии
  • Запись рассчитанных коэффициентов для МНК и полиномиальной регрессии всех графиков в файл
  • Построение нескольких графиков на одной координатной плоскости
  • Построение нескольких координатных плоскостей
  • Добавление названий графиков, осей, легенды

Как пользоваться

1. Файл с данными

Рядом с 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, а третий -- заданная вручную линия в форме буквы "М".

Примечание: Пока есть некоторые траблы с построением нескольких координатых плоскостей -- графики очень сильно сжимаются, поэтому лучше строить только одну координатную плоскость за раз.

2. Подробнее о графиках

У каждого графика есть поля:

  • "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) при необходимости.

3. Подробнее о погрешностях

Для упрощения жизни поддерживаются три режима ("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

4. Построение произвольных линий

Можно строить произвольные линии, задав "type" : "plot". Это может пригодиться, например, если нужно отобразить на графике визуальные референсы (какую-нибудь асимптоту, скорость звука на графике разгона и т.п.).

Для построения прямой достаточно задать всего две точки -- откуда и куда её нужно провести.

В случае же, если вам нужно отобразить, например, теоретическое ожидание, представленное сложным уравнением, вы можете воспользоваться скриптом equation.py. Открыв его в текстовом редакторе, задайте начальную и конечную координату по оси X, число точек на этом промежутке (100 штук обычно достаточно с головой), после чего внутри функции equation() опишите желаемое уравнение. Функция должна принимать одно значение X и возвращать одно значение Y.

Теперь, запустив equation.py вы увидите окно с визуализацией заданной функции -- убедитесь, что она соответствует ожиданию. Точки для графика будут сохранены в папку /generated_files/plot.txt. Просто скопируйте всё и вставьте на место "x" и "y" в файле conf.json, в отдельном subplot (см. пример) -- после этого линия будет добавлена на итоговый график.

Задавать погрешности и форму точек для "type" : "plot" не обязательно, ни то, ни другое здесь не рисуется.

5. Запуск

Когда вы запишете информацию в conf.json, необходимо запустить main.py.

Примечание: при первом запуске может быть автоматически произведена установка python-библиотек NumPy и MatPlotLib, если таковые не установлены. Суммарный вес не превышает нескольких десятков мегабайт.

Помимо интерактивного графического окна, результат будет сохранен в файле /images/fig.png, параметры всех построенных прямых МНК и полиномов будут записаны в файл /generated_files/coefs.txt.

6. Для продвинутых пользователей

Несмотря на то, что в 99% случаев графики получаются как раз какие нужны, иногда нужно больше опций, поэтому для пользователей, запускающих скрипт из терминала, предусмотрены следующие опции:

  • "--size=WxH" -- размер выходного изображения в системе MatPlotLib, W и H -- ширина и высота
  • "--dpi=value" -- разрешение выходного изображения (также зависит от размера)
  • "--format=abc" -- выходной формат изображения. Поддерживаются png, pdf, svg и др.

About

A tool for easier applied plotmaking with matplotlib

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%