def plot_pr_curve_mmr(Metric, fin_list_graphs, out_comp_nm):

    n_divs = 10
    scores_list = [float(pred_complex[1]) for pred_complex in fin_list_graphs]
    #print(scores_list)
    min_score = min(scores_list)
    interval_len = (max(scores_list) - min_score) / float(n_divs)
    thresholds = [min_score + i * interval_len for i in range(n_divs)]

    precs = []
    recalls = []
    for thres in thresholds:
        # list of indices with scores greater than the threshold
        col_inds = [j for j, score in enumerate(scores_list) if score >= thres]
        prec_MMR, recall_MMR, f1_MMR, max_matching_edges = f1_mmr(
            Metric[:, col_inds])

        precs.append(prec_MMR)
        recalls.append(recall_MMR)

    fig = plt_figure()
    plt_plot(recalls, precs, '.-')
    plt_ylabel("Precision")
    plt_xlabel("Recall")
    plt_title("PR curve for MMR measure")
    plt_savefig(out_comp_nm + '_pr_mmr.png')
    plt_close(fig)
def plot_size_dists(complex_graphs, test_complex_graphs, out_comp_nm):
    train_sizes = [len(comp) for comp in complex_graphs]
    test_sizes = [len(comp) for comp in test_complex_graphs]
    try:
        fig = plt_figure()
        sns_distplot(train_sizes, hist=False, label="train")
        sns_distplot(test_sizes, hist=False, label="test")
        plt_savefig(out_comp_nm + '_size_dists_train_test.png')
        plt_close(fig)
    except:
        print("Cannot plot")
Beispiel #3
0
    def save_figs(self, prefix):
        for name, plotter in self.plotters.items():
            savename = prefix + '_' + name + '.pdf'
            savepath = self.fig_path / savename
            fig = plotter.get_figure()
            fig.savefig(str(savepath), format='pdf')

            if self.__saved_figures.get(name) is None:
                self.__saved_figures[name] = [str(savepath)]
            else:
                self.__saved_figures[name] += [str(savepath)]

            plt_close('all')
def plot_f1_scores(best_matches, out_comp_nm, suffix, prefix):
    # plot histogram of F1 scores
    max_f1_scores = [match[2] for match in best_matches]

    avged_f1_score = sum(max_f1_scores) / float(len(max_f1_scores))

    f1_score_counts = Counter()

    for score in max_f1_scores:
        f1_score_counts[score] += 1

    n_perfect_matches = 0
    if 1 in f1_score_counts:
        n_perfect_matches = f1_score_counts[1]

    n_no_matches = 0
    if 0 in f1_score_counts:
        n_no_matches = f1_score_counts[0]

    if len(set(max_f1_scores)) > 1:
        fig = plt_figure(figsize=(12, 10))
        plt_rcParams["font.family"] = "Times New Roman"
        plt_rcParams["font.size"] = 16
        sns_distplot(max_f1_scores, hist=True, kde=False)
        plt_xlabel("F1 score")
        plt_ylabel('Frequency')
        plt_title(prefix + "F1 score distribution")
        plt_savefig(out_comp_nm + suffix + '_f1_scores_histogram.eps',
                    dpi=350,
                    format='eps')
        plt_savefig(out_comp_nm + suffix + '_f1_scores_histogram.tiff',
                    dpi=350,
                    format='tiff')
        plt_savefig(out_comp_nm + suffix + '_f1_scores_histogram.jpg',
                    dpi=350,
                    format='jpg')

        plt_close(fig)

    with open(out_comp_nm + '_metrics.out', "a") as fid:
        print(prefix, file=fid)
        print("Averaged F1 score = %.3f" % avged_f1_score, file=fid)
        print("No. of perfectly recalled matches = %d" % n_perfect_matches,
              file=fid)
        print("No. of matches not recalled at all = %d" % n_no_matches,
              file=fid)
    return avged_f1_score
    def __init__(self, parent=None):
        img_size = 35 # square dimension of output image
        data = np.mgrid[0:255:255j, 0:255][0]

        removed_cmaps = ['Accent', 'Paired', 'Dark', 'Pastel', 'tab', 'Set', 'flag', '_r', 'gray', 'Greys']
        kept_cmaps = [i for i in mpl_cmaps() if not any([(j in i) for j in removed_cmaps])]

        root = QFileInfo(__file__).absolutePath()
        gradient_icons = [i.split('.')[0] for i in os.listdir(root+"/../../styles/assets/icons/gradients/")]

        for cmap_name in kept_cmaps:
            if cmap_name not in gradient_icons:
                cmap = cm.get_cmap(cmap_name)
                sizes = np.shape(data)
                fig = plt_figure(figsize=(1,1))
                #fig.set_size_inches(1. * sizes[0] / sizes[1], 1, forward=False)
                ax = plt_Axes(fig, [0.,0.,1.,1.])
                ax.set_axis_off()
                fig.add_axes(ax)
                ax.imshow(data[::-1], cmap)
                plt_savefig("../../styles/assets/icons/gradients/{}.png".format(cmap_name), dpi=img_size)
                plt_close()
