reducer = UMAP(n_neighbors=30, n_components=2, metric="correlation", n_epochs=None, learning_rate=1.0,
min_dist=0.3, spread=1.0, set_op_mix_ratio=1.0, local_connectivity=1, repulsion_strength=1,
negative_sample_rate=5, a=None, b=None, random_state=1234, metric_kwds=None,
angular_rp_forest=False, verbose=True)
# raw
raw_pca = np.load(save_dir + f'input_matrix.npy')
sp_embedding = reducer.fit_transform(raw_pca)
if save:
with open(save_dir + f'sp_embeddings_raw.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerows(sp_embedding)
n_spots = result.shape[0]
size = 10000 / n_spots
order = np.arange(n_spots)[::-1]
colors_for_slices = [[0.2298057, 0.29871797, 0.75368315],
[0.70567316, 0.01555616, 0.15023281],
[0.2298057, 0.70567316, 0.15023281],]
slice_cmap = {label_list[i]: colors_for_slices[i] for i in range(len(label_list))}
colors = list(result.obs['slice_name'].astype('str').map(slice_cmap))[::-1]
plt.figure(figsize=(5, 5))
plt.scatter(sp_embedding[order, 0], sp_embedding[order, 1], s=size, c=colors)
plt.tick_params(axis='both', bottom=False, top=False, left=False, right=False,
labelleft=False, labelbottom=False, grid_alpha=0)
legend_handles = [
Line2D([0], [0], marker='o', color='w', markersize=8, markerfacecolor=slice_cmap[label_list[i]], label=label_list[i])
for i in range(len(label_list))
]
plt.legend(handles=legend_handles, fontsize=8, title='Slices', title_fontsize=10,
loc='upper left')
plt.title(f'Raw', fontsize=16)
if save:
save_path = save_dir + f"raw_slices_umap.{file_format}"
plt.savefig(save_path)
# integrated
sp_embedding = reducer.fit_transform(result.obsm['INSTINCT_latent'])
if save:
with open(save_dir + f'sp_embeddings_integrated.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerows(sp_embedding)
n_spots = result.shape[0]
size = 10000 / n_spots
order = np.arange(n_spots)[::-1]
colors_for_slices = [[0.2298057, 0.29871797, 0.75368315],
[0.70567316, 0.01555616, 0.15023281],
[0.2298057, 0.70567316, 0.15023281],]
slice_cmap = {label_list[i]: colors_for_slices[i] for i in range(len(label_list))}
colors = list(result.obs['slice_name'].astype('str').map(slice_cmap))[::-1]
plt.figure(figsize=(5, 5))
plt.scatter(sp_embedding[order, 0], sp_embedding[order, 1], s=size, c=colors)
plt.tick_params(axis='both', bottom=False, top=False, left=False, right=False,
labelleft=False, labelbottom=False, grid_alpha=0)
legend_handles = [
Line2D([0], [0], marker='o', color='w', markersize=8, markerfacecolor=slice_cmap[label_list[i]], label=label_list[i])
for i in range(len(label_list))
]
plt.legend(handles=legend_handles, fontsize=8, title='Slices', title_fontsize=10,
loc='lower left')
plt.title(f'Integrated', fontsize=16)
if save:
save_path = save_dir + f"integrated_slices_umap.{file_format}"
plt.savefig(save_path)
unique_labels = result.obs[method].unique()
print(len(unique_labels))
if method == 'louvain':
color_palette = ['gold', 'dodgerblue', 'orange', 'deepskyblue',
'g', 'limegreen', 'gainsboro', 'y',
'darkorange', 'darkgray', 'saddlebrown', 'chocolate']
if len(unique_labels) > len(color_palette):
color_palette = sns.color_palette("tab20", n_colors=len(unique_labels))
elif method == 'leiden':
color_palette = ['orange', 'dodgerblue', 'wheat', 'deepskyblue', 'g',
'gold', 'crimson', 'limegreen', 'yellowgreen', 'lightcoral',
'fuchsia', 'sienna', 'lightgray', 'violet', 'hotpink',]
if len(unique_labels) > len(color_palette):
color_palette = sns.color_palette("tab20", n_colors=len(unique_labels))
color_list = [color_palette[i] for i in range(len(unique_labels))]
color_dict = {f'{i}': color_palette[i] for i in range(len(unique_labels))}
legend_elements = [Line2D([0], [0], marker='o', color='w', label=label, markerfacecolor=color, markersize=8)
for label, color in zip(list(range(len(unique_labels))), color_list)]
colors = list(result.obs[method].astype('str').map(color_dict))[::-1]
plt.figure(figsize=(5, 5))
plt.rc('axes', linewidth=1)
plt.scatter(sp_embedding[order, 0], sp_embedding[order, 1], s=size, c=colors)
plt.tick_params(axis='both', bottom=False, top=False, left=False, right=False,
labelleft=False, labelbottom=False, grid_alpha=0)
plt.title(f'Identified Clusters', fontsize=16)
plt.legend(handles=legend_elements, fontsize=8, title='Clusters', title_fontsize=10, bbox_to_anchor=(1, 1))
plt.gcf().subplots_adjust(left=0.05, top=None, bottom=None, right=0.85)
if save:
save_path = save_dir + f"{method}_identified_clusters_umap.{file_format}"
plt.savefig(save_path)
if len(cas_list) == 2:
fig, axs = plt.subplots(1, 2, figsize=(8, 4))
elif len(cas_list) == 3:
fig, axs = plt.subplots(1, 3, figsize=(12, 4))
fig.suptitle(f'Clustering Results', fontsize=16)
for i in range(len(cas_list)):
cluster_colors = list(cas_list[i].obs[method].astype('str').map(color_dict))
axs[i].scatter(cas_list[i].obsm['spatial'][:, 0], cas_list[i].obsm['spatial'][:, 1], linewidth=1, s=40,
marker=".", color=cluster_colors, alpha=0.9)
axs[i].invert_yaxis()
axs[i].set_title(f'{label_list[i]}', size=12)
axs[i].axis('off')
legend_elements = [Line2D([0], [0], marker='o', color='w', label=label, markerfacecolor=color, markersize=8)
for label, color in zip(list(range(len(unique_labels))), color_list)]
axs[len(cas_list)-1].legend(handles=legend_elements,
fontsize=8, title='Clusters', title_fontsize=10, bbox_to_anchor=(1, 1))
plt.gcf().subplots_adjust(left=0.05, top=0.8, bottom=0.05, right=0.90)
if save:
save_path = save_dir + f'{method}_clustering_results.{file_format}'
plt.savefig(save_path)