-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvisualization.py
More file actions
121 lines (113 loc) · 5.48 KB
/
visualization.py
File metadata and controls
121 lines (113 loc) · 5.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#%% IMPORT PACKAGES AND GLOBAL CONFIGURATIONS
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from collections import deque
sns.set(font_scale=1.1)
plt.rcParams["font.family"] = "Times New Roman"
#%% LOAD DATA AND DEFINE CONSTANTS
folder = 'img'
t_columns = ['total']
engines = ['xdevs-new-full', 'xdevs-new-naive', 'xdevs-new', 'xdevs-old', 'adevs']
reference = 'adevs'
df = pd.read_csv('results/results.csv')
#%% SPEEDUP GRAPHS
for target, target_df in df.groupby('target'):
for engine, engine_df in target_df.groupby('engine'):
if engine == reference:
continue
for model, model_df in engine_df.groupby('model'):
for t in t_columns:
speedup = f'speedup_{t}'
widths = list(model_df['width'].unique())
depths = list(model_df['depth'].unique())
widths.sort(reverse=True)
depths.sort()
heatmap = np.zeros((len(widths), len(depths)))
for i, w in enumerate(widths):
for j, d in enumerate(depths):
heatmap[i, j] = model_df[(model_df['width'] == w) & (model_df['depth'] == d)][speedup].values[0]
ax = sns.heatmap(heatmap, cmap="magma", xticklabels=depths, yticklabels=widths, cbar=True)
ax.set(xlabel="depth", ylabel="width")
plt.subplots_adjust(bottom=0.15)
plt.xlabel("depth", fontsize=20)
plt.ylabel("width", fontsize=20)
plt.savefig(f'results/speedup_heatmap/{target}_{engine}_{model}_{t}.pdf', format='pdf')
plt.close()
# plt.show()
#%% TIME GRAPHS
for target, target_df in df.groupby('target'):
for model, model_df in target_df.groupby('model'):
ref_df = model_df[model_df['engine'] == reference].reset_index().sort_values(['mean_total_time'])
ref_df['xlabel'] = ref_df['width'].astype(str) + "-" + ref_df["depth"].astype(str)
x = list(range(len(ref_df.index)))
for time in t_columns:
fig, ax = plt.subplots()
time_col = f'mean_{time}_time'
ax.plot(ref_df['xlabel'], ref_df[time_col], label=reference)
for engine, engine_df in model_df.groupby('engine'):
if engine == reference:
continue
engine_df = engine_df.reset_index().reindex(index=ref_df.index)
ax.plot(ref_df['xlabel'], engine_df[time_col], label=engine)
ax.set_ylabel('time [s]', fontsize=20)
ax.set_xlabel('structure [width-depth]', fontsize=20)
N = 10 if model == 'HOmod' else 40 # 1 tick every 3
xticks_pos = ax.get_xticks()
xticks_labels = ax.get_xticklabels()
myticks = [j for i, j in enumerate(xticks_pos) if not i % N] # index of selected ticks
newlabels = [label for i, label in enumerate(xticks_labels) if not i % N]
ax.set_xticks(myticks, newlabels, rotation=30)
ax.legend()
plt.subplots_adjust(bottom=0.2)
plt.margins(0.05, tight=True)
plt.savefig(f'results/time/{target}_{model}_{time}.pdf', format='pdf')
# plt.show()
plt.close()
fig, ax = plt.subplots()
# next(ax._get_lines.prop_cycler)
for engine, engine_df in model_df.groupby('engine'):
if engine == reference:
pass
engine_df = engine_df.reset_index().reindex(index=ref_df.index)
ax.plot(ref_df['xlabel'], engine_df[f'speedup_{time}'], label=engine)
ax.set_ylabel('speedup', fontsize=20)
ax.set_xlabel('structure [width-depth]', fontsize=20)
N = 10 if model == 'HOmod' else 40 # 1 tick every 3
xticks_pos = ax.get_xticks()
xticks_labels = ax.get_xticklabels()
myticks = [j for i, j in enumerate(xticks_pos) if not i % N] # index of selected ticks
newlabels = [label for i, label in enumerate(xticks_labels) if not i % N]
ax.set_xticks(myticks, newlabels, rotation=30)
ax.legend(loc='upper left')
plt.subplots_adjust(bottom=0.2)
plt.margins(0.05, tight=True)
plt.savefig(f'results/speedup/{target}_{model}_{time}.pdf', format='pdf')
# plt.show()
plt.close()
#%% PERCENTAGE CHARS
for target, target_df in df.groupby('target'):
for time in t_columns:
time_col = f'mean_{time}_time'
percentages = dict()
engines = deque()
for engine, engine_df in target_df.groupby('engine'):
engines.appendleft(engine)
t_sum = engine_df[time_col].sum()
for model, model_df in engine_df.groupby('model'):
if model not in percentages:
percentages[model] = deque()
percentages[model].appendleft(100 * model_df[time_col].sum() / t_sum)
fig, ax = plt.subplots(figsize=(7, 3))
left = None
for model in 'LI', 'HI', 'HO', 'HOmod':
bar = percentages[model]
ax.barh(engines, percentages[model], align='center', height=.7, left=left, label=model)
left = bar if left is None else [left[i] + bar[i] for i in range(len(left))]
ax.set_yticks(engines)
ax.set_xlabel('execution time [%]', fontsize=15)
ax.legend()
plt.tight_layout()
plt.savefig(f'results/percentage/{target}_{time}.pdf', format='pdf')
plt.close()