示例#1
0
def plot_matrix(Model, ge=None):

    REC_POPS, AFF_POPS = list(Model['REC_POPS']), list(Model['AFF_POPS'])

    pconnMatrix = np.zeros((len(REC_POPS)+len(AFF_POPS), len(REC_POPS)))
    
    for i, source_pop in enumerate(REC_POPS+AFF_POPS):
        for j, target_pop in enumerate(REC_POPS):
            pconnMatrix[i,j] = Model['p_%s_%s' % (source_pop, target_pop)]

    if ge is None:
        from datavyz import ge
        
    fig, ax = ge.figure(right=5.)
    
    Lims = [np.round(100*pconnMatrix.min(),1)-.1,np.round(100*pconnMatrix.max(),1)+.1]
    
    ge.matrix(100*pconnMatrix.T, origin='upper', ax=ax, vmin=Lims[0], vmax=Lims[1])


    n, m = len(REC_POPS)+len(AFF_POPS), len(REC_POPS)
    for i, label in enumerate(REC_POPS+AFF_POPS):
        ge.annotate(ax, label, (-0.2, .9-i/n),\
            ha='right', va='center', color=COLORS[i])
    for i, label in enumerate(REC_POPS):
        ge.annotate(ax, label, (i/m+.25, -0.1),\
                    ha='right', va='top', color=COLORS[i], rotation=65)
    
    acb = ge.bar_legend(fig,
                        inset=dict(rect=[.72,.3,.03,.5], facecolor=None),
                        colormap=ge.viridis,
                        bounds=[Lims[0], Lims[1]],
                        label='$p_{conn}$ (%)')
    ge.set_plot(ax,
                ['left', 'bottom'],
                tck_outward=0,
                xticks=.75*np.arange(0,4)+.75/2.,
                xticks_labels=[],
                xlim_enhancment=0, ylim_enhancment=0,
                yticks=.83*np.arange(0,6)+.85/2.,
                yticks_labels=[])

    
    return fig, ax, acb
