コード例 #1
0
def add_cluster_centroids_to_axes(dictdata,ax,annotate=True,n_clusters=None,nodiamonds=False,write_to_file=None,k_means=False,fontsize_clusterlabel=14,**kwargs):
    from ClusterPoints import get_clusterpoints
    print(n_clusters)
    if n_clusters is not None:
      print(n_clusters)
      centroids , sizedict, sizedict_normalized,labels,n_clusters = get_clusterpoints(dictdata,n_clusters=n_clusters,k_means=k_means)
    else:
      print(n_clusters)
      centroids , sizedict, sizedict_normalized,labels,n_clusters = get_clusterpoints(dictdata,k_means=k_means)

    if not nodiamonds:
      im2 = ax.scatter(centroids[:, 0], centroids[:, 1],centroids[:,2],marker='o', s=110, linewidths=3,
            color='black',alpha=1.0)

    if annotate:
          i=0
          for k in sizedict_normalized:
            print("k ",k,sizedict_normalized[k])
            #print("k centroids ",k,centroids[k,:])
            if k<0: continue
            #print(sizedict_normalized[k])
            label = "{:0.2f}".format(sizedict_normalized[k])
            label2 = "{:.1f},\n{:.1f},\n{:.1f}".format(centroids[k, 0], centroids[k, 1],centroids[k,2])
            label3 = sizedict[k]
            #ax.text(centroids[k, 0]+0.2+0.01*i, centroids[k, 1]+0.2,centroids[k,2]+0.2,label,fontsize=11)
            #ax.text(centroids[k, 0]+0.23, centroids[k, 1]+0.23,centroids[k,2]+0.45,label2,fontsize=8)
            ax.text(centroids[k, 0]+0.23, centroids[k, 1]+0.23,centroids[k,2]+0.4,label3,fontsize=fontsize_clusterlabel)
            i+=1
コード例 #2
0
def clusters_to_dict(dictdata,n_clusters=None):
    from ClusterPoints import get_clusterpoints
    if n_clusters is not None:
      centroids , sizedict, sizedict_normalized = get_clusterpoints(dictdata,n_clusters=n_clusters)
    else:
      centroids , sizedict, sizedict_normalized = get_clusterpoints(dictdata)

    cdict={}
    for k in sizedict_normalized:
      cdict['centroid_id']=k
      cdict['dimensions']=centroids.shape[1]
      cdict['n_clusters']=centroids.shape[0]
      cdict['center']=centroids[k,:]
      cdict['size']=sizedict[k]
      cdict['size_norm']=sizedict_normalized[k]
      cdict['xfield']=info['xfield']
      cdict['yfield']=info['yfield']
      cdict['zfield']=info['zfield']
    return cdict
コード例 #3
0
def plot3d_slice_topN(collection,keys=None,outfile=None,show=False,cluster=False,color_field='cfield',cmap_field='cfield',dim3d=True,dim2d=False,topNs=[200],use_topN=True,**kwargs):


  figsize = (5*len(topNs),4*len(collection))
  fig = plt.figure(figsize=figsize)
  markers = ['o', 'o','o']
  print("keys",keys)
  if topNs is None:
    topNs = [200]#10%
  
  count=1
  cols = len(topNs)
  rows = len(collection)
  vmin = -40
  vmax = -25
  for i,org_dictdata in enumerate(collection):
    for topN in topNs:
      sorteddict = sortdict_by_field(org_dictdata)
      if not dim2d:
          ax  = fig.add_subplot(rows,cols,count,projection='3d')
          im1 = ax.scatter( sorteddict['xfield'][:topN] , sorteddict['yfield'][:topN], sorteddict['zfield'][:topN],c=sorteddict[cmap_field][:topN] , cmap=plt.cm.RdPu_r,vmin=vmin, vmax=vmax, alpha=1.0, edgecolors='w',lw=0,s=25,marker=markers[i])
          if cluster:
            sorteddict_mod={}
            for ckey in sorteddict:
              sorteddict_mod[ckey]={}
              sorteddict_mod[ckey]['vals'] = sorteddict[ckey][:topN]
            if topN>15:
              from ClusterPoints import get_clusterpoints
              centroid_clusters, counts_cluster,_,labels,dbscan_clusters = get_clusterpoints(sorteddict_mod,k_means=False)
              add_cluster_centroids_to_axes(sorteddict_mod,ax,annotate=True,n_clusters=3,nodiamonds=True)
          if not keys is None:
            setup_axes(ax,key=keys[i],ticksize=12,labelsize=10,view={'elev':17, 'azim':-37},view_abs=True,key_fontsize=15)
          else:
            setup_keys(ax,ticksize=15)
          label = '<{}'.format(topN)
          delta_ticks['substrate_ca_no_super_rmsd']=0.5
          limits , ticks, limits_r, ticks_r = get_axes_ticks()
          ax.set_yticks(ticks_r["yfield"])
          ax.set_xticks(ticks_r['xfield'])
          ax.set_zticks(ticks['zfield'][::2])
          if info['xfield']=='substrate_ca_no_super_rmsd':
            print('setting new limits')
            ax.set_xticks(ticks['xfield'])
            ax.set(xlim = [2.0,0.0] , ylim =  [6.5,2.5] ,zlim = limits['zfield'])
            ax.text(limits['xfield'][0]+0.5,6.5-0.3,limits['zfield'][1]-0.5,label,fontsize=14)
          ax.xaxis.set_rotate_label(True)
          ax.yaxis.set_rotate_label(True)
      count+=1
  plt.tight_layout()
  if not outfile is None:
      plt.savefig(outfile,transparent=True,dpi=dpi[runtype])
  if show:
    plt.show()
  plt.close()
