From adb408e945e678d33b7038cee270ea55524ca6c7 Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Thu, 19 May 2022 11:06:16 +0200 Subject: [PATCH] new firing_characterization-jb figure --- Figures/firing_characterization-jb.py | 297 ++++++++++++++++++++++++++ Figures/firing_characterization.pdf | Bin 46611 -> 20847 bytes Figures/firing_characterization.py | 3 +- manuscript.tex | 1 - 4 files changed, 299 insertions(+), 2 deletions(-) create mode 100644 Figures/firing_characterization-jb.py diff --git a/Figures/firing_characterization-jb.py b/Figures/firing_characterization-jb.py new file mode 100644 index 0000000..31381dc --- /dev/null +++ b/Figures/firing_characterization-jb.py @@ -0,0 +1,297 @@ +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.gridspec as gridspec +import matplotlib.ticker as ticker +from matplotlib.colors import colorConverter as cc +from matplotlib.colors import to_hex +import string +# from plotstyle import plot_style +from plotstyle import scheme_style + +colorslist = ['#40A787', # cyan'# + '#F0D730', # yellow + '#C02717', # red + '#007030', # dark green + '#AAB71B', # lightgreen + '#008797', # light blue + '#F78017', # orange + '#478010', # green + '#53379B', # purple + '#2060A7', # blue + '#873770', # magenta + '#D03050' # pink + ] + +def cm2inch(*tupl): + inch = 2.54 + if isinstance(tupl[0], tuple): + return tuple(i/inch for i in tupl[0]) + else: + return tuple(i/inch for i in tupl) + + +def show_spines(ax, spines='lrtb'): + """ Show and hide spines. + + From github.com/janscience/plottools.git spines.py + + Parameters + ---------- + ax: matplotlib figure, matplotlib axis, or list of matplotlib axes + Axis on which spine and ticks visibility is manipulated. + If figure, then apply manipulations on all axes of the figure. + If list of axes, apply manipulations on each of the given axes. + spines: string + Specify which spines and ticks should be shown. + All other ones or hidden. + 'l' is the left spine, 'r' the right spine, + 't' the top one and 'b' the bottom one. + E.g. 'lb' shows the left and bottom spine, and hides the top + and and right spines, as well as their tick marks and labels. + '' shows no spines at all. + 'lrtb' shows all spines and tick marks. + + Examples + -------- + ```py + import matplotlib.pyplot as plt + import plottools.spines + + fig, (ax0, ax1, ax2) = plt.subplots(1, 3) + ax0.show_spines('lb') + ax1.show_spines('bt') + ax2.show_spines('tr') + ``` + ![show](figures/spines-show.png) + """ + # collect spine visibility: + xspines = [] + if 't' in spines: + xspines.append('top') + if 'b' in spines: + xspines.append('bottom') + yspines = [] + if 'l' in spines: + yspines.append('left') + if 'r' in spines: + yspines.append('right') + # collect axes: + if isinstance(ax, (list, tuple, np.ndarray)): + axs = ax + elif hasattr(ax, 'get_axes'): + # ax is figure: + axs = ax.get_axes() + else: + axs = [ax] + if not isinstance(axs, (list, tuple)): + axs = [axs] + for ax in axs: + # hide spines: + ax.spines['top'].set_visible('top' in xspines) + ax.spines['bottom'].set_visible('bottom' in xspines) + ax.spines['left'].set_visible('left' in yspines) + ax.spines['right'].set_visible('right' in yspines) + # ticks: + if len(xspines) == 0: + ax.xaxis.set_ticks_position('none') + ax.xaxis.label.set_visible(False) + ax.xaxis._orig_major_locator = ax.xaxis.get_major_locator() + ax.xaxis.set_major_locator(ticker.NullLocator()) + else: + if hasattr(ax.xaxis, '_orig_major_locator'): + ax.xaxis.set_major_locator(ax.xaxis._orig_major_locator) + delattr(ax.xaxis, '_orig_major_locator') + elif isinstance(ax.xaxis.get_major_locator(), ticker.NullLocator): + ax.xaxis.set_major_locator(ticker.AutoLocator()) + if len(xspines) == 1: + ax.xaxis.set_ticks_position(xspines[0]) + ax.xaxis.set_label_position(xspines[0]) + else: + ax.xaxis.set_ticks_position('both') + ax.xaxis.set_label_position('bottom') + if len(yspines) == 0: + ax.yaxis.set_ticks_position('none') + ax.yaxis.label.set_visible(False) + ax.yaxis._orig_major_locator = ax.yaxis.get_major_locator() + ax.yaxis.set_major_locator(ticker.NullLocator()) + else: + if hasattr(ax.yaxis, '_orig_major_locator'): + ax.yaxis.set_major_locator(ax.yaxis._orig_major_locator) + delattr(ax.yaxis, '_orig_major_locator') + elif isinstance(ax.yaxis.get_major_locator(), ticker.NullLocator): + ax.yaxis.set_major_locator(ticker.AutoLocator()) + if len(yspines) == 1: + ax.yaxis.set_ticks_position(yspines[0]) + ax.yaxis.set_label_position(yspines[0]) + else: + ax.yaxis.set_ticks_position('both') + ax.yaxis.set_label_position('left') + + + +def lighter(color, lightness): + """ Make a color lighter. + + From github.com/janscience/plottools.git colors.py + + ![lighter](figures/colors-lighter.png) + + Parameters + ---------- + color: dict or matplotlib color spec + A matplotlib color (hex string, name color string, rgb tuple) + or a dictionary with an 'color' or 'facecolor' key. + lightness: float + The smaller the lightness, the lighter the returned color. + A lightness of 0 returns white. + A lightness of 1 leaves the color untouched. + A lightness of 2 returns black. + + Returns + ------- + color: string or dict + The lighter color as a hexadecimal RGB string (e.g. '#rrggbb'). + If `color` is a dictionary, a copy of the dictionary is returned + with the value of 'color' or 'facecolor' set to the lighter color. + + Examples + -------- + For 40% lightness of blue do + ```py + import plottools.colors as c + colors = c.palettes['muted'] + lightblue = c.lighter(colors['blue'], 0.4) + ``` + """ + try: + c = color['color'] + cd = dict(**color) + cd['color'] = lighter(c, lightness) + return cd + except (KeyError, TypeError): + try: + c = color['facecolor'] + cd = dict(**color) + cd['facecolor'] = lighter(c, lightness) + return cd + except (KeyError, TypeError): + if lightness > 2: + lightness = 2 + if lightness > 1: + return darker(color, 2.0-lightness) + if lightness < 0: + lightness = 0 + r, g, b = cc.to_rgb(color) + rl = r + (1.0-lightness)*(1.0 - r) + gl = g + (1.0-lightness)*(1.0 - g) + bl = b + (1.0-lightness)*(1.0 - b) + return to_hex((rl, gl, bl)).upper() + + +def plot_sqrt(ax, a=1, b=0.2, c=100, d=0): + x = np.linspace(0, 1, 10000) + y = c*np.sqrt(a*(x - b)) + d + ax.plot(x, y) + ax.set_xlabel('Current [nA]') + ax.set_ylabel('Frequency [Hz]') + ax.set_xlim(0,1) + ax.set_ylim(0, ax.get_ylim()[1]) + +def plot_AUC(ax, a=1, b=0.2, c=180, d=0, width=0.2): + x = np.linspace(0, 1, 1000) + y = c*np.sqrt(a*(x - b)) + d + ax.plot(x, y, colorslist[2]) + ax.set_xlabel('Current [nA]') + ax.set_ylabel('Frequency [Hz]') + ax.fill_between(x, y, where=(x<=b+width), color=lighter(colorslist[2], 0.3)) + ax.text(0.3, 15, 'AUC', ha='center') + ax.annotate('', (0.2, 10), (0, 10), arrowprops=dict(arrowstyle="<->")) + ax.text(0.1, 20, 'rheobase', ha='center') + ax.set_xlim(0, 0.5) + ax.set_ylim(0, 100) + ax.yaxis.set_major_locator(ticker.MultipleLocator(50)) + +def plot_diff_sqrt(ax, a=1, b=0.2, c=100, d=0, a2=1, b2=0.2, c2=100, d2=0): + show_spines(ax, 'lb') + x = np.linspace(0, 1, 10000) + y = c*np.sqrt(a*(x - b)) + d + y2 = c2 * np.sqrt(a2 * (x - b2)) + d2 + ax.plot(x, y, colorslist[9]) + ax.plot(x, y2, colorslist[2]) + ax.set_xlim(0,1) + ax.set_ylim(0, ax.get_ylim()[1]) + ax.set_xticks([]) + ax.set_yticks([]) + +def plot_quadrant(ax): + ax.spines['left'].set_position('zero') + ax.spines['bottom'].set_position('zero') + ax.text(1.15, -0.15, '$\\Delta$ rheobase', ha='right') + ax.text(-0.05, 0.9, '$\\Delta$ AUC', ha='right') + ax.tick_params(length=0) + ax.set_xlim(-1, 1) + ax.set_ylim(-1, 1) + ax.annotate('', (1, 0), (-1, 0), arrowprops=dict(arrowstyle="->")) + ax.annotate('', (0, 1), (0, -1), arrowprops=dict(arrowstyle="->")) + ax.set_xticks([-0.4, 0.4]) + a = ax.get_xticks().tolist() + a[0] = '\u2212' + a[1] = '+' + ax.set_xticklabels(a) + ax.set_yticks([-0.4, 0.4]) + b = ax.get_xticks().tolist() + b[0] = '\u2212' + b[1] = '+' + ax.set_yticklabels(b) + + # ax.tick_params(labelsize=16) + # ax.set_yticks([0]) + # ax.axis('off') + + +scheme_style() + +fig = plt.figure(figsize=cm2inch(7, 12)) +gs = gridspec.GridSpec(3,2, top=0.95, bottom=0.1, left=0.15, right = 0.95, hspace=0.8, wspace=0.6) +ax1 = fig.add_subplot(gs[0,:]) +show_spines(ax1, 'lb') +plot_AUC(ax1, width=0.2) +ax3 = fig.add_subplot(gs[1:, :]) + +# add panel letter labels +ax_list = fig.axes +i =0 +for a in ax_list: + a.text(-0.25, 1.08, string.ascii_uppercase[i], transform=a.transAxes,size=16, weight='bold') + i += 1 + +show_spines(ax3, '') +ax3.set_ylabel('$\Delta$ AUC') +ax3.set_xlabel('$\Delta$ rheobase') +plot_quadrant(ax3) # plot delineation into quadrants + + +inset_ylim = (0, 100) +# top left +lfsize = 8 +ax3.text(x=-0.9, y=0.7, s='$\\uparrow$ AUC\n$\\downarrow$ rheobase', fontsize=lfsize) +ax3_TL = ax3.inset_axes([0.07, 0.6, 0.3, 0.2]) +plot_diff_sqrt(ax3_TL, b2=0.1, c2=200) +ax3_TL.set_ylim(inset_ylim) +# top right +ax3.text(x=0.22, y=0.7, s='$\\uparrow$ AUC\n$\\uparrow$ rheobase', fontsize=lfsize) +ax3_TR = ax3.inset_axes([0.63, 0.6, 0.3, 0.2]) +plot_diff_sqrt(ax3_TR, b2=0.4, c2=200) +ax3_TR.set_ylim(inset_ylim) +# bottom left +ax3.text(x=-0.9, y=-0.95, s='$\\downarrow$ AUC\n$\downarrow$ rheobase', fontsize=lfsize) +ax3_BL = ax3.inset_axes([0.07, 0.15, 0.3, 0.2]) +plot_diff_sqrt(ax3_BL, b2=0.1, c2=75) +ax3_BL.set_ylim(inset_ylim) +# bottom right +ax3.text(x=0.22, y=-0.95, s='$\\downarrow$ AUC\n$\\uparrow$ rheobase', fontsize=lfsize) +ax3_BR = ax3.inset_axes([0.63, 0.15, 0.3, 0.2]) +plot_diff_sqrt(ax3_BR, b2=0.4, c2=75) +ax3_BR.set_ylim(inset_ylim) +fig.set_size_inches(cm2inch(8.17,12)) +fig.savefig('./Figures/firing_characterization.pdf', dpi=fig.dpi) #bbox_inches='tight', dpi=fig.dpi diff --git a/Figures/firing_characterization.pdf b/Figures/firing_characterization.pdf index 8ce059194fdd593b2cfca332eb38326fa3362fe1..591b1bd62911a256f2316274e4262c7d71b5ec5b 100644 GIT binary patch delta 8623 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 diff --git a/Figures/firing_characterization.py b/Figures/firing_characterization.py index 521c9fd..f6d4617 100644 --- a/Figures/firing_characterization.py +++ b/Figures/firing_characterization.py @@ -29,7 +29,8 @@ def plot_AUC(ax, a=1, b=0.2, c=100, d=0, width=0.2): ax.set_ylabel('Frequency [Hz]') ax.fill_between(x,y, where=(x<=b+width), color='c') ax.set_xlim(0,1) - ax.set_ylim(0, ax.get_ylim()[1]) + ax.set_ylim(0, 100) + ax.yaxis.set_major_locator(ticker.MultipleLocator(50)) def plot_diff_sqrt(ax, a=1, b=0.2, c=100, d=0, a2=1, b2=0.2, c2=100, d2=0): x = np.linspace(0, 1, 10000) diff --git a/manuscript.tex b/manuscript.tex index 7b2827d..99bda5c 100644 --- a/manuscript.tex +++ b/manuscript.tex @@ -276,7 +276,6 @@ To examine the role of cell-type specific ionic current environments on the impa \begin{figure}[tp] \centering \includegraphics[width=0.5\linewidth]{Figures/firing_characterization.pdf} - \\\notejb{Ok, thanks. plotstyle.py is missing in the repository. Can you please add it?}\notenk{Sorry it should now be in \path{./Figures},} \linespread{1.}\selectfont \caption[]{Characterization of firing with AUC and rheobase. (A) The area under the curve (AUC) of the repetitive firing frequency-current (fI) curve. (B) Changes in firing as characterized by \(\Delta\)AUC and \(\Delta\)rheobase occupy 4 quadrants separated by no changes in AUC and rheobase. Representative schematic fI curves in blue with respect to a reference fI curve (black) depict the general changes associated with each quadrant.}