Source code for abpytools.analysis.distance
from ..core.chain_collection import ChainCollection
import seaborn as sns
from .analysis_helper_functions import switch_interactive_mode
from matplotlib import pyplot as plt
from scipy.cluster.hierarchy import linkage, dendrogram
import scipy.spatial.distance as ssd
from ..utils.python_config import PythonConfig
[docs]class DistancePlot(ChainCollection):
def __init__(self, antibody_objects=None, path=None):
super().__init__(antibody_objects=antibody_objects, path=path)
[docs] def plot_heatmap(self, feature='chou', distance_metric='cosine_distance', save=False, ax=None, labels=None,
multiprocessing=False, file_name='./heatmap.png', **kwargs):
data = self.distance_matrix(feature=feature, metric=distance_metric, multiprocessing=multiprocessing)
switch_interactive_mode(save=save)
if ax is None:
f, ax = plt.subplots(1, 1, figsize=(8, 6))
ax.set(xlabel='Antibody', ylabel='Antibody', title=distance_metric,
xticks=range(self.n_ab), yticks=range(self.n_ab))
if labels is None:
labels = self.names
sns.heatmap(data, ax=ax, **kwargs)
ax.set_yticklabels(labels, rotation='horizontal')
ax.set_xticklabels(labels, rotation=60)
ipython_config = PythonConfig()
if ipython_config.ipython_info == 'notebook' and save is False:
plt.plot()
else:
plt.savefig(file_name)
[docs] def plot_dendrogram(self, feature='chou', distance_metric='cosine_distance', save=False, ax=None, labels=None,
multiprocessing=False, **kwargs):
switch_interactive_mode(save=save)
data = self.distance_matrix(feature=feature, metric=distance_metric, multiprocessing=multiprocessing)
# convert the redundant n*n square matrix form into a condensed nC2 array
data = ssd.squareform(data)
clustered_data = linkage(y=data)
if ax is None:
f, ax = plt.subplots(1, 1, figsize=(8, 6))
ax.set(xlabel='Antibody', ylabel='Distance', title=distance_metric)
if labels is None:
labels = self.names
# plot dendrogram
_ = dendrogram(clustered_data, labels=labels, ax=ax, **kwargs)
ipython_config = PythonConfig()
if ipython_config.ipython_info == 'notebook' and save is False:
plt.plot()
else:
plt.savefig(file_name)