コード例 #4
0
def slice_and_cluster(sorteddict,thr,k_means=False,clus2d=False):
    
      topN = get_slice(sorteddict,thr)
      print(thr,topN)
      sorteddict_mod={}
      
      for ckey in sorteddict:
        print(ckey)
        sorteddict_mod[ckey]={}
        sorteddict_mod[ckey]['vals'] = sorteddict[ckey][:topN] #must do because of how i hav it setup :( NH
      if topN>15:
        from ClusterPoints import get_clusterpoints
        if k_means:
          #not tested for 2d option
          centroids , sizedict, sizedict_normalized, labels, distances= get_clusterpoints(sorteddict_mod,n_clusters=3,distances=True,k_means=k_means)
          return sort_clusters_by_field(sorteddict,centroids , sizedict, sizedict_normalized, labels, distances=distances)
        else:
          #listfromdf = np.array([ combined_df[labels_df[info['xfield']]] , combined_df[labels_df[info['yfield']]], combined_df[labels_df[info['zfield']]] ])
          #print(listfromdf.shape)
          centroids , sizedict, sizedict_normalized,labels,n_clusters,core_samples_ = get_clusterpoints(sorteddict_mod,k_means=k_means,core_samples=True)
          return sort_clusters_by_field(sorteddict_mod,centroids , sizedict, sizedict_normalized, labels, core_samples=core_samples_,sortorder=['interaction_energy'])
      else:
        return None
