Source code for bluecellulab.analysis.plotting

"""Module for plotting analysis results of cell simulations."""

import matplotlib.pyplot as plt
import pathlib


[docs] def plot_iv_curve( currents, voltages, injecting_section, injecting_segment, recording_section, recording_segment, show_figure=True, save_figure=False, output_dir="./", output_fname="iv_curve.pdf", ): """Plots the IV curve. Args: currents (list): The injected current levels (nA). voltages (list): The corresponding steady-state voltages (mV). injecting_section (str): The section in the cell where the current was injected. injecting_segment (float): The segment position (0.0 to 1.0) where the current was injected. recording_section (str): The section in the cell where spikes were recorded. recording_segment (float): The segment position (0.0 to 1.0) where spikes were recorded. show_figure (bool): Whether to display the figure. Default is True. save_figure (bool): Whether to save the figure. Default is False. output_dir (str): The directory to save the figure if save_figure is True. Default is "./". output_fname (str): The filename to save the figure as if save_figure is True. Default is "iv_curve.pdf". Raises: ValueError: If the lengths of currents and voltages do not match. """ if len(currents) != len(voltages): raise ValueError("currents and voltages must have the same length") plt.figure(figsize=(10, 6)) plt.plot(currents, voltages, marker='o', linestyle='-', color='b') plt.title("I-V Curve") plt.xlabel(f"Injected Current [nA] at {injecting_section}({injecting_segment:.2f})") plt.ylabel(f"Steady state voltage [mV] at {recording_section}({recording_segment:.2f})") plt.grid(True) plt.tight_layout() if show_figure: plt.show() if save_figure: pathlib.Path(output_dir).mkdir(parents=True, exist_ok=True) plt.savefig(pathlib.Path(output_dir) / output_fname, format='pdf') plt.close()
[docs] def plot_fi_curve( currents, spike_count, injecting_section, injecting_segment, recording_section, recording_segment, show_figure=True, save_figure=False, output_dir="./", output_fname="fi_curve.pdf", ): """Plots the F-I (Frequency-Current) curve. Args: currents (list): The injected current levels (nA). spike_count (list): The number of spikes recorded for each current level. injecting_section (str): The section in the cell where the current was injected. injecting_segment (float): The segment position (0.0 to 1.0) where the current was injected. recording_section (str): The section in the cell where spikes were recorded. recording_segment (float): The segment position (0.0 to 1.0) where spikes were recorded. show_figure (bool): Whether to display the figure. Default is True. save_figure (bool): Whether to save the figure. Default is False. output_dir (str): The directory to save the figure if save_figure is True. Default is "./". output_fname (str): The filename to save the figure as if save_figure is True. Default is "fi_curve.pdf". Raises: ValueError: If the lengths of currents and spike counts do not match. """ if len(currents) != len(spike_count): raise ValueError("currents and spike count must have the same length") plt.figure(figsize=(10, 6)) plt.plot(currents, spike_count, marker='o') plt.title("F-I Curve") plt.xlabel(f"Injected Current [nA] at {injecting_section}({injecting_segment:.2f})") plt.ylabel(f"Spike Count recorded at {recording_section}({recording_segment:.2f})") plt.grid(True) plt.tight_layout() if show_figure: plt.show() if save_figure: pathlib.Path(output_dir).mkdir(parents=True, exist_ok=True) plt.savefig(pathlib.Path(output_dir) / output_fname, format='pdf') plt.close()