182 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			182 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import numpy as np
 | 
						|
import matplotlib.pyplot as plt
 | 
						|
import matplotlib.ticker as ticker
 | 
						|
import string
 | 
						|
from plotstyle import scheme_style
 | 
						|
import pandas as pd
 | 
						|
from matplotlib import cm
 | 
						|
 | 
						|
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')
 | 
						|
    ```
 | 
						|
    
 | 
						|
    """
 | 
						|
    # 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 plot_g(ax, df, models, i, let_x, let_y, titlesize=10, letsize=12):
 | 
						|
    # c = [cm.plasma(x) for x in np.linspace(0., 1., 9)]
 | 
						|
    # c = [cm.turbo(x) for x in np.linspace(0., 1., 9)]
 | 
						|
    c = [cm.gray(x) for x in np.linspace(0., 0.75, 9)]
 | 
						|
    myorder = [0, 4, 1, 6, 2,7, 3,8]
 | 
						|
    colors = [c[i] for i in myorder]
 | 
						|
    df.plot.bar(y=models[i], rot=90, ax=ax, legend=False,
 | 
						|
                ylabel='$\mathrm{g}_{\mathrm{max}}$ [$\mathrm{mS}/ \mathrm{cm}^2$]',
 | 
						|
                color=colors)
 | 
						|
    ax.set_title(models[i], fontsize=titlesize)
 | 
						|
    show_spines(ax, spines='lb')
 | 
						|
    ax.text(let_x, let_y, string.ascii_uppercase[i], transform=ax.transAxes, size=letsize, weight='bold')
 | 
						|
    ax.set_yscale('log')
 | 
						|
    ax.set_xlim(-0.5, 9)
 | 
						|
    from matplotlib.ticker import ScalarFormatter
 | 
						|
    for axis in [ax.yaxis]:
 | 
						|
        axis.set_major_formatter(ScalarFormatter())
 | 
						|
    return ax
 | 
						|
 | 
						|
 | 
						|
index = ['$\mathrm{g}_{\mathrm{Na}}$', '$\mathrm{g}_{\mathrm{Kd}}$', '$\mathrm{g}_{\mathrm{K_V1.1}}$',
 | 
						|
         '$\mathrm{g}_{\mathrm{A}}$', '$\mathrm{g}_{\mathrm{M}}$', '$\mathrm{g}_{\mathrm{L}}$',
 | 
						|
         '$\mathrm{g}_{\mathrm{T}}$', ' $\mathrm{g}_{\mathrm{Ca,K}}$', ' $\mathrm{g}_{\mathrm{Leak}}$']
 | 
						|
df = pd.DataFrame({'RS Pyramidal': [56, 6, 0, 0, 0.075, 0, 0, 0, 0.0205],
 | 
						|
                   'RS Pyramidal +$\mathrm{K}_{\mathrm{V}}\mathrm{1.1}$': [56, 5.4, 0.6, 0, 0.075, 0, 0, 0, 0.0205],
 | 
						|
                   'RS Inhibitory': [10, 2.1, 0, 0, 0.0098, 0, 0, 0, 0.0205],
 | 
						|
                   'RS Inhibitory +$\mathrm{K}_{\mathrm{V}}\mathrm{1.1}$': [10, 1.89, 0.21, 0, 0.0098, 0, 0, 0, 0.0205],
 | 
						|
                   'FS': [58, 3.9, 0, 0, 0.075, 0, 0, 0, 0.038],
 | 
						|
                   'FS +$\mathrm{K}_{\mathrm{V}}\mathrm{1.1}$': [58, 3.51, 0.39, 0, 0.075, 0, 0, 0, 0.038],
 | 
						|
                   'Cb stellate': [3.4, 9.0556, 0, 15.0159, 0, 0, 0.4545, 0, 0.07407],
 | 
						|
                   'Cb stellate +$\mathrm{K}_{\mathrm{V}}\mathrm{1.1}$': [3.4, 8.15, 0.90556, 15.0159, 0, 0, 0.4545, 0, 0.07407],
 | 
						|
                   'Cb stellate $\Delta$$\mathrm{K}_{\mathrm{V}}\mathrm{1.1}$': [3.4, 9.0556, 1.50159, 0, 0, 0, 0.4545, 0, 0.07407],
 | 
						|
                   'STN': [49, 57, 0, 5, 0, 5, 5, 1, 0.035],
 | 
						|
                   'STN +$\mathrm{K}_{\mathrm{V}}\mathrm{1.1}$': [49, 56.43, 0.57, 5, 0, 5, 5, 1, 0.035],
 | 
						|
                   'STN $\Delta$$\mathrm{K}_{\mathrm{V}}\mathrm{1.1}$': [49, 57, 0.5, 0, 0, 5, 5, 1, 0.035]},
 | 
						|
                  index=index)
 | 
						|
 | 
						|
 | 
						|
#% with legend
 | 
						|
scheme_style()
 | 
						|
models = ['Cb stellate', 'RS Inhibitory', 'FS', 'RS Pyramidal', 'RS Inhibitory +$\mathrm{K}_{\mathrm{V}}\mathrm{1.1}$',
 | 
						|
          'Cb stellate +$\mathrm{K}_{\mathrm{V}}\mathrm{1.1}$', 'FS +$\mathrm{K}_{\mathrm{V}}\mathrm{1.1}$',
 | 
						|
          'RS Pyramidal +$\mathrm{K}_{\mathrm{V}}\mathrm{1.1}$', 'STN +$\mathrm{K}_{\mathrm{V}}\mathrm{1.1}$',
 | 
						|
          'Cb stellate $\Delta$$\mathrm{K}_{\mathrm{V}}\mathrm{1.1}$',
 | 
						|
          'STN $\Delta$$\mathrm{K}_{\mathrm{V}}\mathrm{1.1}$', 'STN']
 | 
						|
fig, axs = plt.subplots(4, 3, figsize=cm2inch(17.2, 20))  # ,  sharey=True)
 | 
						|
plt.subplots_adjust(hspace=1.5, wspace=1.0)
 | 
						|
let_x = -0.6
 | 
						|
let_y = 1.2
 | 
						|
titlesize = 9
 | 
						|
letsize = 10
 | 
						|
axs[0, 0] = plot_g(axs[0, 0], df, models, 0, let_x, let_y, titlesize=titlesize, letsize=letsize)
 | 
						|
axs[0, 1] = plot_g(axs[0, 1], df, models, 1, let_x, let_y, titlesize=titlesize, letsize=letsize)
 | 
						|
axs[0, 2] = plot_g(axs[0, 2], df, models, 2, let_x, let_y, titlesize=titlesize, letsize=letsize)
 | 
						|
axs[1, 0] = plot_g(axs[1, 0], df, models, 3, let_x, let_y, titlesize=titlesize, letsize=letsize)
 | 
						|
axs[1, 1] = plot_g(axs[1, 1], df, models, 4, let_x, let_y, titlesize=titlesize, letsize=letsize)
 | 
						|
axs[1, 2] = plot_g(axs[1, 2], df, models, 5, let_x, let_y, titlesize=titlesize, letsize=letsize)
 | 
						|
axs[2, 0] = plot_g(axs[2, 0], df, models, 6, let_x, let_y, titlesize=titlesize, letsize=letsize)
 | 
						|
axs[2, 1] = plot_g(axs[2, 1], df, models, 7, let_x, let_y, titlesize=titlesize, letsize=letsize)
 | 
						|
axs[2, 2] = plot_g(axs[2, 2], df, models, 8, let_x, let_y, titlesize=titlesize, letsize=letsize)
 | 
						|
axs[3, 0] = plot_g(axs[3, 0], df, models, 9, let_x, let_y, titlesize=titlesize, letsize=letsize)
 | 
						|
axs[3, 1] = plot_g(axs[3, 1], df, models, 10, let_x, let_y, titlesize=titlesize, letsize=letsize)
 | 
						|
axs[3, 2] = plot_g(axs[3, 2], df, models, 11, let_x, let_y, titlesize=titlesize, letsize=letsize)
 | 
						|
# save
 | 
						|
# fig.set_size_inches(cm2inch(21,20))
 | 
						|
fig.savefig('./Figures/model_g.jpg', dpi=300, bbox_inches='tight')  # pdf # eps
 | 
						|
plt.show()
 | 
						|
 |