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)
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')
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')