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