from collections import defaultdict from typing import List, Tuple import matplotlib.pyplot as plt from . import Render from .. import Result, SimulationRoundsAnalyzer def plot(src_data: List[Tuple[str, List[int]]]): names, datas = list(zip(*src_data)) plt.boxplot(datas, labels=names) plt.xticks(rotation='vertical') # plt.margins() plt.ylabel("simulation rounds") plt.title("simulation retries") plt.show() class SimulationRoundsRender(Render): def render(self, results: List[Result]): data = defaultdict(list) for result in self.filter(results): get = result.get() for key in get: data[key].append(get[key]) data_tuples = [(key, data[key]) for key in sorted(data)] data_tuples = sorted(data_tuples, key=lambda x: sum(x[1])) plot(data_tuples) result_types = [SimulationRoundsAnalyzer]