Ejemplo n.º 1
0
    def _graph_linear_j(self, x, y, r, reg, refresh):

        g = self.graph
        if not isinstance(g, RegressionGraph):
            g = RegressionGraph(
                container_dict={'bgcolor': self.plotter_options.bgcolor})
            self.graph = g

        po = self.plotter_options
        g.clear()

        plot = g.new_plot(padding=po.get_paddings())
        if po.model_kind == WEIGHTED_MEAN_1D:
            fit = 'weighted mean'
        else:
            fit = po.least_squares_fit

        _, scatter, line = g.new_series(x=reg.xs,
                                        y=reg.ys,
                                        yerror=reg.yserr,
                                        fit=fit)
        ebo = ErrorBarOverlay(component=scatter, orientation='y')
        scatter.underlays.append(ebo)
        scatter.error_bars = ebo

        add_inspector(scatter, self._additional_info)

        add_axes_tools(g, plot)

        g.set_x_title(po.one_d_axis)
        g.set_y_title('J')

        g.add_statistics()

        miy = 100
        may = -1

        if self._individual_analyses_enabled:
            sel = [
                i for i, (a, x, y, e) in enumerate(zip(*self._analyses))
                if a.is_omitted()
            ]

            # plot the individual analyses
            iscatter, iys = self._graph_individual_analyses(fit=None,
                                                            add_tools=False)
            miy = min(iys)
            may = max(iys)

            # set metadata last because it will trigger a refresh
            self.suppress_metadata_change = True
            iscatter.index.metadata['selections'] = sel
            self.suppress_metadata_change = False

        g.set_y_limits(min_=miy, max_=may, pad='0.1')
        g.set_x_limits(pad='0.1')

        g.refresh()

        fys = line.value.get_data()
        self.max_j = fys.max()
        self.min_j = fys.min()