Source code for aeroshield.plotting.plotter

import numpy as np

from matplotlib import pyplot as plt


[docs] class Plotter: def __init__(self) -> None: self.create_empty_figure()
[docs] def create_empty_figure(self): self.fig, self.ax = plt.subplots(ncols=1, nrows=3, sharex=True) self.ref_line = self.ax[0].plot(0, 0, label="reference", linestyle="--", color="k")[0] self.angle_line = self.ax[0].plot(0, 0, label="angle")[0] self.ax[0].legend() self.ax[0].set_title("Reference tracking") self.ax[0].set_ylabel(r"Angle [$\degree$]") self.ax[0].grid(True) self.motor_line = self.ax[1].plot(0, 0, label="motor")[0] self.pot_line = self.ax[1].plot(0, 0, label="potentiometer")[0] self.ax[1].legend() self.ax[1].set_title("Input") self.ax[1].set_ylabel("Value [%]") self.ax[1].grid(True) self.dt_line = self.ax[2].plot(0, 0, label="dt")[0] self.ax[2].set_title("Time steps") self.ax[2].set_xlabel("Time [s]") self.ax[2].set_ylabel("dt [ms]") self.ax[2].grid(True)
[docs] def plot(self, hist): self.ref_line.set_data(hist[:, 0], hist[:, 1]) self.angle_line.set_data(hist[:, 0], hist[:, 3]) self.ax[0].relim() self.ax[0].autoscale_view() self.motor_line.set_data(hist[:, 0], hist[:, 4]/2.55) self.pot_line.set_data(hist[:, 0], hist[:, 2]) self.ax[1].relim() self.ax[1].autoscale_view() self.dt_line.set_data(hist[:, 0], 1000*np.gradient(hist[:, 0])) self.ax[2].relim() self.ax[2].autoscale_view() return self.fig, self.ax