示例#2
0
    ge.multipanel_figure([],
                         width='one-and-a-half-column', # can also be "single-column" or "one-and-a-half-column"
                         fig_name='fig3.png', bg='gray', grid=True)

    """
    # generate some random data
    t = np.linspace(0, 10, 1e3)
    y = np.cos(5*t)+np.random.randn(len(t))

    # Panel 'a' - schematic
    fig11 = 'docs/schematic.svg'

    # Panel 'b' - time series plot
    fig12, ax12 = ge.figure(axes_extents=(3,1)) # i.e. a wide plot
    ax12.plot(t, y)
    ge.set_plot(ax12, xlabel='xlabel (xunit)', ylabel='ylabel (yunit)')
    
    # Panel 'c' - more time series plot
    fig21, ax21 = ge.figure(axes_extents=(4,1)) # i.e. a very wide plot
    ax21.plot(t[t>9], y[t>9], label='raw')
    ax21.plot(t[t>9][1:], np.diff(y[t>9]), label='deriv.')
    ax21.plot(t[t>9][1:-1], np.diff(np.diff(y[t>9])), label='2nd deriv.')
    ge.set_plot(ax21, xlabel='xlabel (xunit)', ylabel='ylabel (yunit)')
    ge.legend(ax21, ncol=3, loc=(.3,1.)) # put a legend

    # Panel 'd' - scatter plot
    fig31, ax31 = ge.scatter(t[::10], t[::10]+np.random.randn(100),
                             xlabel='ylabel (yunit)')
    
    # Panel 'e' - bar plot
    fig32, ax32 = ge.bar(np.random.randn(8),
示例#3
0
    
    a = (1-SCALE['left']-SCALE['right'])/x_plots-SCALE['wspace']
    a0 = (1-SCALE0['left']-SCALE0['right'])/x_plots-SCALE0['wspace']
    b = (1-SCALE['top']-SCALE['bottom'])/y_plots-SCALE['hspace']
    b0 = (1-SCALE0['top']-SCALE0['bottom'])/y_plots-SCALE0['hspace']
    return {
        'figsize':(\
            A0_format['width']*A0_ratio*x_plots,
                   A0_format['height']*A0_ratio*y_plots*height_to_width)}



if __name__=='__main__':

    from datavyz import ge

    fig, ax = ge.figure(figsize=(1.2,1), left=1., right=4.)
    ax2 = ax.twinx()
    ax.plot(np.log10(np.logspace(-2.2,3,100)), np.exp(np.random.randn(100)), 'o', ms=2, color=ge.blue)
    ax2.plot(np.log10(np.logspace(-2,3,100)), np.exp(np.random.randn(100)), 'o', ms=1, color=ge.red)
    ge.set_plot(ax2, ['right'],
                yscale='log',
                ylabel='blabla',
                # yticks_rotation=20, size='x-small',
                tck_outward=2, ycolor=ge.red)
    ge.set_plot(ax, ycolor=ge.blue, xcolor='k',
                yscale='log', xscale='already-log10', ylabel='blabal', 
                tck_outward=2, xlabel='trying', ylabelpad=-5)
    ge.savefig(fig, 'docs/twin-log-scale.png')
    ge.show()
示例#4
0
    return "$" + markers[i % len(markers)] + "$"


if __name__ == '__main__':

    from datavyz import ge
    fig, ax = ge.figure()

    for i, mi in enumerate(markers):
        # plt.plot(x[i], y[i], "b", alpha=0.5, marker=getRandomMarker(), markersize=randint(16,26,1))
        ax.plot(x[i],
                y[i] + 50,
                "m",
                alpha=0.5,
                marker=getMarker(i),
                markersize=5)
        # Let's see if their "center" is located where we expect them to be...
        ax.plot(x[i],
                y[i] + 100,
                ge.red,
                alpha=0.5,
                marker=getMarker(i),
                markersize=8)
        ax.plot(x[i], y[i] + 100, "k+", markersize=5, markeredgewidth=1)

    ge.set_plot(ax,
                xlabel='xlabel',
                ylabel='ylabel',
                title='special marker demo')
    ge.show()
def show_trial_average_responses(RESP_PER_STIM,
                                 resp='', 
                                 alphaZn=0., 
                                 VLIM=None,  ge=ge,
                                 syn_location='all',
                                 stimseed='all',
                                 annotate=True,
                                 window=[-200,400]):

    if resp=='ampa-only':
        cond = (RESP_PER_STIM['ampa_only']==True)
    else:
        cond = (RESP_PER_STIM['ampa_only']==False) & (RESP_PER_STIM['alphaZn']==alphaZn)
        resp = '$\\alpha_{Zn}$=%.2f' % alphaZn
    if syn_location!='all':
        cond = cond & (RESP_PER_STIM['syn_location']==syn_location)
        sloc = 'loc #%i' % syn_location
    else:
        sloc = 'Nloc=%i' % len(np.unique(RESP_PER_STIM['syn_location']))
    if stimseed!='all':
        cond = cond & (RESP_PER_STIM['stimseed']==stimseed)
        stim = 'stim-seed #%i' % (1+np.argwhere(np.unique(RESP_PER_STIM['stimseed'])==stimseed)[0][0])
    else:
        stim = 'n=%i stim-seeds' % len(np.unique(RESP_PER_STIM['stimseed']))
        
    bg_levels = np.unique(RESP_PER_STIM['bg_level'])
    fig, AX = ge.figure(figsize=(.85,.9),
                        axes=(len(bg_levels),1), wspace=0.1, right=1.3)

    ge.annotate(AX[-1], '%s, n=%i bg seeds, %s, %s' % (resp,
                                                       len(np.unique(RESP_PER_STIM['seed'])),
                                                       stim, sloc), (1., 1), ha='right', size='small')
    
    t = RESP_PER_STIM['t']
    ylim, ylim2 = [np.inf, -np.inf], [np.inf, -np.inf]
    for ibg, bg in enumerate(bg_levels):
        for istim, nstim in enumerate(np.unique(RESP_PER_STIM['nstim'])[::-1]):
            # raw responses
            scond = cond &\
                (RESP_PER_STIM['nstim']==nstim) & (RESP_PER_STIM['bg_level']==bg)
    
            tcond = (t>=RESP_PER_STIM['stim_delay']+window[0]) & (t<RESP_PER_STIM['stim_delay']+window[1])
            y0 = np.mean([RESP_PER_STIM['Vm'][i] for i, s in enumerate(scond) if s], axis=0)
            AX[ibg].plot(t[tcond], y0[tcond],lw=1,
                  color=cmap(1-istim/len(np.unique(RESP_PER_STIM['nstim']))))
            ylim = [-76, max([ylim[1],y0.max()])]
        AX[ibg].plot([t[tcond][0],t[tcond][-1]], -75*np.ones(2), 'k:', lw=0.5)
        if annotate:
            ge.annotate(AX[ibg],'%.1fHz'%bg,(1,.7),
                        color=ge.purple,ha='right',va='top')
        
        
    for ibg, bg in enumerate(bg_levels):
        if VLIM is not None:
            ylim = VLIM
        ge.set_plot(AX[ibg], [], ylim=ylim)
    ge.draw_bar_scales(AX[0], Xbar = 100, Xbar_label='100ms',
                              Ybar = 10, Ybar_label='10mV',
                              loc=(0.05,.8), orientation='right-bottom')
    ge.bar_legend(fig, X=np.unique(RESP_PER_STIM['nstim']),
                  bounds=[0, np.unique(RESP_PER_STIM['nstim'])[-1]],
                  ticks_labels=['%i' % x if i%4==0 else '' for i, x in enumerate(np.unique(RESP_PER_STIM['nstim']))],
                  inset=dict(rect=[.999,.4,.016, .5]),
                  colormap=cmap, label='$N_{syn}$')

    return fig
def show_response_bg_dep(FREE, CHELATED, AMPA=None,
                         ge=ge,
                         method='Integral',
                         BG_levels=None,
                         crossing=None,
                         xlim=None, ylim=None, yscale='lin'):
    
    if BG_levels is None:
        BG_levels = [R['bg_level'] for R in FREE]
        
    CS = [CHELATED, FREE]
    if AMPA is not None:
        CS.append(AMPA)
        fig, AX = ge.figure(axes=(1,3), figsize=(1,1.), hspace=0.3, right=1.5)
    else:
        fig, AX = ge.figure(axes=(1,2), figsize=(1,1.), hspace=0.3, right=1.5)

    #fig2, ax2 = ge.figure(axes=(1,1), figsize=(1,1.), hspace=0.3, right=1.5)    
    
    for ibg, bg in enumerate(BG_levels):
        if method[:5]=='delta':
            AX[0].plot(FREE[ibg]['nstims'], FREE[ibg][method[5:]]-FREE[ibg][method[5:]][0],
                       lw=1, color=cmap(ibg/(len(BG_levels)-1)))
            AX[1].plot(CHELATED[ibg]['nstims'], CHELATED[ibg][method[5:]]-CHELATED[ibg][method[5:]][0],
                       lw=1, color=cmap(ibg/(len(BG_levels)-1)))
        
        else:
            for C, ax in zip(CS, AX):
                # data
                try:
                    ge.scatter(C[ibg]['nstims'], C[ibg][method], 
                        ax=ax, color=cmap(ibg/(len(BG_levels)-1)), no_set=True, lw=0.5, ms=2)
                    # fit
                    x, coefs = np.linspace(C[ibg]['nstims'][0], C[ibg]['nstims'][-1], 100), C[ibg][method+'-coeffs']
                    y = coefs[0]*sigmoid_func(x, coefs[1], coefs[2])
                    ge.plot(x, y, ax=ax, color=cmap(ibg/(len(BG_levels)-1)), no_set=True, lw=3, alpha=0.5)
                except IndexError:
                    pass
                # ADDING THE c50 position:
                if crossing is not None:
                    try:
                        ix0 = min(np.argwhere(y>crossing).flatten())
                        ax.plot(np.ones(2)*x[ix0], [0,crossing], ':', lw=1, color=cmap(ibg/(len(BG_levels)-1)))
                    except ValueError:
                        pass
    if crossing is not None:
        for ax in AX[:2]:
            ax.plot([x[0], x[-1]], crossing*np.ones(2), ':', lw=0.5, color=ge.dimgrey)
        
    ge.annotate(AX[1], 'L23-L23\nprops', (0., .9), size='small', color='dimgrey', bold=True, va='top')
    ge.annotate(AX[0], 'L4-L23\nprops', (0., .9), size='small', color=ge.green, bold=True, va='top')
    if method=='Integral':
        ylabel='PSP integral (mV.s)'+10*' '
    if method=='Peak':
        ylabel='max. $\delta$ $V_m$ (mV)'+10*' '
    if method=='Freq':
        ylabel='Spike Freq. (Hz) '+10*' '
    if method=='Proba':
        ylabel='Spike Probability '+20*' '
    if method=='deltaFreq':
        ylabel='$\delta$ Spike Freq. (Hz) '+10*' '
        
    ge.set_plot(AX[0], ['left'], ylabel=ylabel, ylim=ylim)
    if AMPA is None:
        ge.set_plot(AX[0], ['left'], ylabel=ylabel, ylim=ylim, xlim=xlim, yscale=yscale)
        ge.set_plot(AX[1], xlabel='$N_{syn}$', ylim=ylim, xlim=xlim, yscale=yscale)
    else:
        ge.set_plot(AX[0], ['left'], ylim=ylim, xlim=xlim, yscale=yscale)
        ge.set_plot(AX[1], ['left'], ylabel=ylabel, ylim=ylim, xlim=xlim, yscale=yscale)
        ge.set_plot(AX[2], xlabel='$N_{syn}$', ylim=ylim, xlim=xlim, yscale=yscale)
        ge.annotate(AX[2], 'AMPA\nonly', (0., .9), size='small', color=ge.blue, bold=True, va='top')
        
    #ge.set_plot(ax2, xlabel='$\\nu_{bg}$ (Hz)', ylabel='$c_{50}$ ($N_{syn}$)')
    
    ge.bar_legend(fig,
                  X=[0]+BG_levels,
                  bounds=[-BG_levels[1]/2., BG_levels[-1]+BG_levels[1]/2],
                  inset=dict(rect=[.9,.3,.05, .5]),
                  label='$\\nu_{bg}$ (Hz)',
                  colormap=cmap)
    
    return fig #, fig2
def plot_single_sim_bg_data(RESP,
                            ge=ge,
                            alphaZn=[0, 0.45],
                            view=[-200, 600],
                            shift=20,
                            Vm_shift=1.,
                            with_ampa_only=False,
                            NSTIMs=None,
                            bg_levels=[0.],
                            with_nsyn_annot=False,
                            syn_location=0,
                            seeds=[0],
                            stimseeds=[0],
                            LABELS=[],
                            COLORS=[ge.green, 'k'],
                            LWS=[1.5, 1, 1, 2],
                            bar_scale_args=dict(Xbar=200,
                                                Xbar_label='200ms',
                                                Ybar=15,
                                                Ybar_label='15mV ',
                                                loc=(0.1, .8),
                                                orientation='right-bottom'),
                            ampa_color=ge.blue,
                            figsize=(2.1, .15),
                            VLIM=[-85, 30]):
    """
    Show raw simulation data
    """

    AE = []
    for _ in range(len(bg_levels)):
        AE += [[[1, 6]]]
        AE += [[[1, 3]]]
        AE += [[[1, 1]]]

    fig, AX = ge.figure(axes_extents=AE,
                        figsize=figsize,
                        hspace=0.,
                        left=.2,
                        right=.3,
                        top=1.2)

    if len(stimseeds) < len(bg_levels):
        stimseeds = [stimseeds[0] for _ in range(len(bg_levels))]
    if len(seeds) < len(bg_levels):
        seeds = [seeds[0] for _ in range(len(bg_levels))]

    for bg_level, stimseed, seed, ax, ax2, ax3 in zip(bg_levels, stimseeds,
                                                      seeds, AX[::3], AX[1::3],
                                                      AX[2::3]):

        cond = np.zeros(len(RESP['bg_level']), dtype=bool)

        CONDS = [((RESP['alphaZn'] == aZn) & (RESP['ampa_only'] == False))
                 for aZn in alphaZn]

        # adding the alpha levels
        for acond in CONDS:
            cond = cond | acond

        cond0 = (RESP['bg_level'] == bg_level) & (RESP['syn_location']
                                                  == syn_location)
        cond = cond & cond0

        # adding the same bg-seed and stim-seed condition
        AVAILABLE_BG_SEEDS, AVAILABLE_STIM_SEEDS = [], []
        for acond in CONDS:
            AVAILABLE_BG_SEEDS.append(np.unique(RESP['seed'][cond & acond]))
            AVAILABLE_STIM_SEEDS.append(
                np.unique(RESP['stimseed'][cond & acond]))

        available_bg_seeds = np.intersect1d(*AVAILABLE_BG_SEEDS)
        available_stim_seeds = np.intersect1d(*AVAILABLE_STIM_SEEDS)

        if (len(available_bg_seeds) < 1) or (len(available_stim_seeds) < 1):
            raise BaseException
            print(available_bg_seeds, available_stim_seeds)
            print('---> No available seeds for this configuration:')

        if with_ampa_only:
            CONDS.append((RESP['ampa_only'] == True))
            COLORS.append(ampa_color)

        for i in range(len(CONDS)):
            CONDS[i] = CONDS[i] & cond0 &\
                (RESP['seed']==available_bg_seeds[seed]) &\
                (RESP['stimseed']==available_stim_seeds[stimseed])

        ax3.axis('off')
        for ic, cond, color, lw in zip(range(len(CONDS)), CONDS, COLORS, LWS):
            icond = np.argwhere(cond)
            # icond = np.argwhere(cond & acond)
            if len(icond) > 0:
                i0 = icond[0][0]
                if NSTIMs is None:
                    NSTIMs = RESP['NSTIMs'][i0]
                iplot = 0
                data = np.load(RESP['filename'][i0], allow_pickle=True).item()
                tt, Vm = data['t'], data['Vm_soma']
                BG_raster, STIM_raster = data['BG_raster'], data['STIM_raster']
                for istim, nstim in enumerate(RESP['NSTIMs'][i0]):
                    if nstim in NSTIMs:
                        t0 = istim * RESP['duration_per_bg_level'][i0] + view[
                            0] + RESP['stim_delay'][i0]
                        t1 = t0 + view[1] - view[0]

                        tcond = (tt >= t0) & (tt < t1)
                        t, v = tt[tcond], Vm[tcond]
                        ax.plot(t - t0 + iplot * (shift + view[1] - view[0]),
                                v + ic * Vm_shift,
                                color=color,
                                lw=lw)

                        if color == COLORS[0]:
                            for i, sp0 in enumerate(BG_raster):
                                sp = np.array(sp0)
                                spcond = (sp >= t0) & (sp < t1)
                                ax2.scatter(sp[spcond] - t0 + iplot *
                                            (shift + view[1] - view[0]),
                                            i * np.ones(len(sp[spcond])),
                                            color=ge.purple,
                                            s=1)

                            for i, sp0 in enumerate(STIM_raster):
                                sp = np.array(sp0)
                                spcond = (sp >= t0) & (sp < t1)
                                ax2.scatter(sp[spcond] - t0 + iplot *
                                            (shift + view[1] - view[0]),
                                            i * np.ones(len(sp[spcond])),
                                            color=ge.orange,
                                            s=1)
                        if bg_level == 0. or with_nsyn_annot:
                            ge.annotate(
                                ax2,
                                '$N_{syn}$=%i' % nstim,
                                (iplot *
                                 (shift + view[1] - view[0]) - view[0], i),
                                va='top',
                                clip_on=False,
                                xycoords='data',
                                rotation=90,
                                color=ge.orange,
                                ha='right',
                                size='x-small')
                            # ge.annotate(ax3, '  $N_{syn}$=%i' % nstim,
                            #             (iplot*(shift+view[1]-view[0])-view[0], 0), clip_on=False,
                            #             xycoords='data', color=ge.orange, size='x-small')

                        iplot += 1
            else:
                print('data not found for color:', color)
        #    fig.suptitle('loc-ID=%i, bg-seed=%i, stim-seed=%i' % (syn_location, available_bg_seeds[seed],
        #                                                    available_stim_seeds[stimseed]))
        ge.annotate(ax2,
                    '$\\nu_{bg}$=%.0fHz' % bg_level, (0, 0),
                    color=ge.purple,
                    rotation=90,
                    ha='right',
                    size='small')
        ge.set_plot(ax, [],
                    xlim=[0, iplot * (shift + view[1] - view[0])],
                    ylim=VLIM)
        ge.set_plot(ax2, [],
                    xlim=[0, iplot * (shift + view[1] - view[0])],
                    ylim=[-1, i + 1])
        ge.set_plot(ax3, [],
                    xlim=[0, iplot * (shift + view[1] - view[0])],
                    ylim=[-1, i + 1])
        if bg_level == 0.:
            for i, label, color in zip(range(4), LABELS, COLORS):
                ge.annotate(ax,
                            label, (i / 5. + .2, 1.),
                            color=color,
                            va='top')
            ge.draw_bar_scales(ax, **bar_scale_args)

    return fig