def draw(self, renderer, *args, **kwargs):
     bbox = self.get_window_extent(renderer)
     stretch_factor = bbox.height / bbox.width
     ny = int(stretch_factor*self._ribbonbox.nx)
     if self._cached_ny != ny:
         arr = self._ribbonbox.get_stretched_image(stretch_factor)
         self.set_array(arr)
         self._cached_ny = ny
     BboxImage.draw(self, renderer, *args, **kwargs)
    def draw(self, renderer, *args, **kwargs):

        bbox = self.get_window_extent(renderer)
        stretch_factor = bbox.height / bbox.width

        ny = int(stretch_factor * self._ribbonbox.nx)
        if self._cached_ny != ny:
            arr = self._ribbonbox.get_stretched_image(stretch_factor)
            self.set_array(arr)
            self._cached_ny = ny

        BboxImage.draw(self, renderer, *args, **kwargs)
Example #3
0
class PathClippedImagePatch(PathPatch):
    """
    The given image is used to draw the face of the patch. Internally,
    it uses BboxImage whose clippath set to the path of the patch.

    FIXME : The result is currently dpi dependent.
    """
    def __init__(self, path, bbox_image, **kwargs):
        super().__init__(path, **kwargs)
        self.bbox_image = BboxImage(self.get_window_extent,
                                    norm=None,
                                    origin=None)
        self.bbox_image.set_data(bbox_image)

    def set_facecolor(self, color):
        """Simply ignore facecolor."""
        super().set_facecolor("none")

    def draw(self, renderer=None):
        # the clip path must be updated every draw. any solution? -JJ
        self.bbox_image.set_clip_path(self._path, self.get_transform())
        self.bbox_image.draw(renderer)
        super().draw(renderer)
Example #4
0
class OffsetImage(OffsetBox):
    def __init__(self, arr,
                 zoom=1,
                 cmap = None,
                 norm = None,
                 interpolation=None,
                 origin=None,
                 filternorm=1,
                 filterrad=4.0,
                 resample = False,
                 dpi_cor=True,
                 **kwargs
                 ):

        self._dpi_cor = dpi_cor

        self.image = BboxImage(bbox=self.get_window_extent,
                               cmap = cmap,
                               norm = norm,
                               interpolation=interpolation,
                               origin=origin,
                               filternorm=filternorm,
                               filterrad=filterrad,
                               resample = resample,
                               **kwargs
                               )

        self._children = [self.image]

        self.set_zoom(zoom)
        self.set_data(arr)

        OffsetBox.__init__(self)


    def set_data(self, arr):
        self._data = np.asarray(arr)
        self.image.set_data(self._data)

    def get_data(self):
        return self._data

    def set_zoom(self, zoom):
        self._zoom = zoom

    def get_zoom(self):
        return self._zoom

#     def set_axes(self, axes):
#         self.image.set_axes(axes)
#         martist.Artist.set_axes(self, axes)

#     def set_offset(self, xy):
#         """
#         set offset of the container.

#         Accept : tuple of x,y cooridnate in disokay units.
#         """
#         self._offset = xy

#         self.offset_transform.clear()
#         self.offset_transform.translate(xy[0], xy[1])



    def get_offset(self):
        """
        return offset of the container.
        """
        return self._offset

    def get_children(self):
        return [self.image]

    def get_window_extent(self, renderer):
        '''
        get the bounding box in display space.
        '''
        w, h, xd, yd = self.get_extent(renderer)
        ox, oy = self.get_offset()
        return mtransforms.Bbox.from_bounds(ox-xd, oy-yd, w, h)


    def get_extent(self, renderer):

        if self._dpi_cor: # True, do correction
            dpi_cor = renderer.points_to_pixels(1.)
        else:
            dpi_cor = 1.

        zoom = self.get_zoom()
        data = self.get_data()
        ny, nx = data.shape[:2]
        w, h = nx*zoom, ny*zoom

        return w, h, 0, 0



    def draw(self, renderer):
        """
        Draw the children
        """

        self.image.draw(renderer)
Example #5
0
class OffsetImage(OffsetBox):
    def __init__(self,
                 arr,
                 zoom=1,
                 cmap=None,
                 norm=None,
                 interpolation=None,
                 origin=None,
                 filternorm=1,
                 filterrad=4.0,
                 resample=False,
                 dpi_cor=True,
                 **kwargs):

        self._dpi_cor = dpi_cor

        self.image = BboxImage(bbox=self.get_window_extent,
                               cmap=cmap,
                               norm=norm,
                               interpolation=interpolation,
                               origin=origin,
                               filternorm=filternorm,
                               filterrad=filterrad,
                               resample=resample,
                               **kwargs)

        self._children = [self.image]

        self.set_zoom(zoom)
        self.set_data(arr)

        OffsetBox.__init__(self)

    def set_data(self, arr):
        self._data = np.asarray(arr)
        self.image.set_data(self._data)

    def get_data(self):
        return self._data

    def set_zoom(self, zoom):
        self._zoom = zoom

    def get_zoom(self):
        return self._zoom


#     def set_axes(self, axes):
#         self.image.set_axes(axes)
#         martist.Artist.set_axes(self, axes)