def plot_size_dists(known_complex_nodes_list, fin_list_graphs, sizes_orig,
                    out_comp_nm):
    sizes_known = [len(comp) for comp in known_complex_nodes_list]
    # Size distributions
    sizes_new = [len(comp[0]) for comp in fin_list_graphs]
    fig = plt_figure(figsize=(8, 6), dpi=96)
    plt_rc('font', size=14)

    if len(set(sizes_known)) <= 1:
        return
    sns_distplot(sizes_known, hist=False, label="known")
    if len(set(sizes_orig)) <= 1:
        return
    sns_distplot(sizes_orig, hist=False, label="predicted")
    if len(set(sizes_new)) <= 1:
        return
    sns_distplot(sizes_new, hist=False, label="predicted_known_prots")
    plt_ylabel("Probability density")
    plt_xlabel("Complex Size (number of proteins)")
    plt_title("Complex size distributions")
    plt_savefig(out_comp_nm + '_size_dists_known_pred.png')
    plt_close(fig)
o_f = args.out_file_suffix
df = pd.DataFrame(all_sets)
df = df.set_index(par)
df = df.sort_index()
df.to_csv('./' + args.direct + '/' + par + o_f + '_metrics.csv')

if args.direct == 'humap':
    df = df.drop('2stage clustering')
df[list(df.columns)] = df[list(df.columns)].astype(float)
print(df.idxmax())
#print(df)
fig = plt_figure()
df.plot(subplots=True, style='-.', layout=(7, 2), figsize=(15, 15))
plt_savefig('./' + args.direct + '/' + par + o_f + '_metrics.png')
plt_close(fig)

# Plot PR curves for MMR and Qi et al based metrics
lists = sorted(zip(*[recalls_MMR, precisions_MMR]))
recalls_MMR, precisions_MMR = list(zip(*lists))

