{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Visualizing impedance spectra\n", "\n", "Plotting a basically formated impedance plot is as easy as 1, 2, 3..." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "from impedance_extend.models.circuits import CustomCircuit\n", "from impedance_extend import preprocessing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Read in data" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "frequencies, Z = preprocessing.readCSV('../../../data/exampleData.csv')\n", "\n", "# keep only the impedance data in the first quandrant\n", "frequencies, Z = preprocessing.ignoreBelowX(frequencies, Z)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Fit a custom circuit\n", "\n", "(If you want to just plot experimental data without fitting a model you should check out the `visualization.plot_*()` functions)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Circuit string: R_0-p(R_1,C_1)-p(R_1,C_1)-Wo_1\n", "Fit: True\n", "\n", "Initial guesses:\n", " R_0 = 1.00e-02 [Ohm]\n", " R_1 = 5.00e-03 [Ohm]\n", " C_1 = 1.00e-01 [F]\n", " R_1 = 5.00e-03 [Ohm]\n", " C_1 = 1.00e-01 [F]\n", " Wo_1_0 = 1.00e-03 [Ohm]\n", " Wo_1_1 = 2.00e+02 [sec]\n", "\n", "Fit parameters:\n", " R_0 = 1.65e-02 (+/- 1.54e-04) [Ohm]\n", " R_1 = 5.31e-03 (+/- 2.06e-04) [Ohm]\n", " C_1 = 2.32e-01 (+/- 1.90e-02) [F]\n", " R_1 = 8.77e-03 (+/- 1.89e-04) [Ohm]\n", " C_1 = 3.28e+00 (+/- 1.85e-01) [F]\n", " Wo_1_0 = 6.37e-02 (+/- 2.03e-03) [Ohm]\n", " Wo_1_1 = 2.37e+02 (+/- 1.72e+01) [sec]\n", "\n" ] } ], "source": [ "circuit = CustomCircuit(initial_guess=[.01, .005, .1, .005, .1, .001, 200], circuit='R_0-p(R_1,C_1)-p(R_1,C_1)-Wo_1')\n", "\n", "circuit.fit(frequencies, Z)\n", "\n", "print(circuit)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Plot the data and fit" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### a. Interactive altair plot" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "" ], "text/plain": [ "alt.HConcatChart(...)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "circuit.plot(f_data=frequencies, Z_data=Z)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### b. Nyquist plot via matplotlib" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "