def plotClusterOffrates(self, cluster=None, variant=None, idx=None): """Plot an off rate curve of a particular cluster.""" times = self.x if cluster is not None: fluorescence = self.binding_series.loc[cluster] else: if variant is None: print 'Error: need to define either variant or cluster!' return subSeries = self.getVariantBindingSeries(variant) if idx is not None: fluorescence = subSeries.iloc[idx] else: fluorescence = subSeries.iloc[0] cluster = fluorescence.name cluster_table = self.cluster_table if cluster in cluster_table.index: results = cluster_table.loc[cluster] else: results = pd.Series(index=cluster_table.columns) fig = plt.figure(figsize=(4,3)) ax = fig.add_subplot(111) fitParameters = pd.DataFrame(columns=['fmax', 'koff', 'fmin']) plotting.plotFitCurve(times, fluorescence, results, fitParameters, ax=ax, log_axis=False, func=fitting.objectiveFunctionOffRates, fittype='off')
def plotBindingCurve(self, variant, annotate=True): """Plot a binding curve of a particular variant.""" subSeries = self.getVariantBindingSeries(variant) if len(subSeries)==0: print 'No fluorescence data associated with variant %s'%str(variant) return concentrations = self.x variant_table = self.variant_table # plot fig = plt.figure(figsize=(3,3)) ax = fig.add_subplot(111) plotting.plotFitCurve(concentrations, subSeries, variant_table.loc[variant], ax=ax) if annotate: names = ['dG', 'dG_lb', 'dG_ub', 'fmax', 'fmax_lb', 'fmax_ub', 'numTests', 'pvalue', 'rsq', 'flag'] vec = pd.Series([getValueInTable(variant_table.loc[variant], name) for name in names], index=names) #vec.fillna('', inplace=True) annotationText = ['dG= %4.2f (%4.2f, %4.2f)'%(vec.dG, vec.dG_lb, vec.dG_ub), 'fmax= %4.2f (%4.2f, %4.2f)'%(vec.fmax, vec.fmax_lb, vec.fmax_ub), 'Nclusters= %4.0f'%vec.numTests, 'pvalue= %.1e'%vec.pvalue, 'average Rsq= %4.2f'%vec.rsq, 'fmax enforced=%s'%str(vec.flag) ] ax.annotate('\n'.join(annotationText), xy=(0.05, .95), xycoords='axes fraction', horizontalalignment='left', verticalalignment='top', fontsize=9)
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 plotOffrateCurve(self, variant, annotate=False, numtiles=None, tiles=None): """Plot an off rate curve of a particular variant.""" subSeries = self.getVariantBindingSeries(variant).dropna(how='all') timeDict = self.x variant_table = self.variant_table fitParameters = pd.DataFrame(columns=['fmax', 'koff', 'fmin']) if len(subSeries)==0: print 'No fluorescence data associated with variant %s'%str(variant) return # find tiles with variant cluster clusterTiles = self.getVariantTiles(variant) if tiles is None: tileNum = clusterTiles.value_counts() tileInit = tileNum.idxmax() # start by plotting the tile with the most clusters if numtiles is None: # plot as many tiles as there are clusters if num tiles is not specified numtiles = len(tileNum) otherTiles = tileNum.iloc[1:numtiles].index.tolist() else: # if tile is specified, just plot that tile. tileInit, otherTiles = tiles[0], tiles[1:] if np.in1d(clusterTiles, np.hstack([tileInit, otherTiles])).sum()==0: print 'No fluorescence data associated with variant %s'%str(variant) return # initiae plot fig = plt.figure(figsize=(3.5,3)) ax = fig.add_subplot(111) # plot fit and one tile's data plotting.plotFitCurve(timeDict[tileInit], subSeries.loc[clusterTiles==tileInit], variant_table.loc[variant], fitParameters, ax=ax, capsize=0, log_axis=False, func=fitting.objectiveFunctionOffRates, fittype='off') # plot the other tile's data for tile in otherTiles: plotting.plotDataErrorbars(timeDict[tile], subSeries.loc[clusterTiles==tile], ax, capsize=0) # annotate if annotate: names = ['koff', 'koff_lb', 'koff_ub', 'fmax', 'fmax_lb', 'fmax_ub', 'numTests', 'pvalue', 'rsq'] vec = pd.Series([getValueInTable(variant_table.loc[variant], name) for name in names], index=names) #vec.fillna('', inplace=True) annotationText = ['koff= %4.2e (%4.2e, %4.2e)'%(vec.koff, vec.koff_lb, vec.koff_ub), 'fmax= %4.2f (%4.2f, %4.2f)'%(vec.fmax, vec.fmax_lb, vec.fmax_ub), 'Nclusters= %4.0f'%vec.numTests, 'pvalue= %.1e'%vec.pvalue, 'average Rsq= %4.2f'%vec.rsq, ] ax.annotate('\n'.join(annotationText), xy=(.05, .95), xycoords='axes fraction', horizontalalignment='left', verticalalignment='top', fontsize=9) 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 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 plotClusterBinding(self, variant, cluster=None, idx=None): """Plot a binding curve of a particular cluster.""" concentrations = self.x if cluster is not None: fluorescence = subSeries.loc[cluster] else: subSeries = self.getVariantBindingSeries(variant) if idx is not None: fluorescence = subSeries.iloc[idx] else: fluorescence = subSeries.iloc[0] cluster = fluorescence.name cluster_table = self.cluster_table # plot fig = plt.figure(figsize=(4,3)) ax = fig.add_subplot(111) plotting.plotFitCurve(concentrations, fluorescence, cluster_table.loc[cluster], ax=ax)