API¶
Библиотека двумерной графики libGraph2D¶
- class libGraph2D.Contour(ax, Obj, keyX, keyY, keyZ)[исходный код]¶
- Менеджер графика линий уровня. Копит и сохраняет данные, отрисовывает линию.
Простого типа int|float|numpy.ndarray (не вектор/кватернион)
Можно добавлять точки по одной или чанками (см. DataStore)
Добавляет метку на оси: z(x, y)
- Параметры:
ax (axes)
Obj (object)
keyX
keyY
атрибутов (keyZ - имена)
- Plot()[исходный код]¶
плотим накопленные данные на график
- class libGraph2D.DataStore(Obj, attribute, n=0, chunkLen=1)[исходный код]¶
- хранитель данных (внутри используется numpy.ndarray)
простого типа int|float|numpy.ndarray (не кватернион) можно добавлять точки по одной или чанками:
размерность m * n, где m-индекс по времени, n-размерность вектора
выбор на основе длины атрибута объекта, на момент инициализации
ожидается, что длина чанка chunkLen _не_будет_меняться_
- Параметры:
Obj (object)
attribute (str)
n (int) - размерность атрибута (если вектор, то его длина)
chunkLen (int)
- Add()[исходный код]¶
добавляем данные поточечно или чанками (с проверкой длины) индекс инкрементируется внутри Add
- Reset()[исходный код]¶
заполнить массивы NaN-ом и сбросить индекс
- class libGraph2D.Line_fiv(ax, time, Obj, attribute, n=0, chunkLen=1)[исходный код]¶
- Менеджер линии. Копит и сохраняет данные от времени (наследует от DataStore),
отрисовывает линию. Простого типа int|float|numpy.ndarray (не кватернион)
Для отрисовки кватерниона либо перевести его в numpy.ndarray, либо использовать класс Line_q (правда он работает с ним только поточечно)
Можно добавлять точки по одной или чанками (см. DataStore)
- Добавляет красивую метку на оси в LaTeX, в зависимости от размерности:
для одномерного просто своё имя 2D: индексы x, y (предполагается что вектор) 3D: индексы x, y, z (предполагается что вектор) 4D: индексы w, x, y, z (предполагается что кватернион)
- Параметры:
ax (axes)
time (DataStore)
Obj (object)
attribute (str)
n (int) - размерность атрибута (если вектор, то его длина)
chunkLen (int)
- Plot()[исходный код]¶
плотим накопленные данные на график
- class libGraph2D.Line_q(ax, time, Obj, attribute)[исходный код]¶
класс для линии, принимающей кватернион поточечно (т.е. может брать данные из кватерниона)
- Параметры:
ax (axes)
time (DataStore)
Obj (object)
attribute (str) - имя атрибута (допускается только кватернион)
- Add()[исходный код]¶
добавляем данные кватерниона поточечно
- class libGraph2D.Line_xy(ax, time, Obj, Attributes, chunkLen=1)[исходный код]¶
- Менеджер линии. Копит и сохраняет данные, отрисовывает линию.
Простого типа int|float|numpy.ndarray (не вектор/кватернион)
Можно добавлять точки по одной или чанками (см. DataStore)
Добавляет метку на оси: переменная_y(переменная_x)
- Параметры:
ax (axes)
time (DataStore)
Obj (object)
Attributes (list2 of str)
chunkLen (int)
- Add()[исходный код]¶
добавляем данные
- Plot()[исходный код]¶
плотим накопленные данные на график
- class libGraph2D.Plot2D(DB=None)[исходный код]¶
Динамический 2D график
Динамический 2D график получает данные, каждый цикл копит их внутри, во внутренних переменных, но отрисовывает их по специальной команде. Вызов отрисовщика происходит с заданным интервалом в реальном времени
Это не бегущий график, а просто обычный график, в который добавляется информация с некоторым шагом в реальном времени
TODO: наследовать от Plot2DBase TODO: https://stackoverflow.com/questions/40126176/fast-live-plotting-in-matplotlib-pyplot
- Параметры:
DB (obj) – объект базы данных, атрибуты которого содержат данные для отрисовки. Объект обязательно должен содержать атрибут с текущим временем (Time)
Пример использования в классе задачи:
def Setup(self): self.plot1 = Plot2D(DB=self) self.plot1.Setup('t', [['w_B'], ['w_I']]) def Initialize(self): self.plot1.Initialize() def Run(self): self.plot1.Run() # отправляем результаты расчёта на график def Finalize(self): self.plot1.Finalize()
- Finalize()[исходный код]¶
финализация - дорисовываем на графике накопленные данные
- Initialize()[исходный код]¶
инициализация графика (очистка при старте)
- Plot()[исходный код]¶
плотим накопленные данные на график
- Run()[исходный код]¶
добавление точки (текущего состояния БД)
- Setup(TimeKey, Keys, chunkLen=1, name=None, tight=False)[исходный код]¶
Метод настраивает вид графика
- Параметры:
TimeKey (str) – имя переменной (м.б float|numpy.array|list) в которой хранится время
Keys (list) –
список переменных БД, которые будут отрисовываться на графиках.
формат Keys
[[„g“], - переменная от времени [„g“, „x1“]] - две переменные на одном графике
длина списка соответствует колву графиков
chunkLen (int) – длина чанка данных, который будет передаваться в переменных
name (str) – имя графика. Окно графика будет иметь вид „Figure 1: name“
- onResetClicked(event)[исходный код]¶
обработчик нажатия на Reset
- onSaveClicked(event)[исходный код]¶
обработчик нажатия на Save
сохраняем данные всех линий в файл pickle с уникальным именем
- class libGraph2D.Plot2DBase(DB=None)[исходный код]¶
Базовый класс графика. Реализует открытие фигуры, инициализацию и т.п.
- Finalize()[исходный код]¶
финализация - дорисовываем на фигуре накопленные данные
- Initialize()[исходный код]¶
инициализация фигуры (очистка при старте)
- Setup(nAx, name=None, tight=False)[исходный код]¶
Метод настраивает вид фигуры
- Параметры:
name (str) – имя фигуры. Окно фигуры будет иметь вид „Figure 1: name“
- class libGraph2D.PlotXY(DB=None)[исходный код]¶
Динамический XY график
Динамический 2D график получает данные, каждый цикл копит их внутри, во внутренних переменных, но отрисовывает их по специальной команде. Вызов отрисовщика происходит с заданным интервалом в реальном времени
Это не бегущий график, а просто обычный график, в который добавляется информация с некоторым шагом в реальном времени
- Параметры:
DB (obj) – объект базы данных, атрибуты которого содержат данные для отрисовки. Объект обязательно должен содержать атрибут с текущим временем (Time)
Пример использования в классе задачи:
def Setup(self): self.plot1 = Plot2D(DB=self) self.plot1.Setup('t', [['x1','y1'], ['x2','y2']]) def Initialize(self): self.plot1.Initialize() def Run(self): self.plot1.Run() # отправляем результаты расчёта на график def Finalize(self): self.plot1.Finalize()
- Finalize()[исходный код]¶
финализация - дорисовываем на графике накопленные данные
- Initialize()[исходный код]¶
инициализация графика (очистка при старте)
- Plot()[исходный код]¶
плотим накопленные данные на график
- Run()[исходный код]¶
добавление точки (текущего состояния БД)
- Setup(TimeKey, Keys, chunkLen=1, name=None, tight=False, axLabels=None)[исходный код]¶
Метод настраивает вид графика
- Параметры:
TimeKey (str) – имя переменной (м.б float|numpy.array|list) в которой хранится время
Keys (list) –
список переменных БД, которые будут отрисовываться на графиках.
формат Keys
[[„x1“,“y1“]] - переменные
длина списка соответствует колву графиков
chunkLen (int) – длина чанка данных, который будет передаваться в переменных
name (str) – имя графика. Окно графика будет иметь вид „Figure 1: name“ Указывайте имя фигуры, это а) удобно и б) поможет избежать некоторых ошибок..
axLabels (list2 of str) – метки осей, типа r’угол атаки $lpha,,^{circ}$“
- class libGraph2D.PlotXYcnt(DB=None)[исходный код]¶
plotXY + contour (по матрице)
- Initialize()[исходный код]¶
инициализация графика (очистка при старте)
- Run()[исходный код]¶
плотим накопленные данные на график
- Setup(TimeKey, Keys, aedb=None, chunkLen=1, name=None, tight=False)[исходный код]¶
aedb (dict): словарь с именами матриц, которые будут использоваться в contour Ключи „x“, „y“, „z“ содержат имена
- class libGraph2D.Storager(DB=None)[исходный код]¶
Хранитель данных. Сохраняет данные внутри себя (в numpy.ndarray), затем по финализации сохраняет их в файл
- DB (obj): объект базы данных, атрибуты которого содержат данные для отрисовки.
Объект обязательно должен содержать атрибут с текущим временем (Time)
Пример использования в классе задачи:
def Setup(self): self.storage = Storager(DB=self) self.storage.Setup('t', ['w_B', 'B_B']) def Initialize(self): self.storage.Initialize() def Run(self): self.storage.Run() def Finalize(self): self.storage.Finalize()
- Finalize(fileName=None)[исходный код]¶
финализация - сохраняем накопленные данные
- Параметры:
fileName (str) –
имя файла.
None - данные будут сохранены в поле Res в словаре
’pickle“ | „csv“ - будет сгенерировано уникальное имя (дата-время-имя задачи)
строка с полным именем - сохранится с форматом по .endswith
- Initialize()[исходный код]¶
инициализация Хранителя (очистка при старте)
- Run()[исходный код]¶
добавление точки (текущего состояния БД)
- Setup(TimeKey, Keys, chunkLen=1, directory='')[исходный код]¶
Метод настраивает Хранителя
- Параметры:
TimeKey (str) – имя переменной (м.б float|numpy.array|list) в которой хранится время
Keys (list of str) – список переменных БД, которые будут хранится.
chunkLen (int) – длина чанка данных, который будет передаваться в переменных
directory (str) – директория, куда сохранять файлы, с завершающим „/“ или „“
- libGraph2D.superScript(s)[исходный код]¶
для метки, формирует в LaTeX верхние индексы
Библиотека дополнительных удобных штук libUtils¶
- class libUtils.DataBuffer(Obj=None)[исходный код]¶
- буфер данных (внутри используется list)
для хранения данных с предыдущих итераций добавлять точки по одной
- Параметры:
Obj (object) – Объект обязательно должен содержать атрибут с текущим временем (Time)
Пример использования в классе задачи:
def Setup(self): self.Buf = DataBuffer(Obj=self) self.Buf.Setup('t', ['x','y'], N=3) def Initialize(self): self.Buf.Initialize() def Run(self): self.Buf.Run() print(self.Buf.x[-1]) # выводим i-1 значение x print(self.Buf.x[-2]) # выводим i-2 значение x
- Initialize()[исходный код]¶
инициализация - при старте заполняем буфера переменных текущим значением
- Run()[исходный код]¶
добавление точки (текущего состояния БД) TODO: for -> np.roll
- Setup(TimeKey, Keys, N=1)[исходный код]¶
Метод настраивает буфер
- Параметры:
TimeKey (str) – имя переменной, в которой хранится время
Keys (list of str) – список переменных БД, которые будут хранится
N (int) – колво точек