コード例 #1
0
 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')
コード例 #2
0
 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)
コード例 #3
0
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
コード例 #4
0
    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
コード例 #5
0
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
コード例 #6
0
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
コード例 #7
0
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
コード例 #8
0
 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)