Hello,

This code worked with matplotlib 0.87:

    fig = Figure()
    ax = fig.add_subplot(121)
    width = 0.5     # the width of the bars
    self.dpi = 70
    yoff = array([0.0] * len(self.__labels)) # the bottom values for stacked 
bar chart

    self.__bars = ()
    for row in xrange(rows):
        self.__bars += (ax.bar(ind, self.__data[row], width, bottom=yoff, 
color=colours),)
        yoff = yoff + self.__data[row]
    
    #...
    fig.set_size_inches(self.size[0], self.size[1])
    imdata=StringIO()
    fig.savefig(imdata,format='png', dpi=self.dpi)
    self.__image = imdata.getvalue()
    self.height = fig.get_figheight()* self.dpi
    #...
    coords = []
    
    for bar in self.__bars:
        x1 = []
        y1 = []
        x2 = []
        y2 = []
        # For each bars, we get values of rectangles
        for b in bar:
            x1 += [b.get_x(),]
            y1 += [b.get_y(),]
            if matplotlib.compare_versions(matplotlib.__version__, '0.97'):
                x2 += [b.get_x() + b.get_width(),]
                y2 += [b.get_y() + b.get_height(),]
            else:
                x2 += [b.get_x() + b.width,]
                y2 += [b.get_y() + b.height,]
    
        if matplotlib.compare_versions(matplotlib.__version__, '0.97'):
            xys1 = zip(x1, y1)
            xys2 = zip(x2, y2)
            # We get the top left points for each bars...
            xys1 = bar[0].get_transform().transform(xys1)
            # ...and the bottom right points for each bars.
            xys2 = bar[0].get_transform().transform(xys2)
        else:
            xys1 = zip(bar[0].get_transform().seq_x_y(x1, y1))
            xys2 = zip(bar[0].get_transform().seq_x_y(x2, y2))
    
        # Now for each bars, we can make a (x,y,w,h) data coords for HTML map 
area.
        for (sx1, sy1), (sx2, sy2) in zip(xys1, xys2):
            coords.append(sx1, self.height - sy2, sx2, self.height))
    #...then coords is used to build the html area tags

Where it works with matplotlib 0.87, the behavior isn't correct with 
matplotlibĀ 0.98.

There are some version tests to run correctly compatible code. Blocks are
equivalents, but as the v0.87 code works, the v0.98 code doesn't produce the
same behavior.

For example, if xys1 and xys2 are:
xys1 = [(0.0, 0.0), (0.5, 0.0), (1.0, 0.0), (1.5, 0.0), (2.0, 0.0), (2.5, 0.0), 
(3.0, 0.0), (3.5, 0.0), (4.0, 0.0), (4.5, 0.0)]
xys2 = [(0.5, 992.0), (1.0, 1025.0), (1.5, 972.0), (2.0, 1004.0), (2.5, 
1007.0), (3.0, 1004.0), (3.5, 974.0), (4.0, 995.0), (4.5, 981.0), (5.0, 964.0)]

The arrays produced by the transform() methods will be:

xys1 = [[  50.    20. ]
        [  65.5   20. ]
        [  81.    20. ]
        [  96.5   20. ]
        [ 112.    20. ]
        [ 127.5   20. ]
        [ 143.    20. ]
        [ 158.5   20. ]
        [ 174.    20. ]
        [ 189.5   20. ]]
xys2 = [[  6.55000000e+01   1.31228533e+05]
        [  8.10000000e+01   1.35593333e+05]
        [  9.65000000e+01   1.28583200e+05]
        [  1.12000000e+02   1.32815733e+05]
        [  1.27500000e+02   1.33212533e+05]
        [  1.43000000e+02   1.32815733e+05]
        [  1.58500000e+02   1.28847733e+05]
        [  1.74000000e+02   1.31625333e+05]
        [  1.89500000e+02   1.29773600e+05]
        [  2.05000000e+02   1.27525067e+05]]

Firstly, the horizontal axe is separated with 15.5 points, but on picture, 28 
are needed.
Then, vertical values are around 1.0e+05, but self.height=175!

Is there any matplotlib behavior changed in new versions?

Thanks, regards

-- 
Romain Bignon -- http://romain.peerfuse.org

http://peerfuse.org

Attachment: pgp5uo6Mn4iCs.pgp
Description: PGP signature

------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to