Source code for neurokin.utils.neural.neural_plot

import numpy as np
from numpy.typing import ArrayLike
from typing import List
from matplotlib import axes as ax


[docs] def plot_spectrogram(ax: ax, fs: float, raw: ArrayLike, ylim: List[int], title: str = "", tick_spacing: int = 10, nfft: int = None, noverlap: int = None, vmin=None, vmax=None, **kwargs) -> ax: """ Wrapper for matplotlib spectrogram to add some style elements. :param ax: axes where to plot :param fs: sampling frequency :param raw: raw data :param title: title of the figure :param ylim: limit of frequencies :param tick_spacing: spacing of the ticks on the axis :param nfft: nfft to comput the fft :param noverlap: number of overlap points :return: """ ax.set_title(title) ax.specgram(raw, NFFT=nfft, Fs=fs, noverlap=noverlap, vmin=vmin, vmax=vmax, **kwargs) ax.set_ylim(ylim) ax.set_yticks(np.arange(ylim[0], ylim[1], tick_spacing)) return ax
[docs] def plot_welch(ax: ax, freqs: ArrayLike, pxx_den: ArrayLike, title: str = "PSD", xlim=None, ylim=None, tick_spacing: int = 10) -> ax: """ Returns a plot of psd with some style elements :param ax: axes where to plot :param freqs: array like of frequencies corresponding to the x axis :param pxx_den: array like of powers corresponding to the y axis :param title: str :param xlim: limit of frequencies for plotting :param ylim: limit of power for plotting :param tick_spacing: spacing of the ticks on the axis :return: """ ax.set_title(title) if not xlim is None: ax.set_xlim(xlim) ticks_min = xlim[0] ticks_max = xlim[1] else: ticks_min = min(freqs) ticks_max = max(freqs) if not ylim is None: ax.set_ylim(ylim) ax.set_xticks(np.arange(ticks_min, ticks_max, tick_spacing)) ax.set_xlabel('frequency [Hz]') ax.set_ylabel('PSD [V**2/Hz]') ax.semilogy(freqs, pxx_den) return ax