コード例 #1
0
ファイル: figure.py プロジェクト: mschachter/writings
def draw_perf_by_freq(agg, data_dir='/auto/tdrive/mschachter/data'):

    etypes = ['rate', 'both']
    df = dict()
    for ein in etypes:
        df[ein] = get_encoder_perf_data_for_psd(agg, ein)

    flat_data = dict()
    for ein in etypes:
        flat_data[ein] = list()
    bp_data = dict()
    band_names = ['0-30Hz', '30-80Hz', '80-190Hz']
    for k,f in enumerate([int(x) for x in agg.freqs]):
        bp_data[band_names[k]] = list()
        for ein in etypes:
            i = df[ein].f == f
            r2 = df[ein].r2[i].values
            r2 = r2[r2 > 0]
            bp_data[band_names[k]].append(r2)
            flat_data[ein].append([r2.mean(), r2.std()])

    grouped_boxplot(bp_data, group_names=band_names, subgroup_names=['Rate', 'Rate+Sync'],
                    subgroup_colors=[COLOR_RED_SPIKE_RATE, COLOR_CRIMSON_SPIKE_SYNC],
                    box_width=0.8, box_spacing=1.0, legend_loc='lower right')

    clrs = {'rate':COLOR_RED_SPIKE_RATE, 'both':COLOR_CRIMSON_SPIKE_SYNC}
    for k,ein in enumerate(etypes):
        perf = np.array(flat_data[ein])

        # plt.errorbar(agg.freqs, perf[:, 0], yerr=perf[:, 1], c=clrs[ein], linewidth=8.0, elinewidth=5.0,
        #              ecolor='k', alpha=0.6, capthick=0.)
        ax = plt.gca()
        xmin,xmax = ax.get_xlim()

        # plt.plot(np.linspace(xmin, xmax, len(agg.freqs)), perf[:, 0], c=clrs[ein], linewidth=8.0, alpha=0.7)

    plt.xlabel('LFP Frequency (Hz)')
    plt.ylabel('Spike->LFP Encoder R2')
    plt.axis('tight')
    plt.ylim(0, 1.0)
    plt.xlim(0, 9)
コード例 #2
0
ファイル: figure.py プロジェクト: mschachter/writings
def draw_acoustic_perf_boxplots(agg, df_me):

    aprops_to_display = ['sal', 'meanspect', 'entropyspect', 'q2', 'maxAmp', 'skewtime']
    aprops_names = {'sal':'sal', 'meanspect':'freq\nmean', 'entropyspect':'freq\nentropy', 'q2':'freq\nmedian', 'maxAmp':'max\namp', 'skewtime':'time\nskew'}

    decomps = ['self_spike_rate', 'self_locked', 'self+cross_locked']
    sub_names = ['Spike Rate', 'LFP PSD', 'LFP Pairwise']
    sub_clrs = [COLOR_RED_SPIKE_RATE, COLOR_BLUE_LFP, COLOR_PURPLE_LFP_CROSS]

    # decomps = ['self_locked', 'self+cross_locked']
    # sub_names = ['LFP PSD', 'LFP Pairwise']
    # sub_clrs = [COLOR_BLUE_LFP, COLOR_PURPLE_LFP_CROSS]

    bp_data = dict()

    for aprop in aprops_to_display:

        bd = list()
        for decomp in decomps:
            i = (df_me.decomp == decomp) & (df_me.aprop == aprop)
            perfs = df_me.r2[i].values
            bd.append(perfs)
        bp_data[aprops_names[aprop]] = bd

    figsize = (19, 3.5)
    fig = plt.figure(figsize=figsize)
    plt.subplots_adjust(top=0.95, bottom=0.05, left=0.05, right=0.99, hspace=0.40, wspace=0.20)

    grouped_boxplot(bp_data, group_names=[aprops_names[aprop] for aprop in aprops_to_display], subgroup_names=sub_names,
                    subgroup_colors=sub_clrs, box_spacing=1.)

    plt.xlabel('Acoustic Feature')
    plt.ylabel('Decoder R2')

    fname = os.path.join(get_this_dir(), 'perf_boxplots.svg')
    plt.savefig(fname, facecolor='w', edgecolor='none')
