| | """ Usage: |
| | pr_plot --in=DIR_NAME --out=OUTPUT_FILENAME |
| | |
| | Options: |
| | --in=DIR_NAME Folder in which to search for *.dat files, all of which should be in a P/R column format (outputs from benchmark.py) |
| | --out=OUTPUT_FILENAME Output filename, filetype will determine the format. Possible formats: pdf, pgf, png |
| | |
| | |
| | """ |
| |
|
| | import os |
| | import ntpath |
| | import numpy as np |
| | from glob import glob |
| | from docopt import docopt |
| | import matplotlib.pyplot as plt |
| | import logging |
| | import ipdb |
| | logging.basicConfig(level = logging.INFO) |
| |
|
| | plt.rcParams.update({'font.size': 14}) |
| |
|
| | def trend_name(path): |
| | ''' return a system trend name from dat file path ''' |
| | head, tail = ntpath.split(path) |
| | ret = tail or ntpath.basename(head) |
| | return ret.split('.')[0] |
| |
|
| | def get_pr(path): |
| | ''' get PR curve from file ''' |
| | with open(path) as fin: |
| | |
| | fin.readline() |
| | prc = list(zip(*[[float(x) for x in line.strip().split('\t')] for line in fin])) |
| | p = prc[0] |
| | r = prc[1] |
| | return p, r |
| | |
| | if __name__ == '__main__': |
| | args = docopt(__doc__) |
| | input_folder = args['--in'] |
| | output_file = args['--out'] |
| | |
| | |
| | files = glob(os.path.join(input_folder, '*.dat')) |
| | for _file in files: |
| | p, r = get_pr(_file) |
| | name = trend_name(_file) |
| | plt.plot(r, p, label = name) |
| |
|
| | |
| | logging.info("Plotting P/R graph to {}".format(output_file)) |
| | plt.ylim([0.0, 1.05]) |
| | plt.xlim([0.0, 0.8]) |
| | plt.xlabel('Recall') |
| | plt.ylabel('Precision') |
| | plt.legend(loc="lower right") |
| | plt.savefig(output_file) |
| |
|