From cae52ce02891465bff398a7f2cad09727509ad57 Mon Sep 17 00:00:00 2001 From: = <francois.hamonic@gmail.com> Date: Wed, 30 Mar 2022 18:46:17 +0200 Subject: [PATCH] contraction benefits whiskers --- plot_scripts/contraction_benefits_variance.py | 70 +++++++++++++++++++ plot_scripts/contraction_benefits_whiskers.py | 53 ++++++++++++++ .../{pl_sizes_table.py => table_pl_sizes.py} | 0 3 files changed, 123 insertions(+) create mode 100755 plot_scripts/contraction_benefits_variance.py create mode 100755 plot_scripts/contraction_benefits_whiskers.py rename plot_scripts/{pl_sizes_table.py => table_pl_sizes.py} (100%) diff --git a/plot_scripts/contraction_benefits_variance.py b/plot_scripts/contraction_benefits_variance.py new file mode 100755 index 0000000..96bdd5a --- /dev/null +++ b/plot_scripts/contraction_benefits_variance.py @@ -0,0 +1,70 @@ +import matplotlib.pyplot as plt +import csv +import numpy as np +import statistics + +def readCSV(file_name, delimiter=' '): + file = csv.DictReader(open(file_name), delimiter=delimiter) + return list([row for row in file]) + +rows = readCSV('output/contraction_benefits.csv', ",") + + +def square(a): + return [x*x for x in a] + +def substract(a, b): + return [x-y for x,y in zip(a,b)] + +def divide(a, b): + return [x/y if y > 0 else 1 for x,y in zip(a,b)] + + +x_datas = np.array(range(0,105,5)) + +def get_datas(name, linstyle, maker_size, t): + return ((name, (linstyle,maker_size)), (x_datas, + np.array([statistics.variance([100*(1-float(row["nb_{}_contract".format(t)])/float(row["nb_{}".format(t)])) for row in rows if int(row["percent_arcs"]) == percent]) for percent in x_datas]) )) + +datas = [ + get_datas("constraints", "s-",8, "constraints"), + get_datas("variables", "o-",8, "vars"), + get_datas("non-zero entries", "P-",8, "elems") +] + +fig_size = plt.rcParams["figure.figsize"] +fig_size[0] = 10 +fig_size[1] = 5 +plt.rcParams["figure.figsize"] = fig_size + +plt.subplots_adjust(left=0.125, right=0.95, top=0.92, bottom=0.13) + +plt.rcParams.update({'font.size': 16}) + +xmin = min(x_datas) +xmax = max(x_datas) + +plt.xlim(xmin , xmax) + +ymin = 0 +ymax = 100 +yrange = ymax - ymin + +y_border_percent = 7.5 +y_bottom = ymin - y_border_percent * yrange / 100 +y_top = ymax + y_border_percent * yrange / 100 + +plt.ylim(y_bottom, y_top) + + +# plt.title("quebec-{}-{}-ECA value vs available budget.pdf".format(orig, median)) +plt.ylabel('percentage of elements\nremoved by the preprocessing', rotation=90, fontweight ='bold') +plt.xlabel("percentage of restored arcs", fontweight ='bold') + +for ((label,(linestyle,marker_size)),(xdatas,ydatas)) in datas: + plt.plot(xdatas, ydatas, linestyle, markersize=marker_size, label=label) + +legend = plt.legend(loc='lower right', shadow=True, fontsize='medium') + + +plt.savefig("output/contraction_benefits_variance.pdf", dpi=500) \ No newline at end of file diff --git a/plot_scripts/contraction_benefits_whiskers.py b/plot_scripts/contraction_benefits_whiskers.py new file mode 100755 index 0000000..aa1041f --- /dev/null +++ b/plot_scripts/contraction_benefits_whiskers.py @@ -0,0 +1,53 @@ +import matplotlib.pyplot as plt +import csv +import pylab + +def readCSV(file_name, delimiter=' '): + file = csv.DictReader(open(file_name), delimiter=delimiter) + return list([row for row in file]) + +rows = readCSV('output/contraction_benefits.csv', ",") + +x_datas = range(0,105,5) + +def get_datas(t, percent): + return [100*(1-float(row["nb_{}_contract".format(t)])/float(row["nb_{}".format(t)])) for row in rows if int(row["percent_arcs"]) == percent] + +datas = [ + # get_datas("constraints", p) + get_datas("vars", p) + # get_datas("elems", p) + for p in x_datas +] + +fig_size = plt.rcParams["figure.figsize"] +fig_size[0] = 10 +fig_size[1] = 5 +plt.rcParams["figure.figsize"] = fig_size + +plt.subplots_adjust(left=0.125, right=0.95, top=0.92, bottom=0.13) + +plt.rcParams.update({'font.size': 16}) + +ymin = 0 +ymax = 100 +yrange = ymax - ymin + +y_border_percent = 7.5 +y_bottom = ymin - y_border_percent * yrange / 100 +y_top = ymax + y_border_percent * yrange / 100 + +plt.ylim(y_bottom, y_top) + + +# plt.title("quebec-{}-{}-ECA value vs available budget.pdf".format(orig, median)) +plt.ylabel('percentage of elements\nremoved by the preprocessing', rotation=90, fontweight ='bold') +plt.xlabel("percentage of restored arcs", fontweight ='bold') + +plt.boxplot(datas, showfliers=False) +pylab.xticks(range(1, 1+len(datas)), x_datas) + +# legend = plt.legend(loc='lower right', shadow=True, fontsize='medium') + +plt.show() +plt.savefig("output/contraction_benefits_whiskers.pdf", dpi=500) \ No newline at end of file diff --git a/plot_scripts/pl_sizes_table.py b/plot_scripts/table_pl_sizes.py similarity index 100% rename from plot_scripts/pl_sizes_table.py rename to plot_scripts/table_pl_sizes.py -- GitLab