awodij
This commit is contained in:
parent
d4ef9f4346
commit
83cbccbd62
@ -40,7 +40,8 @@ def box_plot(ax, data_list: list[dict[str, str | int | float]], x: Stat, y: Stat
|
|||||||
|
|
||||||
def line_plot(
|
def line_plot(
|
||||||
ax, data_list: list[dict[str, str | int | float]],
|
ax, data_list: list[dict[str, str | int | float]],
|
||||||
x: Stat, y: Stat, color: Stat
|
x: Stat, y: Stat, color: Stat,
|
||||||
|
font_size: int
|
||||||
):
|
):
|
||||||
x_data: dict[str, np.ndarray] = accumulate(data_list, color, x)
|
x_data: dict[str, np.ndarray] = accumulate(data_list, color, x)
|
||||||
y_data: dict[str, np.ndarray] = accumulate(data_list, color, y)
|
y_data: dict[str, np.ndarray] = accumulate(data_list, color, y)
|
||||||
@ -53,7 +54,7 @@ def line_plot(
|
|||||||
#print("Plotted x data: " + str(x_data[category]))
|
#print("Plotted x data: " + str(x_data[category]))
|
||||||
#print("Plotted y data: " + str(y_data[category]))
|
#print("Plotted y data: " + str(y_data[category]))
|
||||||
|
|
||||||
ax.set_ylabel(y.value)
|
ax.set_ylabel(y.value, fontsize=font_size)
|
||||||
ax.grid(True)
|
ax.grid(True)
|
||||||
|
|
||||||
def visualize(
|
def visualize(
|
||||||
@ -63,7 +64,7 @@ def visualize(
|
|||||||
size_multiplier: int,
|
size_multiplier: int,
|
||||||
font_size: int,
|
font_size: int,
|
||||||
x: Stat,
|
x: Stat,
|
||||||
y: Stat,
|
ys: list[Stat],
|
||||||
color: Stat,
|
color: Stat,
|
||||||
filter_list: list[str] = []
|
filter_list: list[str] = []
|
||||||
):
|
):
|
||||||
@ -76,7 +77,7 @@ def visualize(
|
|||||||
#y = Stat.DTLB_MISS_RATE
|
#y = Stat.DTLB_MISS_RATE
|
||||||
#color = Stat.SOLVER
|
#color = Stat.SOLVER
|
||||||
|
|
||||||
if y is None:
|
if ys is None:
|
||||||
#ys = [stat for stat in Stat if stat.name in data_list[0].keys()]
|
#ys = [stat for stat in Stat if stat.name in data_list[0].keys()]
|
||||||
#ys = [stat for stat in data_list[0].keys() if "power" not in stat]
|
#ys = [stat for stat in data_list[0].keys() if "power" not in stat]
|
||||||
#and stat is not x
|
#and stat is not x
|
||||||
@ -85,51 +86,64 @@ def visualize(
|
|||||||
#and stat.value not in filter_list]
|
#and stat.value not in filter_list]
|
||||||
# Create sorted, deduped list of all stats in data_list.
|
# Create sorted, deduped list of all stats in data_list.
|
||||||
ys = [Stat[stat_name] for stat_name in sorted(list(set([stat_name for data in data_list for stat_name in data if type(data[stat_name]) is not list])))]
|
ys = [Stat[stat_name] for stat_name in sorted(list(set([stat_name for data in data_list for stat_name in data if type(data[stat_name]) is not list])))]
|
||||||
print([stat.value for stat in ys])
|
|
||||||
|
|
||||||
|
print([stat.name for stat in ys])
|
||||||
|
print(len(ys))
|
||||||
|
print(rows)
|
||||||
|
print(int(math.ceil(len(ys) / rows)))
|
||||||
fig, axes = plt.subplots(rows, int(math.ceil(len(ys) / rows)),
|
fig, axes = plt.subplots(rows, int(math.ceil(len(ys) / rows)),
|
||||||
figsize = (16 * size_multiplier, 9 * size_multiplier))
|
figsize = (16 * size_multiplier, 9 * size_multiplier))
|
||||||
|
|
||||||
match plot:
|
match plot:
|
||||||
case Plot.BOX:
|
case Plot.BOX:
|
||||||
for i, y in enumerate(ys):
|
for i, y in enumerate(ys):
|
||||||
box_plot(axes[i % rows][int(i / rows)], data_list, x, y)
|
box_plot(axes[i % rows][int(i / rows)], data_list, x, y)
|
||||||
case Plot.LINE:
|
case Plot.LINE:
|
||||||
for i, y in enumerate(ys):
|
for i, y in enumerate(ys):
|
||||||
line_plot(axes[i % rows][int(i / rows)], data_list, x, y, color)
|
ax = axes[i % rows][int(i / rows)]
|
||||||
|
line_plot(ax, data_list, x, y, color, font_size)
|
||||||
|
ax.get_xaxis().get_major_formatter().set_scientific(False)
|
||||||
|
ax.get_yaxis().get_major_formatter().set_scientific(False)
|
||||||
|
|
||||||
handles, labels = axes[i % rows][int(i / rows)].get_legend_handles_labels()
|
handles, labels = axes[i % rows][int(i / rows)].get_legend_handles_labels()
|
||||||
else:
|
# else:
|
||||||
fig, ax = plt.subplots()
|
# fig, ax = plt.subplots()
|
||||||
|
#
|
||||||
match plot:
|
# match plot:
|
||||||
case Plot.BOX:
|
# case Plot.BOX:
|
||||||
box_plot(ax, data_list, x, y)
|
# box_plot(ax, data_list, x, y)
|
||||||
case Plot.LINE:
|
# case Plot.LINE:
|
||||||
line_plot(ax, data_list, x, y, color)
|
# line_plot(ax, data_list, x, y, color)
|
||||||
|
#
|
||||||
handles, labels = ax.get_legend_handles_labels()
|
# handles, labels = ax.get_legend_handles_labels()
|
||||||
|
|
||||||
#box_plot(ax, stats, x, y)
|
#box_plot(ax, stats, x, y)
|
||||||
#line_plot(ax, stats, x, y, color)
|
#line_plot(ax, stats, x, y, color)
|
||||||
|
|
||||||
match plot:
|
# match plot:
|
||||||
case Plot.BOX:
|
# case Plot.BOX:
|
||||||
title = f"{plot.value}_plot_of_{y.value.replace(' ', '_')}_vs_{x.value.replace(' ', '_')}_excluding_{filter_list}"
|
# title = f"{plot.value}_plot_of_{y.value.replace(' ', '_')}_vs_{x.value.replace(' ', '_')}_excluding_{filter_list}"
|
||||||
case Plot.LINE:
|
# case Plot.LINE:
|
||||||
#title = f"{plot.value}_plot_of_{y.replace(' ', '_')}_vs_{x.replace(' ', '_')}_by_{color.replace(' ', '_')}_excluding_{filter_list}"
|
# #title = f"{plot.value}_plot_of_{y.replace(' ', '_')}_vs_{x.replace(' ', '_')}_by_{color.replace(' ', '_')}_excluding_{filter_list}"
|
||||||
title = "altra_spmv"
|
# title = "altra_spmv"
|
||||||
fig.suptitle(title, fontsize = font_size)
|
title = f'{plot.value} plot of {[y.value for y in ys]} vs {x.value} by {color.value} excluding {filter_list}'
|
||||||
|
#fig.suptitle(title, fontsize = font_size)
|
||||||
fig.legend(handles, labels, fontsize = font_size)
|
fig.legend(handles, labels, fontsize = font_size)
|
||||||
fig.supxlabel(x.value, fontsize = font_size)
|
fig.supxlabel(x.value, fontsize = font_size)
|
||||||
|
|
||||||
plt.savefig(title + ".png", dpi = 100)
|
#plt.xticks(fontsize=font_size)
|
||||||
|
#plt.yticks(fontsize=font_size)
|
||||||
|
plt.savefig(title.replace(' ', '_') + ".png", dpi = 100)
|
||||||
plt.show()
|
plt.show()
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
default_figure_size = 4
|
||||||
|
default_font_size = 5 * default_figure_size
|
||||||
|
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument('input_dir',
|
parser.add_argument('input_dir',
|
||||||
help='the input directory')
|
help='the input directory')
|
||||||
parser.add_argument('-p', '--plot',
|
parser.add_argument('plot',
|
||||||
choices=[x.name.lower() for x in Plot],
|
choices=[x.name.lower() for x in Plot],
|
||||||
help = 'the type of plot')
|
help = 'the type of plot')
|
||||||
parser.add_argument('-r', '--rows', type=int,
|
parser.add_argument('-r', '--rows', type=int,
|
||||||
@ -137,18 +151,18 @@ def main():
|
|||||||
default = 5)
|
default = 5)
|
||||||
parser.add_argument('-s', '--size', type=int,
|
parser.add_argument('-s', '--size', type=int,
|
||||||
help = 'figure size multiplier',
|
help = 'figure size multiplier',
|
||||||
default = 4)
|
default = default_figure_size)
|
||||||
parser.add_argument('-fs', '--font_size', type=int,
|
parser.add_argument('-fs', '--font_size', type=int,
|
||||||
help = 'font size',
|
help = 'font size',
|
||||||
default = 40)
|
default = default_font_size)
|
||||||
parser.add_argument('-x',
|
parser.add_argument('x',
|
||||||
choices=[x.name.lower() for x in Stat],
|
choices=[x.name.lower() for x in Stat],
|
||||||
help = 'the name of the x axis')
|
help = 'the name of the x axis')
|
||||||
parser.add_argument('-y',
|
parser.add_argument('-ys', nargs='+',
|
||||||
choices=[x.name.lower() for x in Stat],
|
choices=[y.name.lower() for y in Stat],
|
||||||
help = 'the name of the y axis')
|
help = 'the name of the y axis')
|
||||||
parser.add_argument('-c', '--color',
|
parser.add_argument('-c', '--color',
|
||||||
choices=[x.name.lower() for x in Stat],
|
choices=[c.name.lower() for c in Stat],
|
||||||
help = 'the name of the color')
|
help = 'the name of the color')
|
||||||
parser.add_argument('-f', '--filter', nargs = '+',
|
parser.add_argument('-f', '--filter', nargs = '+',
|
||||||
help = 'a comma-separated string of names and values to filter out.',
|
help = 'a comma-separated string of names and values to filter out.',
|
||||||
@ -156,7 +170,8 @@ def main():
|
|||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
args.plot = Plot[args.plot.upper()]
|
args.plot = Plot[args.plot.upper()]
|
||||||
args.x = Stat[args.x.upper()] if args.x is not None else None
|
args.x = Stat[args.x.upper()] if args.x is not None else None
|
||||||
args.y = Stat[args.y.upper()] if args.y is not None else None
|
args.ys = ([Stat[y.upper()] for y in args.ys]
|
||||||
|
if args.ys is not None else None)
|
||||||
args.color = Stat[args.color.upper()] if args.color is not None else None
|
args.color = Stat[args.color.upper()] if args.color is not None else None
|
||||||
|
|
||||||
data_list: list[dict] = list()
|
data_list: list[dict] = list()
|
||||||
@ -173,7 +188,7 @@ def main():
|
|||||||
args.size,
|
args.size,
|
||||||
args.font_size,
|
args.font_size,
|
||||||
args.x,
|
args.x,
|
||||||
args.y,
|
args.ys,
|
||||||
args.color,
|
args.color,
|
||||||
args.filter
|
args.filter
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user