{ "cells": [ { "cell_type": "markdown", "id": "45dee56e", "metadata": {}, "source": [ "# Plotting\n", "\n", "The `plotting` module contains a few classes you can use to quickly generate plots of an experiment, as well as plot data live during the experiment. In this example, we will assume that you are familiar with the workings of the `ShieldController` class. If not, check this [example](./controller.ipynb). \n", "\n", "The `Plotter` and `LivePlotter` can be imported from the `plotting` module" ] }, { "cell_type": "code", "execution_count": 1, "id": "9ab99ff2-911e-427e-8d11-4667c803318c", "metadata": { "tags": [] }, "outputs": [], "source": [ "%%capture\n", "\n", "from automationshield import AeroShield, ShieldController\n", "from automationshield.plotting import Plotter, LivePlotter" ] }, { "cell_type": "markdown", "id": "1f3c5b42-03dc-4280-9182-1e7c967ed08d", "metadata": {}, "source": [ "We're reusing the PID controller of the `ShieldController` example, shown again below." ] }, { "cell_type": "code", "execution_count": 3, "id": "a3b0afd7-38a8-42af-a097-30b6bc3fe9bd", "metadata": {}, "outputs": [], "source": [ "class PIDController(ShieldController):\n", " def variables(self) -> None:\n", " # preface every variable defined in subclass with var_ to avoid overwrites.\n", " self.var_kp = 1\n", " self.var_ki = .25\n", " self.var_kd = .25\n", "\n", " self.var_total_error = 0\n", " self.var_prev_error = 0\n", "\n", " def controller(self, t: float, dt: float, ref: float, pot: float, angle: float) -> float:\n", " error = ref - angle\n", " self.var_total_error += error * dt\n", "\n", " proportional = self.var_kp * error\n", " integral = self.var_kp/self.var_ki * self.var_total_error\n", "\n", " if dt > 0:\n", " differential = self.var_kp*self.var_kd*(error - self.var_prev_error)/dt\n", " else:\n", " differential = 0\n", "\n", " motor = proportional + integral + differential\n", "\n", " self.var_prev_error = error\n", "\n", " return motor" ] }, { "cell_type": "markdown", "id": "705df524-63ec-44a9-9245-7244477339ab", "metadata": {}, "source": [ "Here, we create a shield and controller instance and define the frequency, cycles and reference we will use for an experiment." ] }, { "cell_type": "code", "execution_count": 4, "id": "6edc5012-26c3-4701-a37a-f0ed6a13d85b", "metadata": { "tags": [] }, "outputs": [], "source": [ "shield = AeroShield()\n", "pid_controller = PIDController(shield)\n", "\n", "freq = 200\n", "cycles = 1000\n", "ref = 45" ] }, { "cell_type": "markdown", "id": "1c89bc6d-9098-4b11-bfbb-f591352d4a75", "metadata": {}, "source": [ "## `LivePlotter`\n", "\n", "Because this tutorial is written in Jupyter, we need to jump through some hoops to make this work smoothly. A live plot must be placed in a separate window. We achieve this by using the magic command. After the magic command, we should import matplotlib again to change the backend.\n", "\n", "We then create an instance of the `LivePlotter` class. There are several customisation options, some of which are used here. In a Jupyter environment, `hold` must always be set to `False` (the default), otherwise the plot window will stop responding and cause the kernel to crash. Please refer to the API Documentation for a complete list of options. \n", "\n", "The `run` method of the controller takes an optional `live_plotter` keyword argument. Passing a LivePlotter instance to it is all that is needed to get a live plot as the experiment is running." ] }, { "cell_type": "code", "execution_count": 5, "id": "9134a117-8f29-4f05-b914-11021159bef4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Using matplotlib backend: \n", "Using matplotlib backend: QtAgg\n" ] } ], "source": [ "# set matplotlib to use separate plotting window\n", "%matplotlib\n", "# we call the magic command twice because the internet says so. ¯\\_(ツ)_/¯\n", "%matplotlib\n", "\n", "# we need to import matplotlib again after the magic command\n", "from matplotlib import pyplot as plt\n", "\n", "\n", "live_plotter = LivePlotter(shield, show_dt=True, show_pot=False, hold=False)\n", "results = pid_controller.run(freq, cycles, ref, live_plotter=live_plotter)" ] }, { "cell_type": "markdown", "id": "7c89ea38-2511-4f44-ad5c-b8030c751034", "metadata": {}, "source": [ "## `Plotter`\n", "\n", "If you just (or also) want a plot with the results of the experiment when it's finished, you can use the `Plotter` class. In Jupyter, we can change the matplotlib to inline such that the plot is shown below the code block. The `Plotter` takes the same arguments as `LivePlotter` (which actually inherits from `Plotter`), except the `hold` argument." ] }, { "cell_type": "code", "execution_count": 6, "id": "ad312c30-97bc-4465-bde9-02fb906a3865", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# set matplotlib to use inline plotting\n", "%matplotlib inline\n", "%matplotlib inline\n", "\n", "# we need to import matplotlib again after the magic command\n", "from matplotlib import pyplot as plt\n", "\n", "\n", "# results = pid_controller.run(freq, cycles, ref)\n", "fig, ax = Plotter(shield).plot(results)" ] }, { "cell_type": "markdown", "id": "8f540406-63e3-4e56-8579-09d21f8decfd", "metadata": {}, "source": [ "## Selecting an Appropriate Backend\n", "\n", "It is possible that, when attempting to plot live from a Jupyter environment, matplotlib complains about not having an appropriate backend available or that the plotting runs extremely slow. If that is the case, you can try to force matplotlib to use PyQT5, which you might have to install as well." ] }, { "cell_type": "code", "execution_count": null, "id": "81a30792-7555-4108-aedb-cc96af73e60f", "metadata": {}, "outputs": [], "source": [ "import matplotlib\n", "\n", "\n", "# tell matplotlib to use PyQT5\n", "matplotlib.use(\"QT5Agg\")" ] }, { "cell_type": "markdown", "id": "e173506c-2ff6-4554-a0f5-27da35840e0d", "metadata": {}, "source": [ "You can install PyQT5 in your Python environment using pip:\n", "\n", "`$ pip install PyQT5`" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.14" } }, "nbformat": 4, "nbformat_minor": 5 }