Source code for myogen.utils.plotting.currents
from beartype import beartype
from beartype.cave import IterableType
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.axes import Axes
from typing import Any
from myogen.utils.types import INPUT_CURRENT__MATRIX
[docs]
@beartype
def plot_input_current__matrix(
input_current__matrix: INPUT_CURRENT__MATRIX,
timestep__ms: float,
axs: IterableType[Axes],
apply_default_formatting: bool = True,
**kwargs: Any,
) -> IterableType[Axes]:
"""
Plot the input current.
Parameters
----------
input_current__matrix: INPUT_CURRENT__MATRIX
Matrix of shape (1, t_points) containing current values
Each row represents the current for one pool
timestep__ms: float
Simulation timestep__ms in ms
axs: IterableType[Axes]
Matplotlib axes to plot on. This could be the same axis for all pools, or a separate axis for each pool.
apply_default_formatting: bool
Whether to apply default formatting to the plot
**kwargs: dict
Additional keyword arguments to pass to the plot function. Only used if apply_default_formatting is False.
Returns
-------
IterableType[Axes]
The axes that were plotted on
Raises
------
ValueError
If the number of axes does not match the number of pools
"""
t = np.arange(0, input_current__matrix.shape[-1] * timestep__ms, timestep__ms)
if len(list(axs)) != input_current__matrix.shape[0]:
raise ValueError(
f"Number of axes must match number of pools. Got {len(list(axs))} axes, but {input_current__matrix.shape[0]} pools."
)
for i, (current, ax) in enumerate(zip(input_current__matrix, list(axs))):
ax.plot(t, current, **kwargs)
if apply_default_formatting:
ax.set_title(f"Pool {i + 1} Input Current")
ax.set_xlabel("Time (ms)")
ax.set_ylabel("Current (nA)")
return axs