def plot_and_save_expanded_data_for_samples(gate_expander, model, data_input, sample_idxs_to_plot): for sample_idx in sample_idxs_to_plot: plotter = DataAndGatesPlotterDepthOne(model, np.concatenate(data_input.x_tr)) plotter.plot_single_sample_with_gate(data_input.x_tr[sample_idx], data_input.idxs_tr[sample_idx], data_input.y_tr[sample_idx], plt.gca(), include_diagnostics=False) expanded_data = gate_expander.expanded_data_per_sample[sample_idx] if not (expanded_data.shape[0] == 0): print(expanded_data.shape) plotter.plot_single_sample_with_gate( expanded_data, data_input.idxs_tr[sample_idx], data_input.y_tr[sample_idx], plt.gca(), color='r', include_diagnostics=False) clusters = gate_expander.clusterers_per_sample[ sample_idx].cluster_centers_ plt.gca().scatter(clusters[:, 0], clusters[:, 1], color='b', s=2) plt.savefig('expanded_sample%d.png' % data_input.idxs_tr[sample_idx]) plt.clf()
def make_umap_plots_per_sample(model, data_input, sample_idxs_to_plot, plots_per_row=5, figlen=7, savename='plots_per_sample.png', background_data_to_plot=None, color='b', expanded_data_per_sample=None, sample_names_to_true_features=None, BALL=False): if len(sample_idxs_to_plot) == 0: print('idxs are empty!') return None vals_to_delete = [] for i, idx in enumerate(sample_idxs_to_plot): if not (idx in data_input.sample_names_all): print('Sample %d not in training data' %idx) vals_to_delete.append(idx) for val in vals_to_delete: del sample_idxs_to_plot[sample_idxs_to_plot.index(val)] plotter = DataAndGatesPlotterDepthOne(model, []) idxs_in_data_input = [[1, data_input.idxs_tr.index(idx)] if idx in data_input.idxs_tr else [0, data_input.idxs_te.index(idx)] for idx in sample_idxs_to_plot] n_samples_to_plot = len(sample_idxs_to_plot) evenly_divides = not(n_samples_to_plot % plots_per_row) n_rows = n_samples_to_plot//plots_per_row if not(evenly_divides): n_rows += 1 print(n_rows, plots_per_row) fig, axes = plt.subplots(n_rows, plots_per_row, figsize=((figlen) * plots_per_row, (figlen) * n_rows),sharex=True, sharey=True) #fig.suptitle('UMAP Embedding and Learned Gates per Sample') axes = [axes] if len(axes.shape) == 1 else axes if not (background_data_to_plot is None): for i in range(n_rows): for j in range(plots_per_row): axes[i][j].scatter( background_data_to_plot[:, 0], background_data_to_plot[:, 1], c='lightgrey', s=1/100, alpha=.5 ) axes[0][0].set_xlim(0, 1) axes[0][0].set_ylim(0, 1) fig.tight_layout(pad=1.3) row_start_idx = 0 for i, row in enumerate(range(n_rows)): sample_row_idxs = sample_idxs_to_plot[row_start_idx: row_start_idx + plots_per_row] for j, sample_idx in enumerate(sample_row_idxs): cur_axis = axes[i][j] data_input_matching_idx = idxs_in_data_input[row_start_idx + j][1] if idxs_in_data_input[j][0]: sample = data_input.x_tr[data_input_matching_idx] label = data_input.y_tr[data_input_matching_idx] else: sample = data_input.x_te[data_input_matching_idx] label = data_input.y_te[data_input_matching_idx] name = sample_idxs_to_plot[row_start_idx + j] true_feature = None if sample_names_to_true_features: true_feature = sample_names_to_true_features[name] if not BALL: plotter.plot_single_sample_with_gate( sample, name, label, cur_axis, size=1, color='b', true_feature=true_feature ) else: plotter.plot_single_sample_with_gate( sample, name, label, cur_axis, size=1, color='b', true_feature=true_feature, BALL=True ) if not (expanded_data_per_sample is None): expanded_data = expanded_data_per_sample[data_input_matching_idx] cur_axis.scatter(expanded_data[:, 0], expanded_data[:, 1], s=1, color='r') row_start_idx += plots_per_row plt.savefig(savename)