コード例 #3
0
ファイル: figure.py プロジェクト: mschachter/writings
def draw_category_perf_and_confusion(agg, df_me):
    df0 = df_me[df_me.band == 0]

    lfp_perfs = df0['perf_category_lfp'].values
    spike_perfs = df0['perf_category_spike'].values
    spike_rate_perfs = df0['perf_category_spike_rate'].values
    bp_data = {'Vocalization Type':[lfp_perfs, spike_perfs, spike_rate_perfs]}

    cmats = dict()

    for decomp in ['locked', 'spike_psd', 'spike_rate']:
        # compute average confusion matrix for spikes and LFP
        i = (agg.df.e1 == -1) & (agg.df.e2 == -1) & (agg.df.decomp == decomp) & (agg.df.band == 0) & \
            (agg.df.aprop == 'category') & (agg.df.exfreq == False) & (agg.df.exel == False)
        print '%s, i.sum()=%d' % (decomp, i.sum())

        df = agg.df[i]
        ci = df.cmat_index.values
        C = agg.confusion_matrices[ci, :, :]
        Cmean = C.mean(axis=0)

        cnames = agg.stim_class_names[ci][0]

        # reorder confusion matrix
        Cro = np.zeros_like(Cmean)
        for k,cname1 in enumerate(cnames):
            for j,cname2 in enumerate(cnames):
                i1 = DECODER_CALL_TYPES.index(cname1)
                i2 = DECODER_CALL_TYPES.index(cname2)
                Cro[i1, i2] = Cmean[k, j]
        cmats[decomp] = Cro

    figsize = (16, 12)
    fig = plt.figure(figsize=figsize)
    plt.subplots_adjust(top=0.95, bottom=0.05, left=0.05, right=0.99, hspace=0.40, wspace=0.20)

    # gs = plt.GridSpec(1, 100)
    gs = plt.GridSpec(2, 2)

    # make a boxplot
    ax = plt.subplot(gs[0, 0])
    grouped_boxplot(bp_data, subgroup_names=['LFP', 'Spike PSD', 'Spike Rate'],
                    subgroup_colors=[COLOR_BLUE_LFP, COLOR_YELLOW_SPIKE, COLOR_RED_SPIKE_RATE], box_spacing=1.5, ax=ax)
    plt.xticks([])
    plt.ylabel('PCC')
    plt.title('Vocalization Type Decoder Performance')

    # plot the mean LFP confusion matrix
    ax = plt.subplot(gs[0, 1])
    plt.imshow(cmats['locked'], origin='lower', interpolation='nearest', aspect='auto', vmin=0, vmax=1, cmap=plt.cm.afmhot)

    xtks = [CALL_TYPE_SHORT_NAMES[ct] for ct in DECODER_CALL_TYPES]
    plt.xticks(range(len(DECODER_CALL_TYPES)), xtks)
    plt.yticks(range(len(DECODER_CALL_TYPES)), xtks)
    plt.colorbar(label='PCC')
    plt.title('Mean LFP Decoder Confusion Matrix')

    # plot the mean spike confusion matrix
    ax = plt.subplot(gs[1, 0])
    plt.imshow(cmats['spike_psd'], origin='lower', interpolation='nearest', aspect='auto', vmin=0, vmax=1, cmap=plt.cm.afmhot)

    xtks = [CALL_TYPE_SHORT_NAMES[ct] for ct in DECODER_CALL_TYPES]
    plt.xticks(range(len(DECODER_CALL_TYPES)), xtks)
    plt.yticks(range(len(DECODER_CALL_TYPES)), xtks)
    plt.colorbar(label='PCC')
    plt.title('Mean Spike PSD Decoder Confusion Matrix')

    fname = os.path.join(get_this_dir(), 'perf_boxplots_category.svg')
    plt.savefig(fname, facecolor='w', edgecolor='none')

    # plot the mean spike rate confusion matrix
    ax = plt.subplot(gs[1, 1])
    plt.imshow(cmats['spike_rate'], origin='lower', interpolation='nearest', aspect='auto', vmin=0, vmax=1, cmap=plt.cm.afmhot)

    xtks = [CALL_TYPE_SHORT_NAMES[ct] for ct in DECODER_CALL_TYPES]
    plt.xticks(range(len(DECODER_CALL_TYPES)), xtks)
    plt.yticks(range(len(DECODER_CALL_TYPES)), xtks)
    plt.colorbar(label='PCC')
    plt.title('Mean Spike Rate Decoder Confusion Matrix')

    fname = os.path.join(get_this_dir(), 'perf_boxplots_category.svg')
    plt.savefig(fname, facecolor='w', edgecolor='none')