lists = sorted(zip(*[recalls_qi, precisions_qi]))
recalls_qi, precisions_qi = list(zip(*lists))
fig = plt_figure()
plt_plot(recalls_MMR, precisions_MMR, 'k.-')
plt_plot(recalls_qi, precisions_qi, 'b.-')
plt_xlabel('Recall')
plt_ylabel('Precision')
plt_title('PR curve over ' + par)
plt_legend(['MMR', 'Qi'])
plt_savefig('./' + args.direct + '/pr_' + par + o_f + '_MMR_qi.png')
def r6_dnn_image_display(target_dirname, dnn_image_obj=None, show_fig=False):
    LOGGER.info('{}: r6: Turning upsampled envelope into image...'.format(target_dirname))
    if dnn_image_obj is None:
        dnn_image_obj = loadmat(os_path_join(target_dirname, DNN_IMAGE_FNAME))

    beam_position_x_up = dnn_image_obj['beam_position_x_up']
    depth = dnn_image_obj['depth']
    envUp_dB = dnn_image_obj['envUp_dB']
    env_up = dnn_image_obj['envUp']

    LOGGER.debug('{}: r6: Finished loading vars'.format(target_dirname))
    x = np_squeeze(beam_position_x_up) # beam_position_x_up
    y = np_squeeze(depth) # depth

    LOGGER.debug('{}: r6: Finished squeezing x, y'.format(target_dirname))
    fig, ax = plt_subplots()
    LOGGER.debug('{}: r6: Finished plt.figure'.format(target_dirname))
    image = ax.imshow(envUp_dB, vmin=-60, vmax=0, cmap='gray', aspect='auto', extent=[x[0]*1000, x[-1]*1000, y[-1]*1000, y[0]*1000])
    ax.set_aspect('equal')
    LOGGER.debug('{}: r6: Finished plt.imshow'.format(target_dirname))
    fig.colorbar(image)
    LOGGER.debug('{}: r6: Finished plt.colorbar'.format(target_dirname))
    # plt_xlabel('lateral (mm)', fontsize=FONT_SIZE)
    ax.set_xlabel('lateral (mm)', fontsize=FONT_SIZE)
    # plt_ylabel('axial (mm)', fontsize=FONT_SIZE)
    ax.set_ylabel('axial (mm)', fontsize=FONT_SIZE)
    LOGGER.debug('{}: r6: Finished plt.xlabel/ylabel'.format(target_dirname))

    # if show_fig is True:
    # plt_show(block=False)

    # Save image to file
    dnn_image_path = os_path_join(target_dirname, DNN_IMAGE_SAVE_FNAME)
    fig.savefig(dnn_image_path)
    plt_close(fig)

    LOGGER.debug('{}: r6: Finished saving figure'.format(target_dirname))
    # scan_battery_dirname = os_path_dirname(target_dirname)
    # process_scripts_dirpath = os_path_join(scan_battery_dirname, PROCESS_SCRIPTS_DIRNAME)

    # circle_radius = load_single_value(process_scripts_dirpath, CIRCLE_RADIUS_FNAME)
    # circle_coords_x = load_single_value(process_scripts_dirpath, CIRCLE_COORDS_X_FNAME)
    # circle_coords_y = load_single_value(process_scripts_dirpath, CIRCLE_COORDS_Y_FNAME)

    # xx, yy = np_meshgrid(x, y)
    # mask_in = get_circular_mask(xx, yy, (circle_coords_x, circle_coords_y), circle_radius)
    #
    # # mask_in
    # # create rectangular region outside lesion
    # box_xmin_right = load_single_value(process_scripts_dirpath, BOX_XMIN_RIGHT_FNAME)
    # box_xmax_right = load_single_value(process_scripts_dirpath, BOX_XMAX_RIGHT_FNAME)
    #
    # box_xmin_left = load_single_value(process_scripts_dirpath, BOX_XMIN_LEFT_FNAME)
    # box_xmax_left = load_single_value(process_scripts_dirpath, BOX_XMAX_LEFT_FNAME)
    #
    # # Box shares y position and height with circle (diameter)
    # ymin = circle_coords_y - circle_radius
    # ymax = circle_coords_y + circle_radius
    # mask_out_left = (xx >= box_xmin_left) * (xx <= box_xmax_left) * (yy >= ymin) * (yy <= ymax)
    # mask_out_right = get_rectangle_mask(xx, yy, box_xmin_right, box_xmax_right, ymin, ymax)
    # mask_out = mask_out_left | mask_out_right

    # Display circle and boxes
    # with_circle = envUp_dB.copy()
    #
    #
    # with_circle[mask_out_left+mask_in+mask_out_right] = 0
    #
    # plt.figure(figsize=(12,16))
    # plt.imshow(with_circle, vmin=-60, vmax=0, cmap='gray', aspect='auto', extent = [beam_position_x_up[0]*1000,beam_position_x_up[-1]*1000,depth[-1]*1000, depth[0]*1000])
    # plt.colorbar()
    # FONT_SIZE = 20
    # plt.xlabel('lateral (mm)', fontsize=FONT_SIZE)
    # plt.ylabel('axial (mm)', fontsize=FONT_SIZE)

    # plt.show()

    # Calculate image statistics
    # print('r6: env_up.shape =', env_up.shape)
    mask_in, mask_out = get_masks(target_dirname)
    LOGGER.debug('{}: r6: Finished loading masks'.format(target_dirname))
    # print('r6: mask_in.shape={}, mask_out.shape={}'.format(mask_in.shape, mask_out.shape))
    env_up_inside_lesion = env_up[mask_in]
    mean_in = env_up_inside_lesion.mean()
    var_in = env_up_inside_lesion.var(ddof=1) # ddof is important cuz Matlab

    env_up_outside_lesion = env_up[mask_out]
    mean_out = env_up_outside_lesion.mean()
    var_out = env_up_outside_lesion.var(ddof=1) # ddof is important cuz Matlab

    LOGGER.debug('{}: r6: Finished mean and var calculations'.format(target_dirname))
    CR = -20 * math_log10(mean_in / mean_out)
    CNR = 20 * math_log10(abs(mean_in - mean_out)/math_sqrt(var_in + var_out))
    SNR = mean_out / math_sqrt(var_out)

    LOGGER.debug('{}: r6: Finished speckle stats calculations'.format(target_dirname))
    # Save image statistics to file
    speckle_stats = [CR, CNR, SNR, mean_in, mean_out, var_in, var_out]
    speckle_stats_path = os_path_join(target_dirname, SPECKLE_STATS_FNAME)

    with open(speckle_stats_path, 'w') as f:
        f.write("\n".join([str(item) for item in speckle_stats]))

    LOGGER.debug('{}: r6: Finished saving .txt'.format(target_dirname))
    # Also save image statistics json as a redundant (but more readable) method
    speckle_stats_dict = {
        'CR': CR,
        'CNR': CNR,
        'SNR': SNR,
        'mean_inside_lesion': mean_in,
        'variance_inside_lesion': var_in,
        'mean_outside_lesion': mean_out,
        'variance_outside_lesion': var_out,
    }

    speckle_stats_dict_path = os_path_join(target_dirname, SPECKLE_STATS_DICT_FNAME)

    with open(speckle_stats_dict_path, 'w') as f:
        json_dump(speckle_stats_dict, f, indent=4)
    LOGGER.debug('{}: r6: Finished saving .json'.format(target_dirname))

    LOGGER.info('{}: r6 Done'.format(target_dirname))