Ejemplo n.º 1
0
    def _get_plot_instance(self, field):
        fontscale = self._font_properties._size / 14.0
        top_buff_size = 0.35 * fontscale

        x_axis_size = 1.35 * fontscale
        y_axis_size = 0.7 * fontscale
        right_buff_size = 0.2 * fontscale

        if iterable(self.figure_size):
            figure_size = self.figure_size
        else:
            figure_size = (self.figure_size, self.figure_size)

        xbins = np.array([x_axis_size, figure_size[0], right_buff_size])
        ybins = np.array([y_axis_size, figure_size[1], top_buff_size])

        size = [xbins.sum(), ybins.sum()]

        x_frac_widths = xbins / size[0]
        y_frac_widths = ybins / size[1]

        axrect = (
            x_frac_widths[0],
            y_frac_widths[0],
            x_frac_widths[1],
            y_frac_widths[1],
        )

        try:
            plot = self.plots[field]
        except KeyError:
            plot = PlotMPL(self.figure_size, axrect, None, None)
            self.plots[field] = plot
        return plot
Ejemplo n.º 2
0
    def _setup_plots(self):
        if self._plot_valid is True:
            return
        for plot in self.plots.values():
            plot.axes.cla()
        dimensions_counter = defaultdict(int)
        for field in self.fields:
            fontscale = self._font_properties._size / 14.
            top_buff_size = 0.35 * fontscale

            x_axis_size = 1.35 * fontscale
            y_axis_size = 0.7 * fontscale
            right_buff_size = 0.2 * fontscale

            if iterable(self.figure_size):
                figure_size = self.figure_size
            else:
                figure_size = (self.figure_size, self.figure_size)

            xbins = np.array([x_axis_size, figure_size[0], right_buff_size])
            ybins = np.array([y_axis_size, figure_size[1], top_buff_size])

            size = [xbins.sum(), ybins.sum()]

            x_frac_widths = xbins / size[0]
            y_frac_widths = ybins / size[1]

            axrect = (
                x_frac_widths[0],
                y_frac_widths[0],
                x_frac_widths[1],
                y_frac_widths[1],
            )

            try:
                plot = self.plots[field]
            except KeyError:
                plot = PlotMPL(self.figure_size, axrect, None, None)
                self.plots[field] = plot

            x, y = self.ds.coordinates.pixelize_line(field, self.start_point,
                                                     self.end_point,
                                                     self.npoints)

            if self._x_unit is None:
                unit_x = x.units
            else:
                unit_x = self._x_unit

            if field in self._y_units:
                unit_y = self._y_units[field]
            else:
                unit_y = y.units

            x = x.to(unit_x)
            y = y.to(unit_y)

            plot.axes.plot(x, y, label=self.labels[field])

            if self._field_transform[field] != linear_transform:
                if (y < 0).any():
                    plot.axes.set_yscale('symlog')
                else:
                    plot.axes.set_yscale('log')

            plot._set_font_properties(self._font_properties, None)

            axes_unit_labels = self._get_axes_unit_labels(unit_x, unit_y)

            finfo = self.ds.field_info[field]

            x_label = r'$\rm{Path\ Length' + axes_unit_labels[0] + '}$'

            finfo = self.ds.field_info[field]
            dimensions = Unit(finfo.units,
                              registry=self.ds.unit_registry).dimensions
            dimensions_counter[dimensions] += 1
            if dimensions_counter[dimensions] > 1:
                y_label = (r'$\rm{Multiple\ Fields}$' + r'$\rm{' +
                           axes_unit_labels[1] + '}$')
            else:
                y_label = (finfo.get_latex_display_name() + r'$\rm{' +
                           axes_unit_labels[1] + '}$')

            plot.axes.set_xlabel(x_label)
            plot.axes.set_ylabel(y_label)

            if field in self._titles:
                plot.axes.set_title(self._titles[field])

            if self.include_legend[field]:
                plot.axes.legend()