def plotProjection(results, axis1=0, axis2=1, names_list=CN_globalVars.sm_names, scolor_dict=CN_globalVars.scolors, markers_dict=CN_globalVars.markers, leaveSM=None, leaveSM_results=None, leaveSM_edgeColor='orange', figsize=(6.8, 6.5), axisLabelPrefix='', title=None, bbox_to_anchor=(1.13, 0.875)): fig = plt.figure(figsize=figsize) ax = plt.subplot(111) i = 0 for currSM in names_list: if currSM != leaveSM: ax.scatter(results[i, axis1], results[i, axis2], color=scolor_dict[currSM], marker=markers_dict[currSM], label=currSM, edgecolor='black', linewidth=2, s=120) i += 1 if leaveSM: ax.scatter(leaveSM_results[0, axis1], leaveSM_results[0, axis2], color=scolor_dict[leaveSM], marker=markers_dict[leaveSM], label=leaveSM, edgecolor=leaveSM_edgeColor, linewidth=2, s=120) plotlib.setproperties(xlabel=axisLabelPrefix+'component {}'.format(axis1+1), ylabel=axisLabelPrefix+'component {}'.format(axis2+1), title=title, labelfontsize=22, tickfontsize=22, symmetric=True, tight=False) ax.legend(bbox_to_anchor=bbox_to_anchor, bbox_transform=fig.transFigure, fontsize=14) return ax
def plotBindingCurvesAcrossTargets(affinityDataList, variant, colors=None, names=None, norm=False, ax=None): '''Plot a binding curve of a particular variant''' if colors is None: colors = sns.color_palette("Paired", 12) if ax is None: fig = plt.figure(figsize=(4, 4)) ax = fig.add_subplot(111) for i, affinityData in enumerate(affinityDataList): # Load data subSeries = affinityData.getVariantBindingSeries(variant) if len(subSeries) == 0: print 'No fluorescence data associated with variant %s' % str( variant) return concentrations = affinityData.x variant_table = affinityData.variant_table variant_data = variant_table.loc[variant] if norm: fmax = variant_data['fmax'] subSeries = subSeries.copy() / fmax variant_data = variant_data.copy() for field in [ 'fmax_init', 'fmin_init', 'fmax_lb', 'fmax', 'fmax_ub', 'fmin_lb', 'fmin', 'fmin_ub' ]: variant_data[field] = variant_data[field] / fmax # Plot plotting.plotFitCurve(concentrations, subSeries, variant_data, ax=ax) ax.lines[i * 4 + 3].set_color(colors[i]) ax.lines[i * 4 + 3].set_linewidth(2) if names is not None: ax.lines[i * 4 + 3].set_label(names[i]) if norm: ylabel = 'Normalized fluorescence' else: ylabel = 'Fluorescence' plotlib.setproperties(xlabel='Concentration (nM)', ylabel=ylabel, labelfontsize=16, tickfontsize=16, legend=names, legendloc=2, legendfontsize=12) return ax
def doubleMutant(allData_aggPF, mutantSM, targetSM, normSM, names, norm=False, coop=False): # Define variables data = allData_aggPF[targetSM]['sm_norm_diff_signals_2']['median'] mutantRefVariant = allData_aggPF[mutantSM]['sm_norm_diff_signals_2']['median'].idxmax() targetRefVariant = allData_aggPF[targetSM]['sm_norm_diff_signals_2']['median'].idxmax() normRefVariant = allData_aggPF[normSM]['sm_norm_diff_signals_2']['median'].idxmax() if norm: targetRefSignal = allData_aggPF[targetSM]['sm_norm_diff_signals_2']['median'][targetRefVariant] normRefSignal = allData_aggPF[normSM]['sm_norm_diff_signals_2']['median'][normRefVariant] else: targetRefSignal = 1 normRefSignal = 1 libSeq = 'NNGGATTTTCCNNNNACGAAGTNNTCCCGAG' startPos = 14 title = 'Mutants of '+names[mutantSM].lower()+'0, in the presence of '+names[targetSM] if norm and coop: cbarLabel = 'Cooperativity normalized to '+names[targetSM].lower()+'0' elif norm and not coop: cbarLabel = 'Differential signals normalized to '+names[targetSM].lower()+'0' elif not norm and coop: cbarLabel = 'Cooperativity' else: cbarLabel = 'Differential signals' # Compute vmin and vmax manually (assuming robust=True) so that the color bar # scale is the same across the same dataRefVariant normRefData = allData_aggPF[normSM]['sm_norm_diff_signals_2']['median'] / normRefSignal doubleMutantSignals, mutantLabels = plotlib.doubleMutantMatrix(normRefData, normRefVariant, libSeq, startPos, coop) doubleMutantSignals = doubleMutantSignals[~np.isnan(doubleMutantSignals)] vmin = np.percentile(doubleMutantSignals, 1) vmax = np.percentile(doubleMutantSignals, 99) vlim = max(abs(vmin), abs(vmax)) vmin, vmax = -vlim, vlim # Make heatmap plt.figure(figsize=(12,10)) ax, cax = plotlib.doubleMutant(data, mutantRefVariant, libSeq, startPos=startPos, refSignal=targetRefSignal, normToRefSignal=norm, coop=coop, vmin=vmin, vmax=vmax, cbarLabel=cbarLabel, triangle='lower', invertY=False, linewidth=3) cax.tick_params(labelsize=20) cax.yaxis.label.set_fontsize(20) plotlib.setproperties(title=title, labelfontsize=20, titlefontsize=20) # Save to file if coop: figureOutput = 'coop' else: figureOutput = 'doubleMutant' if norm: figureNorm = 'norm_' else: figureNorm = '' plt.savefig(figureDir+'/'+names[targetSM]+'_'+names[mutantSM].lower()+'0_'+names[normSM].lower()+'0_'+figureNorm+figureOutput+'.png') return ax, cax
def plotScatterNorm_ds2_bserr(data_aggPF, name, fullName): x = data_aggPF['sm_norm_diff_signals_2']['median'] y = data_aggPF['sm_norm_diff_signals_2']['bserr'].apply(lambda x: float(x.split(',')[1][:-1]) - float(x.split(',')[0][1:])) plt.figure(figsize=(7, 7)) plotlib.scatterDensity(x, y, alpha=0.7, log=True) plotlib.setproperties(xlabel='Normalized differential signals', ylabel='Bootstrapped error', title=fullName, labelfontsize=25, tickfontsize=25, equal=True) plt.savefig(figureDir+'/'+name+'_scatterNorm_ds2_bserr.png')
def plotBindingCurve(affinityData, variant, annotate=True, ax=None): '''Plot a binding curve of a particular variant''' # Load data subSeries = affinityData.getVariantBindingSeries(variant) if len(subSeries) == 0: print 'No fluorescence data associated with variant %s' % str(variant) return concentrations = affinityData.x variant_table = affinityData.variant_table # Plot if ax is None: fig = plt.figure(figsize=(4, 4)) ax = fig.add_subplot(111) plotting.plotFitCurve(concentrations, subSeries, variant_table.loc[variant], ax=ax) plotlib.setproperties(xlabel='Concentration (nM)', ylabel='Fluorescence', labelfontsize=16, tickfontsize=16) # Annonate if annotate: names = [ 'dG', 'dG_lb', 'dG_ub', 'fmax', 'fmax_lb', 'fmax_ub', 'numTests', 'pvalue', 'rsq', 'flag' ] vec = pd.Series([ processresults.getValueInTable(variant_table.loc[variant], name) for name in names ], index=names) #vec.fillna('', inplace=True) annotationText = [ 'Kd = {:4.2f} uM ({:4.2f}, {:4.2f})'.format( liblib.dGtoKd(vec.dG, 'uM'), liblib.dGtoKd(vec.dG_lb, 'uM'), liblib.dGtoKd(vec.dG_ub, 'uM')), 'fmax = {:4.2f} ({:4.2f}, {:4.2f})'.format(vec.fmax, vec.fmax_lb, vec.fmax_ub), 'Nclusters = {:4.0f}'.format(vec.numTests), 'pvalue = {:.1e}'.format(vec.pvalue), 'average Rsq = {:4.2f}'.format(vec.rsq), 'fmax enforced = {}'.format(vec.flag) ] ax.annotate('\n'.join(annotationText), xy=(0.05, .95), xycoords='axes fraction', horizontalalignment='left', verticalalignment='top', fontsize=11) return ax
def plotScatterNorm_ds2_fbserr(data_aggPF, name, fullName): x = data_aggPF['sm_norm_diff_signals_2']['median'] y = data_aggPF['sm_norm_diff_signals_2']['bserr'].apply(lambda x: float(x.split(',')[1][:-1]) - float(x.split(',')[0][1:])) df = pd.concat([x, y / x], axis=1).replace([np.inf, -np.inf], np.nan).dropna() plt.figure(figsize=(7, 7)) plotlib.scatterDensity(df[0], df[1], alpha=0.7, log=True) plotlib.setproperties(xlabel='Normalized differential signals', ylabel='Fractional bootstrapped error', title=fullName, labelfontsize=25, tickfontsize=25, equal=True) plt.savefig(figureDir+'/'+name+'_scatterNorm_ds2_fbserr.png')
def plotScatterNorm_QO_ds2(data_aggPF, name, fullName): x = data_aggPF['QO_norm_signals']['median'] y = data_aggPF['sm_norm_diff_signals_2']['median'] plt.figure(figsize=(7, 7)) plotlib.scatterDensity(x, y, alpha=0.7, log=True) plotlib.setproperties(xlim=(-0.09, 1), ylim=(-0.09, 1), xlabel='Normalized quenched signals', ylabel='Normalized differential signals 2', title=fullName, labelfontsize=25, tickfontsize=25, equal=True) plt.savefig(figureDir+'/'+name+'_scatterNorm_QO_ds2.png')
def plotScatterNorm_QO_sm_linear(data_aggPF, name, fullName): x = data_aggPF['quenched_norm']['median'] y = data_aggPF['switch2_norm']['median'] plt.figure(figsize=(7, 7)) plotlib.scatterDensity(x, y, alpha=0.7, log=False) plotlib.setproperties(xlim=(-0.09, 1), ylim=(-0.09, 1), xlabel='Normalized quenched signals', ylabel='Normalized switching signals', title=fullName, labelfontsize=25, tickfontsize=25, equal=True) plt.savefig(figureDir+'/'+name+'_scatterNorm_QO_sm_linear.png')
def plotConfusionMatrix(trueY, predictedY, catLabels=None, figsize=(8, 7)): fig = plt.figure(figsize=figsize) ax = sns.heatmap(confusion_matrix(trueY, predictedY), annot=True, square=True, xticklabels=catLabels, yticklabels=catLabels) cax = fig.axes[-1] plotlib.setproperties(ax=ax, fontsize=15, yticklabelrot=0, xlabel='Predicted label', ylabel='True label') plotlib.setproperties(ax=cax, fontsize=15, yticklabelrot=0) return ax
def plotScatter_QO_sm(data_aggPF, name, fullName): x = data_aggPF['QO_signals']['median'] y = data_aggPF['sm_signals']['median'] plt.figure(figsize=(7, 7)) plotlib.scatterDensity(x, y, alpha=0.7, log=True) ub = max(np.percentile(x, 99.9), np.percentile(y, 99.9)) * 1.1 plotlib.setproperties(xlim=(0, ub), ylim=(0, ub), xlabel='Quenched signals', ylabel='Switching signals', title=fullName, labelfontsize=25, tickfontsize=25, equal=True) plt.savefig(figureDir+'/'+name+'_scatter_QO_sm.png')
def plotScatterNorm_ds2_bserr(data_aggPF, name, fullName): x = data_aggPF['sm_norm_diff_signals_2']['median'] y = data_aggPF['sm_norm_diff_signals_2']['bserr'].apply( lambda x: float(x.split(',')[1][:-1]) - float(x.split(',')[0][1:])) plt.figure(figsize=(7, 7)) plotlib.scatterDensity(x, y, alpha=0.7, log=True) plotlib.setproperties(xlabel='Normalized differential signals', ylabel='Bootstrapped error', title=fullName, labelfontsize=25, tickfontsize=25, equal=True) plt.savefig(figureDir + '/' + name + '_scatterNorm_ds2_bserr.png')
def plotScatterNorm_QO_ds1(data_aggPF, name, fullName): x = data_aggPF['QO_norm_signals']['median'] y = data_aggPF['sm_norm_diff_signals_1']['median'] plt.figure(figsize=(7, 7)) plotlib.scatterDensity(x, y, alpha=0.7, log=True) plotlib.setproperties(xlim=(-0.09, 1), ylim=(-0.09, 1), xlabel='Normalized quenched signals', ylabel='Normalized differential signals 1', title=fullName, labelfontsize=25, tickfontsize=25, equal=True) plt.savefig(figureDir + '/' + name + '_scatterNorm_QO_ds1.png')
def plotProjection(results, axis1=0, axis2=1, names_list=CN_globalVars.sm_names, scolor_dict=CN_globalVars.scolors, markers_dict=CN_globalVars.markers, leaveSM=None, leaveSM_results=None, leaveSM_edgeColor='orange', figsize=(6.8, 6.5), axisLabelPrefix='', title=None, bbox_to_anchor=(1.13, 0.875)): fig = plt.figure(figsize=figsize) ax = plt.subplot(111) i = 0 for currSM in names_list: if currSM != leaveSM: ax.scatter(results[i, axis1], results[i, axis2], color=scolor_dict[currSM], marker=markers_dict[currSM], label=currSM, edgecolor='black', linewidth=2, s=120) i += 1 if leaveSM: ax.scatter(leaveSM_results[0, axis1], leaveSM_results[0, axis2], color=scolor_dict[leaveSM], marker=markers_dict[leaveSM], label=leaveSM, edgecolor=leaveSM_edgeColor, linewidth=2, s=120) plotlib.setproperties( xlabel=axisLabelPrefix + 'component {}'.format(axis1 + 1), ylabel=axisLabelPrefix + 'component {}'.format(axis2 + 1), title=title, labelfontsize=22, tickfontsize=22, symmetric=True, tight=False) ax.legend(bbox_to_anchor=bbox_to_anchor, bbox_transform=fig.transFigure, fontsize=14) return ax
def plotScatter_QO_sm(data_aggPF, name, fullName): x = data_aggPF['QO_signals']['median'] y = data_aggPF['sm_signals']['median'] plt.figure(figsize=(7, 7)) plotlib.scatterDensity(x, y, alpha=0.7, log=True) ub = max(np.percentile(x, 99.9), np.percentile(y, 99.9)) * 1.1 plotlib.setproperties(xlim=(0, ub), ylim=(0, ub), xlabel='Quenched signals', ylabel='Switching signals', title=fullName, labelfontsize=25, tickfontsize=25, equal=True) plt.savefig(figureDir + '/' + name + '_scatter_QO_sm.png')
def plotScatterNorm_ds2_fbserr(data_aggPF, name, fullName): x = data_aggPF['sm_norm_diff_signals_2']['median'] y = data_aggPF['sm_norm_diff_signals_2']['bserr'].apply( lambda x: float(x.split(',')[1][:-1]) - float(x.split(',')[0][1:])) df = pd.concat([x, y / x], axis=1).replace([np.inf, -np.inf], np.nan).dropna() plt.figure(figsize=(7, 7)) plotlib.scatterDensity(df[0], df[1], alpha=0.7, log=True) plotlib.setproperties(xlabel='Normalized differential signals', ylabel='Fractional bootstrapped error', title=fullName, labelfontsize=25, tickfontsize=25, equal=True) plt.savefig(figureDir + '/' + name + '_scatterNorm_ds2_fbserr.png')
def plotBindingCurvesAcrossTargets(affinityDataList, variant, colors=None, names=None, norm=False, ax=None): '''Plot a binding curve of a particular variant''' if colors is None: colors = sns.color_palette("Paired", 12) if ax is None: fig = plt.figure(figsize=(4, 4)) ax = fig.add_subplot(111) for i, affinityData in enumerate(affinityDataList): # Load data subSeries = affinityData.getVariantBindingSeries(variant) if len(subSeries)==0: print 'No fluorescence data associated with variant %s'%str(variant) return concentrations = affinityData.x variant_table = affinityData.variant_table variant_data = variant_table.loc[variant] if norm: fmax = variant_data['fmax'] subSeries = subSeries.copy() / fmax variant_data = variant_data.copy() for field in ['fmax_init', 'fmin_init', 'fmax_lb', 'fmax', 'fmax_ub', 'fmin_lb', 'fmin', 'fmin_ub']: variant_data[field] = variant_data[field] / fmax # Plot plotting.plotFitCurve(concentrations, subSeries, variant_data, ax=ax) ax.lines[i*4+3].set_color(colors[i]) ax.lines[i*4+3].set_linewidth(2) if names is not None: ax.lines[i*4+3].set_label(names[i]) if norm: ylabel = 'Normalized fluorescence' else: ylabel = 'Fluorescence' plotlib.setproperties(xlabel='Concentration (nM)', ylabel=ylabel, labelfontsize=16, tickfontsize=16, legend=names, legendloc=2, legendfontsize=12) return ax
def plotBindingCurve(affinityData, variant, annotate=True, ax=None): '''Plot a binding curve of a particular variant''' # Load data subSeries = affinityData.getVariantBindingSeries(variant) if len(subSeries)==0: print 'No fluorescence data associated with variant %s'%str(variant) return concentrations = affinityData.x variant_table = affinityData.variant_table # Plot if ax is None: fig = plt.figure(figsize=(4, 4)) ax = fig.add_subplot(111) plotting.plotFitCurve(concentrations, subSeries, variant_table.loc[variant], ax=ax) plotlib.setproperties(xlabel='Concentration (nM)', ylabel='Fluorescence', labelfontsize=16, tickfontsize=16) # Annonate if annotate: names = ['dG', 'dG_lb', 'dG_ub', 'fmax', 'fmax_lb', 'fmax_ub', 'numTests', 'pvalue', 'rsq', 'flag'] vec = pd.Series([processresults.getValueInTable(variant_table.loc[variant], name) for name in names], index=names) #vec.fillna('', inplace=True) annotationText = ['Kd = {:4.2f} uM ({:4.2f}, {:4.2f})'.format(liblib.dGtoKd(vec.dG, 'uM'), liblib.dGtoKd(vec.dG_lb, 'uM'), liblib.dGtoKd(vec.dG_ub, 'uM')), 'fmax = {:4.2f} ({:4.2f}, {:4.2f})'.format(vec.fmax, vec.fmax_lb, vec.fmax_ub), 'Nclusters = {:4.0f}'.format(vec.numTests), 'pvalue = {:.1e}'.format(vec.pvalue), 'average Rsq = {:4.2f}'.format(vec.rsq), 'fmax enforced = {}'.format(vec.flag) ] ax.annotate('\n'.join(annotationText), xy=(0.05, .95), xycoords='axes fraction', horizontalalignment='left', verticalalignment='top', fontsize=11) return ax
def doubleMutant(allData_aggPF, mutantSM, targetSM, normSM, names, norm=False, coop=False): # Define variables data = allData_aggPF[targetSM]['sm_norm_diff_signals_2']['median'] mutantRefVariant = allData_aggPF[mutantSM]['sm_norm_diff_signals_2'][ 'median'].idxmax() targetRefVariant = allData_aggPF[targetSM]['sm_norm_diff_signals_2'][ 'median'].idxmax() normRefVariant = allData_aggPF[normSM]['sm_norm_diff_signals_2'][ 'median'].idxmax() if norm: targetRefSignal = allData_aggPF[targetSM]['sm_norm_diff_signals_2'][ 'median'][targetRefVariant] normRefSignal = allData_aggPF[normSM]['sm_norm_diff_signals_2'][ 'median'][normRefVariant] else: targetRefSignal = 1 normRefSignal = 1 libSeq = 'NNGGATTTTCCNNNNACGAAGTNNTCCCGAG' startPos = 14 title = 'Mutants of ' + names[mutantSM].lower( ) + '0, in the presence of ' + names[targetSM] if norm and coop: cbarLabel = 'Cooperativity normalized to ' + names[targetSM].lower( ) + '0' elif norm and not coop: cbarLabel = 'Differential signals normalized to ' + names[ targetSM].lower() + '0' elif not norm and coop: cbarLabel = 'Cooperativity' else: cbarLabel = 'Differential signals' # Compute vmin and vmax manually (assuming robust=True) so that the color bar # scale is the same across the same dataRefVariant normRefData = allData_aggPF[normSM]['sm_norm_diff_signals_2'][ 'median'] / normRefSignal doubleMutantSignals, mutantLabels = plotlib.doubleMutantMatrix( normRefData, normRefVariant, libSeq, startPos, coop) doubleMutantSignals = doubleMutantSignals[~np.isnan(doubleMutantSignals)] vmin = np.percentile(doubleMutantSignals, 1) vmax = np.percentile(doubleMutantSignals, 99) vlim = max(abs(vmin), abs(vmax)) vmin, vmax = -vlim, vlim # Make heatmap plt.figure(figsize=(12, 10)) ax, cax = plotlib.doubleMutant(data, mutantRefVariant, libSeq, startPos=startPos, refSignal=targetRefSignal, normToRefSignal=norm, coop=coop, vmin=vmin, vmax=vmax, cbarLabel=cbarLabel, triangle='lower', invertY=False, linewidth=3) cax.tick_params(labelsize=20) cax.yaxis.label.set_fontsize(20) plotlib.setproperties(title=title, labelfontsize=20, titlefontsize=20) # Save to file if coop: figureOutput = 'coop' else: figureOutput = 'doubleMutant' if norm: figureNorm = 'norm_' else: figureNorm = '' plt.savefig(figureDir + '/' + names[targetSM] + '_' + names[mutantSM].lower() + '0_' + names[normSM].lower() + '0_' + figureNorm + figureOutput + '.png') return ax, cax