def main(experiment=False, source=False, prepixelation='not specified', elinewidth=2, ecolor='0.3', make_tight=True): data_all = get_and_filter_results(experiment=experiment, source=source, prepixelation=prepixelation, make_CoI=True) ids = sorted(list(set(data_all['ID']))) pos_ids = np.arange(len(ids)) fig = figure(figsize=(pos_ids.max() * 4, 5), dpi=300, facecolor='#eeeeee', tight_layout=make_tight) ax = fig.add_subplot(1, 1, 1) width = 0.1 ax.yaxis.grid(True, linestyle='-', which='major', color='#dddddd', alpha=0.6, zorder=0) ax.set_axisbelow(True) scrambling_list = set(data_all['scrambling']) errors_index = range(len(set(data_all['ID']))) errors_columns = ['ID', 'correct', 'incorrect'] total_errors_index = range( len(set(data_all['ID'])) * (len(scrambling_list) + 1) ) # number of error entries - per ID: one for each scrambling step, and TWO for 0 total_errors_columns = ['ID', 'ER', 'scrambling', 'intensity', 'CoI'] total_errors = pd.DataFrame( index=total_errors_index, columns=total_errors_columns ) # empty container frame for concatenating input from multiple files for id_ix, le_id in enumerate(set(data_all['ID'])): id_ix = id_ix * ( len(scrambling_list) + 1 ) # number of errors per ID: one for each scrambling step, and TWO for 0 data_for_id = data_all[data_all['ID'] == le_id] strong_em_errors = len(data_for_id[ (data_for_id['scrambling'] == list(scrambling_list)[0]) & (data_for_id['correct answer'] != data_for_id['keypress']) & (data_for_id['intensity'] == 100)].index) / len(data_for_id[ (data_for_id['scrambling'] == list(scrambling_list)[0]) & (data_for_id['intensity'] == 100)].index) weak_em_errors = len(data_for_id[ (data_for_id['scrambling'] == list(scrambling_list)[0]) & (data_for_id['correct answer'] != data_for_id['keypress']) & (data_for_id['intensity'] == 40)].index) / len(data_for_id[ (data_for_id['scrambling'] == list(scrambling_list)[0]) & (data_for_id['intensity'] == 40)].index) total_errors.ix[id_ix]['ID'] = le_id total_errors.ix[id_ix]['ER'] = strong_em_errors total_errors.ix[id_ix]['scrambling'] = list(scrambling_list)[0] total_errors.ix[id_ix]['intensity'] = 100 total_errors.ix[id_ix + 1]['ID'] = le_id total_errors.ix[id_ix + 1]['ER'] = weak_em_errors total_errors.ix[id_ix + 1]['scrambling'] = list(scrambling_list)[0] total_errors.ix[id_ix + 1]['intensity'] = 40 for scrambling_id, scrambling in enumerate( list(scrambling_list)[1:]): #all scrambling steps except 0 errors = len(data_for_id[ (data_for_id['scrambling'] == scrambling) & (data_for_id['correct answer'] != data_for_id['keypress'])]. index) / len(data_for_id[(data_for_id['scrambling'] == scrambling)].index) total_errors.ix[id_ix + 2 + scrambling_id]['ID'] = le_id total_errors.ix[id_ix + 2 + scrambling_id]['ER'] = errors total_errors.ix[id_ix + 2 + scrambling_id]['scrambling'] = scrambling total_errors.ix[id_ix + 2 + scrambling_id]['intensity'] = 100 total_errors = categories_of_interest( total_errors, scrambling_list) #make categories of interest total_errors_just_for_plotting = total_errors.copy( ) # please DO NOT USE THE DATA FROM THIS NEW VARIABLE for anything BUT plotting total_errors_just_for_plotting.ix[( total_errors_just_for_plotting['ER'] == 0 ), 'ER'] = 0.002 # this is a hack to make 0-height bins visible when plotting #START DRAWING GRAPHIC ELEMENTS for scrambling_id, scrambling in enumerate( set(total_errors_just_for_plotting['scrambling'])): if scrambling == 0: #below this: per-participant graphs plot_em_strong = plt.bar( pos_ids - width, total_errors_just_for_plotting[ (total_errors_just_for_plotting['scrambling'] == scrambling ) & (total_errors_just_for_plotting['intensity'] == 100)] ['ER'], width, color='m', alpha=0.7, zorder=1, linewidth=0) plot_em_weak = plt.bar( pos_ids, total_errors_just_for_plotting[( total_errors_just_for_plotting['scrambling'] == scrambling ) & (total_errors_just_for_plotting['intensity'] == 40)]['ER'], width, color='m', alpha=0.4, zorder=1, linewidth=0) #below this: total graphs tot_plot_em_strong = plt.bar( pos_ids[-1] + 1 - width, total_errors_just_for_plotting[ (total_errors_just_for_plotting['scrambling'] == scrambling ) & (total_errors_just_for_plotting['intensity'] == 100)] ['ER'].mean(), width, color='m', alpha=0.7, zorder=1, linewidth=0) tot_err_em_strong = errorbar( pos_ids[-1] + 1 - (width / 2), total_errors_just_for_plotting[ (total_errors_just_for_plotting['scrambling'] == scrambling ) & (total_errors_just_for_plotting['intensity'] == 100)] ['ER'].mean(), yerr=sem(total_errors_just_for_plotting[ (total_errors_just_for_plotting['scrambling'] == scrambling ) & (total_errors_just_for_plotting['intensity'] == 100)] ['ER']), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) tot_plot_em_weak = plt.bar( pos_ids[-1] + 1, total_errors_just_for_plotting[ (total_errors_just_for_plotting['scrambling'] == scrambling ) & (total_errors_just_for_plotting['intensity'] == 40)] ['ER'].mean(), width, color='m', alpha=0.4, zorder=1, linewidth=0) tot_err_em_weak = errorbar( pos_ids[-1] + 1 + (width / 2) + width * scrambling_id, total_errors_just_for_plotting[ (total_errors_just_for_plotting['scrambling'] == scrambling ) & (total_errors_just_for_plotting['intensity'] == 40)] ['ER'].mean(), yerr=sem(total_errors_just_for_plotting[ (total_errors_just_for_plotting['scrambling'] == scrambling ) & (total_errors_just_for_plotting['intensity'] == 40)] ['ER']), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) else: #below this: per-participant graphs errors_part_n0 = total_errors_just_for_plotting[( total_errors_just_for_plotting['scrambling'] == scrambling )]['ER'] plot_sc = plt.bar( pos_ids + width * scrambling_id, total_errors_just_for_plotting[( total_errors_just_for_plotting['scrambling'] == scrambling )]['ER'], width, color='g', alpha=0.2 + 0.12 * scrambling_id, zorder=1, linewidth=0) #below this: total graphs errors_total_n0 = total_errors_just_for_plotting[( total_errors_just_for_plotting['scrambling'] == scrambling )]['ER'].mean() plot_sc = plt.bar(pos_ids[-1] + 1 + width * scrambling_id, errors_total_n0, width, color='g', alpha=0.2 + 0.12 * scrambling_id, zorder=1, linewidth=0) errorbar( pos_ids[-1] + 1 + (width / 2) + width * scrambling_id, errors_total_n0, yerr=sem(total_errors_just_for_plotting[( total_errors_just_for_plotting['scrambling'] == scrambling )]['ER']), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) width_multiplier = 15 / np.shape(data_all[ (data_all['scrambling'] == scrambling)].groupby('ID')['RT'].mean())[0] plt.axvline(pos_ids[-1] + 1 - width * width_multiplier, color='0.2') ids = ids + ['ALL'] pos_ids = np.arange(len(ids)) ax.set_xlim(0, pos_ids[-1] + width * 5) ax.set_ylim(0, total_errors_just_for_plotting['ER'].max() * 1.2) ax.set_ylabel(r'$\mathsf{\Sigma_{wrong} / \Sigma_{all}}$', fontsize=13) ax.set_xlabel('Participant', fontsize=11) ax.set_xticks(pos_ids + width * 3) ax.set_xticklabels( ids, fontsize=9) # add rotation=30 if labels are too long and need rotating for tick in ax.axes.get_xticklines(): tick.set_visible(False) axis.Axis.zoom(ax.xaxis, -0.5) scrambling_list = [str(i) for i in scrambling_list if i != 0] legend((plot_em_strong, plot_em_weak, plot_sc), ('Strong Emotion', 'Weak Emotion', 'Scrambled ' + ', '.join(scrambling_list)), loc='upper center', bbox_to_anchor=(0.5, 1.065), ncol=3, fancybox=False, shadow=False, prop=FontProperties(size='9')) #END DRAWING GRAPHIC ELEMENTS total_errors['ER'] = total_errors['ER'].astype( float ) # apparently some other scripts (using R linear models) cannot deal with the output unless we do this. return total_errors
def main(experiment=False, source=False, prepixelation='not specified', elinewidth=2, ecolor='0.3', make_tight=True, total='means', make_std=False, make_sem=True, fontscale=1): data_all = get_and_filter_results(experiment, source, prepixelation, mismeasurement='fix', apply_correct_values=True, make_CoI=True) scrambling_list = set(data_all['scrambling']) data_all = categories_of_interest(data_all, scrambling_list) ids = sorted(list(set(data_all['ID']))) pos_ids = np.arange(len(ids)) fig = figure(figsize=(pos_ids.max() * 5, 4), dpi=300, facecolor='#eeeeee', tight_layout=make_tight) ax = fig.add_subplot(1, 1, 1) ax.yaxis.grid(True, linestyle='-', which='major', color='#dddddd', alpha=0.6, zorder=0) ax.set_axisbelow(True) width = 0.1 for scrambling_id, scrambling in enumerate(set(data_all['scrambling'])): if scrambling == 0: #below this: per-participant graphs plot_em_strong = plt.bar( pos_ids - width, data_all[(data_all['scrambling'] == scrambling) & ( data_all['intensity'] == 100)].groupby('ID')['RT'].mean(), width, color='m', alpha=0.7, zorder=1, linewidth=0) plot_em_weak = plt.bar( pos_ids, data_all[(data_all['scrambling'] == scrambling) & ( data_all['intensity'] == 40)].groupby('ID')['RT'].mean(), width, color='m', alpha=0.4, zorder=1, linewidth=0) if make_std: errorbar(pos_ids - (width / 2), data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)].groupby( 'ID')['RT'].mean(), yerr=data_all[(data_all['scrambling'] == scrambling )].groupby('ID')['RT'].aggregate( np.std), ecolor=str(float(ecolor) + 0.25), elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) errorbar(pos_ids + (width / 2) + width * scrambling_id, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)].groupby( 'ID')['RT'].mean(), yerr=data_all[(data_all['scrambling'] == scrambling )].groupby('ID')['RT'].aggregate( np.std), ecolor=str(float(ecolor) + 0.25), elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) if make_sem: errorbar(pos_ids - (width / 2), data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)].groupby( 'ID')['RT'].mean(), yerr=data_all[(data_all['scrambling'] == scrambling )].groupby('ID')['RT'].aggregate(sem), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) errorbar(pos_ids + (width / 2) + width * scrambling_id, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)].groupby( 'ID')['RT'].mean(), yerr=data_all[(data_all['scrambling'] == scrambling )].groupby('ID')['RT'].aggregate(sem), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) #below this: total graphs if total == 'all': plt.bar( pos_ids[-1] + 1 - width, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)]['RT'].mean(), width, color='m', alpha=0.7, zorder=1, linewidth=0) plt.bar(pos_ids[-1] + 1, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)]['RT'].mean(), width, color='m', alpha=0.4, zorder=1, linewidth=0) if make_std: errorbar( pos_ids[-1] + 1 - (width / 2), data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)]['RT'].mean(), yerr=np.std( data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)]['RT']), ecolor=str(float(ecolor) + 0.25), elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) errorbar( pos_ids[-1] + 1 + (width / 2) + width * scrambling_id, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)]['RT'].mean(), yerr=np.std( data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)]['RT']), ecolor=str(float(ecolor) + 0.25), elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) if make_sem: errorbar(pos_ids[-1] + 1 - (width / 2), data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)] ['RT'].mean(), yerr=sem(data_all[( data_all['scrambling'] == scrambling)]['RT']), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) errorbar( pos_ids[-1] + 1 + (width / 2) + width * scrambling_id, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)]['RT'].mean(), yerr=sem(data_all[( data_all['scrambling'] == scrambling)]['RT']), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) elif total == 'means': plt.bar( pos_ids[-1] + 1 - width, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)]['RT'].mean(), width, color='m', alpha=0.7, zorder=1, linewidth=0) plt.bar(pos_ids[-1] + 1, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)]['RT'].mean(), width, color='m', alpha=0.4, zorder=1, linewidth=0) if make_std: errorbar( pos_ids[-1] + 1 - (width / 2), data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)]['RT'].mean(), yerr=np.std( data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)].groupby( 'ID')['RT'].mean()), ecolor=str(float(ecolor) + 0.25), elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) errorbar( pos_ids[-1] + 1 + (width / 2) + width * scrambling_id, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)]['RT'].mean(), yerr=np.std( data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)].groupby( 'ID')['RT'].mean()), ecolor=str(float(ecolor) + 0.25), elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) if make_sem: errorbar( pos_ids[-1] + 1 - (width / 2), data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)]['RT'].mean(), yerr=sem( data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)].groupby( 'ID')['RT'].mean()), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) errorbar( pos_ids[-1] + 1 + (width / 2) + width * scrambling_id, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)]['RT'].mean(), yerr=sem( data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)].groupby( 'ID')['RT'].mean()), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) else: #below this: per-participant graphs plot_sc = plt.bar(pos_ids + width * scrambling_id, data_all[(data_all['scrambling'] == scrambling )].groupby('ID')['RT'].mean(), width, color='g', alpha=0.2 + 0.12 * scrambling_id, zorder=1, linewidth=0) if make_std: errorbar(pos_ids + (width / 2) + width * scrambling_id, data_all[(data_all['scrambling'] == scrambling )].groupby('ID')['RT'].mean(), yerr=data_all[(data_all['scrambling'] == scrambling )].groupby('ID')['RT'].aggregate( np.std), ecolor=str(float(ecolor) + 0.25), elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) if make_sem: errorbar(pos_ids + (width / 2) + width * scrambling_id, data_all[(data_all['scrambling'] == scrambling )].groupby('ID')['RT'].mean(), yerr=data_all[(data_all['scrambling'] == scrambling )].groupby('ID')['RT'].aggregate(sem), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) #below this: total graphs if total == 'all': plot_sc = plt.bar( pos_ids[-1] + 1 + width * scrambling_id, data_all[( data_all['scrambling'] == scrambling)]['RT'].mean(), width, color='g', alpha=0.2 + 0.12 * scrambling_id, zorder=1, linewidth=0) if make_std: errorbar(pos_ids[-1] + 1 + (width / 2) + width * scrambling_id, data_all[(data_all['scrambling'] == scrambling )]['RT'].mean(), yerr=np.std(data_all[( data_all['scrambling'] == scrambling)]['RT']), ecolor=str(float(ecolor) + 0.25), elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) if make_sem: errorbar(pos_ids[-1] + 1 + (width / 2) + width * scrambling_id, data_all[(data_all['scrambling'] == scrambling )]['RT'].mean(), yerr=sem(data_all[( data_all['scrambling'] == scrambling)]['RT']), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) elif total == 'means': plot_sc = plt.bar( pos_ids[-1] + 1 + width * scrambling_id, data_all[( data_all['scrambling'] == scrambling)]['RT'].mean(), width, color='g', alpha=0.2 + 0.12 * scrambling_id, zorder=1, linewidth=0) if make_std: errorbar(pos_ids[-1] + 1 + (width / 2) + width * scrambling_id, data_all[(data_all['scrambling'] == scrambling )]['RT'].mean(), yerr=np.std( data_all[(data_all['scrambling'] == scrambling )].groupby('ID')['RT'].mean()), ecolor=str(float(ecolor) + 0.25), elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) if make_sem: errorbar( pos_ids[-1] + 1 + (width / 2) + width * scrambling_id, data_all[(data_all['scrambling'] == scrambling )]['RT'].mean(), yerr=sem(data_all[(data_all['scrambling'] == scrambling )].groupby('ID')['RT'].mean()), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder=2) width_multiplier = 15 / np.shape( data_all[(data_all['scrambling'] == scrambling)].groupby( 'ID')['RT'].mean())[0] #(fine tune) separator positioning plt.axvline(pos_ids[-1] + 1 - width * width_multiplier, color='0.2') #separator - per-person/total scrambling_list = [str(i) for i in scrambling_list if i != 0] #format as string for legend ids = ids + ['ALL'] pos_ids = np.arange(len(ids)) ax.set_ylabel(r'$\mathsf{\overline{RT}}$ [s]', fontsize=11 * fontscale) ax.set_xlabel('Participant', fontsize=11 * fontscale) ax.set_xticks(pos_ids + width * 3) ax.set_xticklabels(ids, fontsize=9 * fontscale) # add rotation=30 if things get too crowded for tick in ax.axes.get_xticklines(): tick.set_visible(False) ax.set_xlim(0, pos_ids[-1] + width * 5) # before scaling to add padding in front of zero axis.Axis.zoom( ax.xaxis, -0.5 ) # sets x margins further apart from the content proportional to its length axis.Axis.zoom( ax.yaxis, -0.5 ) # sets y margins further apart from the content proportional to its length ax.set_ylim(bottom=0) # after scaling to disregard padding unerneath zero. legend((plot_em_strong, plot_em_weak, plot_sc), ('Strong Emotion', 'Weak Emotion', 'Scrambled ' + ', '.join(scrambling_list)), loc='upper center', bbox_to_anchor=(0.5, 1.065), ncol=3, fancybox=False, shadow=False, prop=FontProperties(size=str(9 * fontscale))) return data_all
def main(experiment=False, source=False, prepixelation='not specified', elinewidth=2, ecolor='0.3', make_tight=True, total='means', make_std=False, make_sem=True, fontscale=1): data_all = get_and_filter_results(experiment, source, prepixelation, mismeasurement='fix', apply_correct_values=True, make_CoI=True) scrambling_list = set(data_all['scrambling']) data_all = categories_of_interest(data_all, scrambling_list) ids = sorted(list(set(data_all['ID']))) pos_ids = np.arange(len(ids)) fig = figure(figsize=(pos_ids.max()*5, 4), dpi=300,facecolor='#eeeeee', tight_layout=make_tight) ax=fig.add_subplot(1,1,1) ax.yaxis.grid(True, linestyle='-', which='major', color='#dddddd',alpha=0.6, zorder = 0) ax.set_axisbelow(True) width = 0.1 for scrambling_id, scrambling in enumerate(set(data_all['scrambling'])): if scrambling == 0: #below this: per-participant graphs plot_em_strong = plt.bar(pos_ids-width, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)].groupby('ID')['RT'].mean(), width ,color='m', alpha=0.7, zorder = 1, linewidth=0) plot_em_weak = plt.bar(pos_ids, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)].groupby('ID')['RT'].mean(), width ,color='m', alpha=0.4, zorder = 1, linewidth=0) if make_std: errorbar(pos_ids-(width/2), data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)].groupby('ID')['RT'].mean(), yerr=data_all[(data_all['scrambling'] == scrambling)].groupby('ID')['RT'].aggregate(np.std), ecolor=str(float(ecolor)+0.25), elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) errorbar(pos_ids+(width/2)+width*scrambling_id, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)].groupby('ID')['RT'].mean(), yerr=data_all[(data_all['scrambling'] == scrambling)].groupby('ID')['RT'].aggregate(np.std), ecolor=str(float(ecolor)+0.25), elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) if make_sem: errorbar(pos_ids-(width/2), data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)].groupby('ID')['RT'].mean(), yerr=data_all[(data_all['scrambling'] == scrambling)].groupby('ID')['RT'].aggregate(sem), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) errorbar(pos_ids+(width/2)+width*scrambling_id, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)].groupby('ID')['RT'].mean(), yerr=data_all[(data_all['scrambling'] == scrambling)].groupby('ID')['RT'].aggregate(sem), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) #below this: total graphs if total == 'all': plt.bar(pos_ids[-1]+1-width, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)]['RT'].mean(), width ,color='m', alpha=0.7, zorder = 1, linewidth=0) plt.bar(pos_ids[-1]+1, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)]['RT'].mean(), width ,color='m', alpha=0.4, zorder = 1, linewidth=0) if make_std: errorbar(pos_ids[-1]+1-(width/2), data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)]['RT'].mean(), yerr=np.std(data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)]['RT']), ecolor=str(float(ecolor)+0.25), elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) errorbar(pos_ids[-1]+1+(width/2)+width*scrambling_id, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)]['RT'].mean(), yerr=np.std(data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)]['RT']), ecolor=str(float(ecolor)+0.25), elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) if make_sem: errorbar(pos_ids[-1]+1-(width/2), data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)]['RT'].mean(), yerr=sem(data_all[(data_all['scrambling'] == scrambling)]['RT']), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) errorbar(pos_ids[-1]+1+(width/2)+width*scrambling_id, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)]['RT'].mean(), yerr=sem(data_all[(data_all['scrambling'] == scrambling)]['RT']), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) elif total == 'means': plt.bar(pos_ids[-1]+1-width, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)]['RT'].mean(), width ,color='m', alpha=0.7, zorder = 1, linewidth=0) plt.bar(pos_ids[-1]+1, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)]['RT'].mean(), width ,color='m', alpha=0.4, zorder = 1, linewidth=0) if make_std: errorbar(pos_ids[-1]+1-(width/2), data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)]['RT'].mean(), yerr=np.std(data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)].groupby('ID')['RT'].mean()), ecolor=str(float(ecolor)+0.25), elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) errorbar(pos_ids[-1]+1+(width/2)+width*scrambling_id, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)]['RT'].mean(), yerr=np.std(data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)].groupby('ID')['RT'].mean()), ecolor=str(float(ecolor)+0.25), elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) if make_sem: errorbar(pos_ids[-1]+1-(width/2), data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)]['RT'].mean(), yerr=sem(data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 100)].groupby('ID')['RT'].mean()), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) errorbar(pos_ids[-1]+1+(width/2)+width*scrambling_id, data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)]['RT'].mean(), yerr=sem(data_all[(data_all['scrambling'] == scrambling) & (data_all['intensity'] == 40)].groupby('ID')['RT'].mean()), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) else: #below this: per-participant graphs plot_sc = plt.bar(pos_ids+width*scrambling_id, data_all[(data_all['scrambling'] == scrambling)].groupby('ID')['RT'].mean(), width ,color='g', alpha=0.2+0.12*scrambling_id, zorder = 1, linewidth=0) if make_std: errorbar(pos_ids+(width/2)+width*scrambling_id, data_all[(data_all['scrambling'] == scrambling)].groupby('ID')['RT'].mean(), yerr=data_all[(data_all['scrambling'] == scrambling)].groupby('ID')['RT'].aggregate(np.std), ecolor=str(float(ecolor)+0.25), elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) if make_sem: errorbar(pos_ids+(width/2)+width*scrambling_id, data_all[(data_all['scrambling'] == scrambling)].groupby('ID')['RT'].mean(), yerr=data_all[(data_all['scrambling'] == scrambling)].groupby('ID')['RT'].aggregate(sem), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) #below this: total graphs if total == 'all': plot_sc = plt.bar(pos_ids[-1]+1+width*scrambling_id, data_all[(data_all['scrambling'] == scrambling)]['RT'].mean(), width ,color='g', alpha=0.2+0.12*scrambling_id, zorder = 1, linewidth=0) if make_std: errorbar(pos_ids[-1]+1+(width/2)+width*scrambling_id, data_all[(data_all['scrambling'] == scrambling)]['RT'].mean(), yerr=np.std(data_all[(data_all['scrambling'] == scrambling)]['RT']), ecolor=str(float(ecolor)+0.25), elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) if make_sem: errorbar(pos_ids[-1]+1+(width/2)+width*scrambling_id, data_all[(data_all['scrambling'] == scrambling)]['RT'].mean(), yerr=sem(data_all[(data_all['scrambling'] == scrambling)]['RT']), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) elif total == 'means': plot_sc = plt.bar(pos_ids[-1]+1+width*scrambling_id, data_all[(data_all['scrambling'] == scrambling)]['RT'].mean(), width ,color='g', alpha=0.2+0.12*scrambling_id, zorder = 1, linewidth=0) if make_std: errorbar(pos_ids[-1]+1+(width/2)+width*scrambling_id, data_all[(data_all['scrambling'] == scrambling)]['RT'].mean(), yerr=np.std(data_all[(data_all['scrambling'] == scrambling)].groupby('ID')['RT'].mean()), ecolor=str(float(ecolor)+0.25), elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) if make_sem: errorbar(pos_ids[-1]+1+(width/2)+width*scrambling_id, data_all[(data_all['scrambling'] == scrambling)]['RT'].mean(), yerr=sem(data_all[(data_all['scrambling'] == scrambling)].groupby('ID')['RT'].mean()), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) width_multiplier = 15/np.shape(data_all[(data_all['scrambling'] == scrambling)].groupby('ID')['RT'].mean())[0] #(fine tune) separator positioning plt.axvline(pos_ids[-1]+1-width*width_multiplier, color='0.2') #separator - per-person/total scrambling_list = [str(i) for i in scrambling_list if i != 0] #format as string for legend ids=ids+['ALL'] pos_ids = np.arange(len(ids)) ax.set_ylabel(r'$\mathsf{\overline{RT}}$ [s]', fontsize=11*fontscale) ax.set_xlabel('Participant', fontsize=11*fontscale) ax.set_xticks(pos_ids + width*3) ax.set_xticklabels(ids,fontsize=9*fontscale) # add rotation=30 if things get too crowded for tick in ax.axes.get_xticklines(): tick.set_visible(False) ax.set_xlim(0, pos_ids[-1]+width*5) # before scaling to add padding in front of zero axis.Axis.zoom(ax.xaxis, -0.5) # sets x margins further apart from the content proportional to its length axis.Axis.zoom(ax.yaxis, -0.5) # sets y margins further apart from the content proportional to its length ax.set_ylim(bottom=0) # after scaling to disregard padding unerneath zero. legend((plot_em_strong,plot_em_weak, plot_sc),('Strong Emotion','Weak Emotion', 'Scrambled '+', '.join(scrambling_list)),loc='upper center', bbox_to_anchor=(0.5, 1.065), ncol=3, fancybox=False, shadow=False, prop=FontProperties(size=str(9*fontscale))) return data_all
def main(experiment=False, source=False, prepixelation='not specified', elinewidth=2, ecolor='0.3', make_tight=True): data_all = get_and_filter_results(experiment=experiment, source=source, prepixelation=prepixelation, make_CoI=True) ids = sorted(list(set(data_all['ID']))) pos_ids = np.arange(len(ids)) fig = figure(figsize=(pos_ids.max()*4, 5), dpi=300,facecolor='#eeeeee', tight_layout=make_tight) ax=fig.add_subplot(1,1,1) width = 0.1 ax.yaxis.grid(True, linestyle='-', which='major', color='#dddddd',alpha=0.6, zorder = 0) ax.set_axisbelow(True) scrambling_list = set(data_all['scrambling']) errors_index = range(len(set(data_all['ID']))) errors_columns = ['ID', 'correct', 'incorrect'] total_errors_index = range(len(set(data_all['ID']))*(len(scrambling_list)+1)) # number of error entries - per ID: one for each scrambling step, and TWO for 0 total_errors_columns = ['ID', 'ER', 'scrambling', 'intensity', 'CoI'] total_errors = pd.DataFrame(index=total_errors_index, columns=total_errors_columns) # empty container frame for concatenating input from multiple files for id_ix, le_id in enumerate(set(data_all['ID'])): id_ix = id_ix*(len(scrambling_list)+1) # number of errors per ID: one for each scrambling step, and TWO for 0 data_for_id = data_all[data_all['ID'] == le_id] strong_em_errors = len(data_for_id[(data_for_id['scrambling'] == list(scrambling_list)[0]) & (data_for_id['correct answer'] != data_for_id['keypress']) & (data_for_id['intensity'] == 100)].index)/len(data_for_id[(data_for_id['scrambling'] == list(scrambling_list)[0]) & (data_for_id['intensity'] == 100)].index) weak_em_errors = len(data_for_id[(data_for_id['scrambling'] == list(scrambling_list)[0]) & (data_for_id['correct answer'] != data_for_id['keypress']) & (data_for_id['intensity'] == 40)].index)/len(data_for_id[(data_for_id['scrambling'] == list(scrambling_list)[0]) & (data_for_id['intensity'] == 40)].index) total_errors.ix[id_ix]['ID'] = le_id total_errors.ix[id_ix]['ER'] = strong_em_errors total_errors.ix[id_ix]['scrambling'] = list(scrambling_list)[0] total_errors.ix[id_ix]['intensity'] = 100 total_errors.ix[id_ix+1]['ID'] = le_id total_errors.ix[id_ix+1]['ER'] = weak_em_errors total_errors.ix[id_ix+1]['scrambling'] = list(scrambling_list)[0] total_errors.ix[id_ix+1]['intensity'] = 40 for scrambling_id, scrambling in enumerate(list(scrambling_list)[1:]): #all scrambling steps except 0 errors = len(data_for_id[(data_for_id['scrambling'] == scrambling) & (data_for_id['correct answer'] != data_for_id['keypress'])].index)/len(data_for_id[(data_for_id['scrambling'] == scrambling)].index) total_errors.ix[id_ix+2+scrambling_id]['ID'] = le_id total_errors.ix[id_ix+2+scrambling_id]['ER'] = errors total_errors.ix[id_ix+2+scrambling_id]['scrambling'] = scrambling total_errors.ix[id_ix+2+scrambling_id]['intensity'] = 100 total_errors = categories_of_interest(total_errors, scrambling_list) #make categories of interest total_errors_just_for_plotting = total_errors.copy() # please DO NOT USE THE DATA FROM THIS NEW VARIABLE for anything BUT plotting total_errors_just_for_plotting.ix[(total_errors_just_for_plotting['ER'] == 0), 'ER'] = 0.002 # this is a hack to make 0-height bins visible when plotting #START DRAWING GRAPHIC ELEMENTS for scrambling_id, scrambling in enumerate(set(total_errors_just_for_plotting['scrambling'])): if scrambling == 0: #below this: per-participant graphs plot_em_strong = plt.bar(pos_ids-width, total_errors_just_for_plotting[(total_errors_just_for_plotting['scrambling'] == scrambling) & (total_errors_just_for_plotting['intensity'] == 100)]['ER'], width ,color='m', alpha=0.7, zorder = 1, linewidth=0) plot_em_weak = plt.bar(pos_ids, total_errors_just_for_plotting[(total_errors_just_for_plotting['scrambling'] == scrambling) & (total_errors_just_for_plotting['intensity'] == 40)]['ER'], width ,color='m', alpha=0.4, zorder = 1, linewidth=0) #below this: total graphs tot_plot_em_strong = plt.bar(pos_ids[-1]+1-width, total_errors_just_for_plotting[(total_errors_just_for_plotting['scrambling'] == scrambling) & (total_errors_just_for_plotting['intensity'] == 100)]['ER'].mean(), width ,color='m', alpha=0.7, zorder = 1, linewidth=0) tot_err_em_strong = errorbar(pos_ids[-1]+1-(width/2), total_errors_just_for_plotting[(total_errors_just_for_plotting['scrambling'] == scrambling) & (total_errors_just_for_plotting['intensity'] == 100)]['ER'].mean(), yerr=sem(total_errors_just_for_plotting[(total_errors_just_for_plotting['scrambling'] == scrambling) & (total_errors_just_for_plotting['intensity'] == 100)]['ER']), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) tot_plot_em_weak = plt.bar(pos_ids[-1]+1, total_errors_just_for_plotting[(total_errors_just_for_plotting['scrambling'] == scrambling) & (total_errors_just_for_plotting['intensity'] == 40)]['ER'].mean(), width ,color='m', alpha=0.4, zorder = 1, linewidth=0) tot_err_em_weak = errorbar(pos_ids[-1]+1+(width/2)+width*scrambling_id, total_errors_just_for_plotting[(total_errors_just_for_plotting['scrambling'] == scrambling) & (total_errors_just_for_plotting['intensity'] == 40)]['ER'].mean(), yerr=sem(total_errors_just_for_plotting[(total_errors_just_for_plotting['scrambling'] == scrambling) & (total_errors_just_for_plotting['intensity'] == 40)]['ER']), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) else: #below this: per-participant graphs errors_part_n0 = total_errors_just_for_plotting[(total_errors_just_for_plotting['scrambling'] == scrambling)]['ER'] plot_sc = plt.bar(pos_ids+width*scrambling_id, total_errors_just_for_plotting[(total_errors_just_for_plotting['scrambling'] == scrambling)]['ER'], width ,color='g', alpha=0.2+0.12*scrambling_id, zorder = 1, linewidth=0) #below this: total graphs errors_total_n0 = total_errors_just_for_plotting[(total_errors_just_for_plotting['scrambling'] == scrambling)]['ER'].mean() plot_sc = plt.bar(pos_ids[-1]+1+width*scrambling_id, errors_total_n0, width ,color='g', alpha=0.2+0.12*scrambling_id, zorder = 1,linewidth=0) errorbar(pos_ids[-1]+1+(width/2)+width*scrambling_id, errors_total_n0, yerr=sem(total_errors_just_for_plotting[(total_errors_just_for_plotting['scrambling'] == scrambling)]['ER']), ecolor=ecolor, elinewidth=elinewidth, capsize=0, linestyle='None', zorder = 2) width_multiplier = 15/np.shape(data_all[(data_all['scrambling'] == scrambling)].groupby('ID')['RT'].mean())[0] plt.axvline(pos_ids[-1]+1-width*width_multiplier, color='0.2') ids=ids+['ALL'] pos_ids = np.arange(len(ids)) ax.set_xlim(0, pos_ids[-1]+width*5) ax.set_ylim(0, total_errors_just_for_plotting['ER'].max()*1.2) ax.set_ylabel(r'$\mathsf{\Sigma_{wrong} / \Sigma_{all}}$', fontsize=13) ax.set_xlabel('Participant', fontsize=11) ax.set_xticks(pos_ids + width*3) ax.set_xticklabels(ids,fontsize=9) # add rotation=30 if labels are too long and need rotating for tick in ax.axes.get_xticklines(): tick.set_visible(False) axis.Axis.zoom(ax.xaxis, -0.5) scrambling_list = [str(i) for i in scrambling_list if i != 0] legend((plot_em_strong,plot_em_weak, plot_sc),('Strong Emotion','Weak Emotion', 'Scrambled '+', '.join(scrambling_list)),loc='upper center', bbox_to_anchor=(0.5, 1.065), ncol=3, fancybox=False, shadow=False,prop= FontProperties(size='9')) #END DRAWING GRAPHIC ELEMENTS total_errors['ER'] = total_errors['ER'].astype(float) # apparently some other scripts (using R linear models) cannot deal with the output unless we do this. return total_errors