Ejemplo n.º 1
0
    def __init__(self, circuits):

        self._circuit_statistics = CircuitStatistics(circuits)
        self._circuit_grade_barchart = self._make_barchart(self._circuit_statistics.circuit_grade_histogram,
                                                           'Cotation des Circuits') # Circuit Grade
        self._global_boulder_grade_barchart = self._make_barchart(self._circuit_statistics.global_boulder_grade_histogram,
                                                                  'Cotations des Blocs') # Boulder Grade
        self._boulder_grade_barchart_map = {grade:self._make_barchart(self._circuit_statistics.boulder_grade_histogram(grade),
                                                                      'Cotations des Blocs pour les circuits {}'.format(grade))
                                            for grade in self._circuit_statistics.circuit_grades}
Ejemplo n.º 2
0
class CircuitStatisticsData:

    ##############################################

    def __init__(self, circuits):

        self._circuit_statistics = CircuitStatistics(circuits)
        self._circuit_grade_barchart = self._make_barchart(self._circuit_statistics.circuit_grade_histogram,
                                                           'Cotation des Circuits') # Circuit Grade
        self._global_boulder_grade_barchart = self._make_barchart(self._circuit_statistics.global_boulder_grade_histogram,
                                                                  'Cotations des Blocs') # Boulder Grade
        self._boulder_grade_barchart_map = {grade:self._make_barchart(self._circuit_statistics.boulder_grade_histogram(grade),
                                                                      'Cotations des Blocs pour les circuits {}'.format(grade))
                                            for grade in self._circuit_statistics.circuit_grades}

    ##############################################

    def _make_barchart(self, histogram, title):

        grade_counters = histogram.domain()
        if grade_counters:
            data = {
                'labels': [str(grade_counter) for grade_counter in grade_counters],
                'counts': [grade_counter.count for grade_counter in grade_counters],
            }
            # engine = self._make_bokeh_barchart
            engine = self._make_svg_barchart
            return engine(data, title)
        else:
            return None

    ##############################################

    def _make_bokeh_barchart(self, data, title):

        # Workaround to don't sort labels
        label = CatAttr(df=data, columns='labels', sort=False)
        bar = Bar(data,
                  values='counts', label=label,
                  title=title,
                  xlabel='',
                  ylabel='',
                  plot_width=300,
                  plot_height=200,
                  responsive=True,
                  tools='',
                  toolbar_location=None,
        )
        return BokehPlot(bar)

    ##############################################

    def _make_svg_barchart(self, data, title):

        dpi = 100
        figure_width = 1000 / dpi
        aspect_ratio = 16 / 9
        figure_height = figure_width / aspect_ratio

        figure = Figure(figsize=(figure_width, figure_height), dpi=dpi, facecolor='white')
        axes = figure.add_subplot(1, 1, 1)
        y = data['counts']
        x = np.arange(len(y))
        width = .5
        bar_chart = axes.bar(x, y, width=width, color='r', edgecolor='white')

        axes.set_ylabel('')
        axes.set_title(title, fontsize=20)
        axes.set_xticks(x + width/2)
        axes.xaxis.set_tick_params(width=0)
        axes.set_xticklabels(data['labels'], rotation=45, fontsize=15)
        axes.grid(axis='y')

        canvas = FigureCanvas(figure)
        image_data = StringIO()
        canvas.print_figure(image_data, format='svg')
        svg = image_data.getvalue()
        svg = svg[svg.find('<svg'):]

        return SvgPlot(svg)

    ##############################################

    @property
    def circuit_statistics(self):
        return self._circuit_statistics

    @property
    def circuit_grade_barchart(self):
        return self._circuit_grade_barchart

    @property
    def global_boulder_grade_barchart(self):
        return self._global_boulder_grade_barchart

    @property
    def circuit_grades(self):
        return list(self._boulder_grade_barchart_map.keys())

    def boulder_grade_barchart(self, grade):
        return self._boulder_grade_barchart_map[grade]