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