Source code for simdeep.plot_utils

from sklearn.decomposition import PCA

from colour import Color
import numpy as np

import matplotlib
matplotlib.use('Agg')

import seaborn as sns

import pylab as plt
import mpld3

sns.set(color_codes=True)


CSS = """
table
{
  border-collapse: collapse;
}
th
{
  color: #ffffff;
  background-color: #000000;
}
td
{
  background-color: #cccccc;
}
table, th, td
{
  font-family:Arial, Helvetica, sans-serif;
  border: 1px solid black;
  text-align: right;
}
"""


[docs]class SampleHTML(): def __init__(self, name, label, proba, survival): """ """ try: nbdays, isdead = survival except Exception: nbdays, isdead = 'NaN', 'NaN' self.html = """ <table border="1" class="dataframe"> <thead> <tr style="text-align: right;"> <th></th> <th>{0}</th> </tr> </thead> <tbody> <tr> <th>Assigned class</th> <td>{1}</td> </tr> <tr> <th>class probability</th> <td>{2}</td> </tr> <tr> <th>nb days followed</th> <td>{3}</td> </tr> <tr> <th>Event</th> <td>{4}</td> </tr> </tbody> </table> """.format(name, label, proba, nbdays, isdead)
[docs]def make_color_dict_from_r(labels): """ """ labels_set = set(labels) cin = Color('red') cout = Color('#56f442') gradient = list(map(lambda x:x.get_rgb(), cin.range_to(cout, len(labels_set)))) len_color = len(gradient) if len_color > 2: gradient[1] = Color('green').get_rgb() gradient[2] = Color('blue').get_rgb() if len_color > 3: gradient[3] = Color('cyan').get_rgb() if len_color > 4: gradient[4] = Color('magenta').get_rgb() if len_color > 5: gradient[5] = Color('yellow').get_rgb() return dict(zip(labels_set, gradient))
[docs]def make_color_list(id_list): """ According to an id_list define a color gradient return {id:color} """ try: assert([Color(idc) for idc in id_list]) except Exception: pass else: return id_list color_dict = make_color_dict(id_list) return np.array([color_dict[label] for label in id_list])
[docs]def make_color_dict(id_list): """ According to an id_list define a color gradient return {id:color} """ id_list = list(set(id_list)) first_c = Color("red") middle_c = Color("green") m_length1 = len(id_list) gradient = list(first_c.range_to(middle_c, m_length1)) color_dict = {id_list[i]: gradient[i].get_hex_l() for i in range(len(id_list))} return color_dict
[docs]def plot_kernel_plots( test_labels, test_labels_proba, labels, activities, activities_test, dataset, path_html, metadata_frame=None): """ perform a html kernel plot """ fig, ax = plt.subplots(figsize=(7, 7)) color_dict = make_color_dict_from_r(labels) labels_c_test = np.array([color_dict[label] for label in test_labels]) decomp = PCA(n_components=2) X, Y = decomp.fit_transform(activities).T X_test, Y_test = decomp.transform(activities_test).T for label in set(labels): ax.scatter( X_test[test_labels == label], Y_test[test_labels == label], s=40, # linewidths=2.0, alpha=1.0, # marker='square_cross', edgecolors='k', zorder=2, color=labels_c_test[test_labels == label], label='test cluster nb {0}'.format(label)) sns.kdeplot( X[labels == label], Y[labels == label], shade=True, cmap=sns.dark_palette(color_dict[label], as_cmap=True), color=color_dict[label], ax=ax, label='cluster nb {0}'.format(label), zorder=1, thresh=False, alpha=0.7 ) survival_test = np.nan_to_num(dataset.survival_test) labels = [SampleHTML( name=dataset.sample_ids_test[i], label=test_labels[i], survival=np.asarray(survival_test[i])[0], proba=test_labels_proba[i][test_labels[i]]).html for i in range(len(test_labels))] scatter = ax.plot(X_test, Y_test, 'o', color='b', mec='k', ms=15, mew=1, alpha=0.0, zorder=3,)[0] tooltip = mpld3.plugins.PointHTMLTooltip( scatter, labels, voffset=10, hoffset=10, css=CSS) mpld3.plugins.connect(fig, tooltip) mpld3.save_html(fig, path_html) print('kde plot saved at:{0}'.format(path_html))