#     def set_offset(self, xy):
#         """
#         set offset of the container.

#         Accept : tuple of x,y cooridnate in disokay units.
#         """
#         self._offset = xy

#         self.offset_transform.clear()
#         self.offset_transform.translate(xy[0], xy[1])

    def get_offset(self):
        """
        return offset of the container.
        """
        return self._offset

    def get_children(self):
        return [self.image]

    def get_window_extent(self, renderer):
        '''
        get the bounding box in display space.
        '''
        w, h, xd, yd = self.get_extent(renderer)
        ox, oy = self.get_offset()
        return mtransforms.Bbox.from_bounds(ox - xd, oy - yd, w, h)

    def get_extent(self, renderer):

        if self._dpi_cor:  # True, do correction
            dpi_cor = renderer.points_to_pixels(1.)
        else:
            dpi_cor = 1.

        zoom = self.get_zoom()
        data = self.get_data()
        ny, nx = data.shape[:2]
        w, h = nx * zoom, ny * zoom

        return w, h, 0, 0

    def draw(self, renderer):
        """
        Draw the children
        """

        self.image.draw(renderer)
Example #6
0
                                                                                                                                                                                                                                                                    def draw(self, renderer, *args, **kwargs):

                                                                                                                                                                                                                                                                                bbox = self.get_window_extent(renderer)
                                                                                                                                                                                                                                                                                        stretch_factor = bbox.height / bbox.width

                                                                                                                                                                                                                                                                                                ny = int(stretch_factor*self._ribbonbox.nx)
                                                                                                                                                                                                                                                                                                        if self._cached_ny != ny:
                                                                                                                                                                                                                                                                                                                        arr = self._ribbonbox.get_stretched_image(stretch_factor)
                                                                                                                                                                                                                                                                                                                                    self.set_array(arr)
                                                                                                                                                                                                                                                                                                                                                self._cached_ny = ny

                                                                                                                                                                                                                                                                                                                                                        BboxImage.draw(self, renderer, *args, **kwargs)


                                                                                                                                                                                                                                                                                                                                                        if 1:
                                                                                                                                                                                                                                                                                                                                                                from matplotlib.transforms import Bbox, TransformedBbox
                                                                                                                                                                                                                                                                                                                                                                    from matplotlib.ticker import ScalarFormatter

                                                                                                                                                                                                                                                                                                                                                                        fig, ax = plt.subplots()

                                                                                                                                                                                                                                                                                                                                                                            years = np.arange(2004, 2009)
                                                                                                                                                                                                                                                                                                                                                                                box_colors = [(0.8, 0.2, 0.2),
                                                                                                                                                                                                                                                                                                                                                                                                          (0.2, 0.8, 0.2),
                                                                                                                                                                                                                                                                                                                                                                                                                            (0.2, 0.2, 0.8),
                                                                                                                                                                                                                                                                                                                                                                                                                                              (0.7, 0.5, 0.8),
                                                                                                                                                                                                                                                                                                                                                                                                                                                                (0.3, 0.8, 0.7),
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ]
                                                                                                                                                                                                                                                                                                                                                                                    heights = np.random.random(years.shape) * 7000 + 3000

                                                                                                                                                                                                                                                                                                                                                                                        fmt = ScalarFormatter(useOffset=False)
                                                                                                                                                                                                                                                                                                                                                                                            ax.xaxis.set_major_formatter(fmt)

                                                                                                                                                                                                                                                                                                                                                                                                for year, h, bc in zip(years, heights, box_colors):
                                                                                                                                                                                                                                                                                                                                                                                                            bbox0 = Bbox.from_extents(year-0.4, 0., year+0.4, h)
                                                                                                                                                                                                                                                                                                                                                                                                                    bbox = TransformedBbox(bbox0, ax.transData)
                                                                                                                                                                                                                                                                                                                                                                                                                            rb_patch = RibbonBoxImage(bbox, bc, interpolation="bicubic")

                                                                                                                                                                                                                                                                                                                                                                                                                                    ax.add_artist(rb_patch)

                                                                                                                                                                                                                                                                                                                                                                                                                                            ax.annotate(r"%d" % (int(h/100.)*100),
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        (year, h), va="bottom", ha="center")

                                                                                                                                                                                                                                                                                                                                                                                                                                                patch_gradient = BboxImage(ax.bbox,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       interpolation="bicubic",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      zorder=0.1,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     )
                                                                                                                                                                                                                                                                                                                                                                                                                                                    gradient = np.zeros((2, 2, 4), dtype=np.float)
                                                                                                                                                                                                                                                                                                                                                                                                                                                        gradient[:,:,:3] = [1, 1, 0.]
                                                                                                                                                                                                                                                                                                                                                                                                                                                            gradient[:,:,3] = [[0.1, 0.3],[0.3, 0.5]] # alpha channel
                                                                                                                                                                                                                                                                                                                                                                                                                                                                patch_gradient.set_array(gradient)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ax.add_artist(patch_gradient)


                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ax.set_xlim(years[0]-0.5, years[-1]+0.5)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ax.set_ylim(0, 10000)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                fig.savefig('ribbon_box.png')
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    plt.show()