コード例 #5
0
def plot3d_slice_and_compare_n(collection,keys=None,n=3,thresholds=None,outfile=None,show=False,cluster=False,size=None,color_field='cfield',cmap_field='cfield',dim3d=True,dim2d=False,**kwargs):
    figsize = (12,4*len(collection))
    if not size is None:
      figsize=size
    fig = plt.figure(figsize=figsize)
    markers = ['o', 'o','o']
    print("keys",keys)
    
    if thresholds is None:
      thresholds=[-32,-30,-27]
   
    #sort threshold
    thresholds.sort(reverse=True) #least negative to most negative 
    count=1
    cols = len(thresholds)
    rows = len(collection)
    for i,org_dictdata in enumerate(collection):
      
      sorteddict = sortdict_by_field(org_dictdata)
      for j,thr in enumerate(thresholds):
      
        topN = get_slice(sorteddict,thr)
        print(thr,topN)
        vmax=-10
        vmin=-35
        if cmap_field=='z2field':
          vmax=3.0
          vmin=0.4
        if not dim2d:
          ax  = fig.add_subplot(rows,cols,count,projection='3d')
          im1 = ax.scatter( sorteddict['xfield'][:topN] , sorteddict['yfield'][:topN], sorteddict['zfield'][:topN],c=sorteddict[cmap_field][:topN] , cmap=plt.cm.RdPu_r,vmin=vmin, vmax=vmax, alpha=1.0, edgecolors='w',lw=0,s=25,marker=markers[i])
          if cluster:
            sorteddict_mod={}
            for ckey in sorteddict:
              sorteddict_mod[ckey]={}
              sorteddict_mod[ckey]['vals'] = sorteddict[ckey][:topN] #must do because of how i hav it setup :( NH
            if topN>15:
              from ClusterPoints import get_clusterpoints
              centroid_clusters, counts_cluster,_,labels,dbscan_clusters = get_clusterpoints(sorteddict_mod,k_means=False)
              print('DBSCAN', dbscan_clusters, counts_cluster,centroid_clusters)
              add_cluster_centroids_to_axes(sorteddict_mod,ax,annotate=True,n_clusters=3,nodiamonds=True) #max(dbscan_clusters-1,1)
              set_colors = plt.cm.rainbow(np.linspace(0,1,dbscan_clusters))
              clusters = list(set(labels))
              point_colors={}
              for ik,key in enumerate(clusters):               
                  point_colors[key] = set_colors[ik]
              colors = [point_colors[t] for t in labels]
              for ic,col in enumerate(colors):
                if labels[ic]==-1:
                  colors[ic]='black'
              print(len(sorteddict['xfield'][:topN]),len(colors))
              #im1 = ax.scatter( sorteddict['xfield'][:topN] , sorteddict['yfield'][:topN], sorteddict['zfield'][:topN],c=colors, alpha=1.0, edgecolors='w',lw=0,s=30,marker='o')
          if not keys is None:
            setup_axes(ax,key=keys[i],ticksize=12,labelsize=10,view={'elev':17, 'azim':-37},view_abs=True,key_fontsize=15)
          else:
            setup_keys(ax,ticksize=15)
          label = '<{}'.format(thr)
          delta_ticks['substrate_ca_no_super_rmsd']=0.5
          limits , ticks, limits_r, ticks_r = get_axes_ticks()
          ax.set_yticks(ticks_r["yfield"])
          ax.set_xticks(ticks_r['xfield'])
          ax.set_zticks(ticks['zfield'][::2])
          if info['xfield']=='substrate_ca_no_super_rmsd':
            print('setting new limits')
            ax.set_xticks(ticks['xfield'])
            ax.set(xlim = [2.0,0.0] , ylim =  [6.5,2.5] ,zlim = limits['zfield']) 
            ax.text(limits['xfield'][0]+0.5,6.5-0.3,limits['zfield'][1]-0.5,label,fontsize=14)
          ax.xaxis.set_rotate_label(True)
          ax.yaxis.set_rotate_label(True)
        if dim2d:
          ax  = fig.add_subplot(rows,cols,count)
          vmin=-40
          vmax=-20
          im1 = ax.scatter( sorteddict['yfield'][:topN], sorteddict['zfield'][:topN],c=sorteddict[cmap_field][:topN] , cmap=plt.cm.RdPu_r,vmin=vmin, vmax=vmax, alpha=1.0, edgecolors='w',lw=0,s=25,marker=markers[i])
          if cluster:
            sorteddict_mod={}
            for ckey in sorteddict:
              sorteddict_mod[ckey]={}
              sorteddict_mod[ckey] = sorteddict[ckey][:topN] #must do because of how i hav it setup :( NH
            if topN >15:
              add_cluster_centroids_to_axes_from_list([sorteddict_mod['yfield'],sorteddict['zfield']],ax,annotate=True,n_clusters=3,nodiamonds=True)
          label = '<{}'.format(thr)
          limits , ticks, limits_r, ticks_r = get_axes_ticks()
          ax.set_yticks(ticks["zfield"][::2])
          ax.set_xticks(ticks['yfield'][::2])
          ax.set(xlim =  limits['yfield'] ,ylim = limits['zfield'])
          ax.text(limits['yfield'][1]-1.5,limits['zfield'][1]-0.5,label,fontsize=20)
          ax.text(limits['yfield'][0]+0.1,limits['zfield'][1]-0.5,keys[i],fontsize=20)
        count+=1
        
    plt.tight_layout()
    if not outfile is None:
      plt.savefig(outfile,transparent=True,dpi=dpi[runtype])
      if show:
        plt.show()
    else:
      plt.show()