1import matplotlib.pyplot as plt
2import pandas as pd
3
4from .legend_picker import *
5from .helpers import *
6
7
8def show_exceptions(metricsParser, options, onePlotFigureSize, fontSize):
9    exceptionEntries = metricsParser.get_exceptions_entries()
10    data = pd.DataFrame(exceptionEntries, columns=['realTime', 'virtualTime', 'number'])
11    fig, ax = plt.subplots(figsize=onePlotFigureSize, constrained_layout=True)
12    time_column = 'realTime' if options.real_time else 'virtualTime'
13    lines = _prepare_data(ax, data, time_column)
14
15    fig.suptitle('Exceptions', fontsize=fontSize)
16    ax.set_ylabel('Exception operations')
17    ax.set_xlabel('{} time [ms]'.format('Real' if options.real_time else 'Virtual'))
18
19    handles, labels = ax.get_legend_handles_labels()
20    legend = fig.legend(handles, labels, loc='upper left')
21    set_legend_picker(fig, lines, legend)
22    save_fig(fig, 'exceptions.png', options)
23
24
25def _prepare_data(ax, data, time_column):
26    lines = []
27    for index in data['number'].drop_duplicates():
28        entries = data[data['number'] == index]
29        line, = ax.plot(entries[time_column], range(0, len(entries)), label=index)
30        lines.append(line)
31    return lines
32