|
From: <md...@us...> - 2008-01-31 14:21:52
|
Revision: 4909
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4909&view=rev
Author: mdboom
Date: 2008-01-31 06:21:49 -0800 (Thu, 31 Jan 2008)
Log Message:
-----------
Fig dpi-changing-related bug where tick label padding was not updating
(Thanks Eric Firing for finding this).
Modified Paths:
--------------
trunk/matplotlib/lib/matplotlib/axes.py
trunk/matplotlib/lib/matplotlib/axis.py
trunk/matplotlib/lib/matplotlib/collections.py
trunk/matplotlib/lib/matplotlib/figure.py
trunk/matplotlib/lib/matplotlib/patches.py
trunk/matplotlib/lib/matplotlib/projections/geo.py
trunk/matplotlib/lib/matplotlib/projections/polar.py
trunk/matplotlib/lib/matplotlib/text.py
trunk/matplotlib/lib/matplotlib/transforms.py
Modified: trunk/matplotlib/lib/matplotlib/axes.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/axes.py 2008-01-29 20:50:53 UTC (rev 4908)
+++ trunk/matplotlib/lib/matplotlib/axes.py 2008-01-31 14:21:49 UTC (rev 4909)
@@ -595,13 +595,13 @@
"""
return self._xaxis_transform
- def get_xaxis_text1_transform(self, pad_pixels):
+ def get_xaxis_text1_transform(self, pad_points):
"""
Get the transformation used for drawing x-axis labels, which
- will add the given number of pad_pixels between the axes and
- the label. The x-direction is in data coordinates and the
- y-direction is in axis coordinates. Returns a 3-tuple of the
- form:
+ will add the given amount of padding (in points) between the
+ axes and the label. The x-direction is in data coordinates
+ and the y-direction is in axis coordinates. Returns a 3-tuple
+ of the form:
(transform, valign, halign)
@@ -612,14 +612,15 @@
need to place axis elements in different locations.
"""
return (self._xaxis_transform +
- mtransforms.Affine2D().translate(0, -1 * pad_pixels),
+ mtransforms.ScaledTranslation(0, -1 * pad_points / 72.0,
+ self.figure.dpi_scale_trans),
"top", "center")
- def get_xaxis_text2_transform(self, pad_pixels):
+ def get_xaxis_text2_transform(self, pad_points):
"""
Get the transformation used for drawing the secondary x-axis
- labels, which will add the given number of pad_pixels between
- the axes and the label. The x-direction is in data
+ labels, which will add the given amount of padding (in points)
+ between the axes and the label. The x-direction is in data
coordinates and the y-direction is in axis coordinates.
Returns a 3-tuple of the form:
@@ -632,7 +633,8 @@
need to place axis elements in different locations.
"""
return (self._xaxis_transform +
- mtransforms.Affine2D().translate(0, pad_pixels),
+ mtransforms.ScaledTranslation(0, pad_points / 72.0,
+ self.figure.dpi_scale_trans),
"bottom", "center")
def get_yaxis_transform(self):
@@ -647,13 +649,13 @@
"""
return self._yaxis_transform
- def get_yaxis_text1_transform(self, pad_pixels):
+ def get_yaxis_text1_transform(self, pad_points):
"""
Get the transformation used for drawing y-axis labels, which
- will add the given number of pad_pixels between the axes and
- the label. The x-direction is in axis coordinates and the
- y-direction is in data coordinates. Returns a 3-tuple of the
- form:
+ will add the given amount of padding (in points) between the
+ axes and the label. The x-direction is in axis coordinates
+ and the y-direction is in data coordinates. Returns a 3-tuple
+ of the form:
(transform, valign, halign)
@@ -664,14 +666,15 @@
need to place axis elements in different locations.
"""
return (self._yaxis_transform +
- mtransforms.Affine2D().translate(-1 * pad_pixels, 0),
+ mtransforms.ScaledTranslation(-1 * pad_points / 72.0, 0,
+ self.figure.dpi_scale_trans),
"center", "right")
- def get_yaxis_text2_transform(self, pad_pixels):
+ def get_yaxis_text2_transform(self, pad_points):
"""
Get the transformation used for drawing the secondary y-axis
- labels, which will add the given number of pad_pixels between
- the axes and the label. The x-direction is in axis
+ labels, which will add the given amount of padding (in points)
+ between the axes and the label. The x-direction is in axis
coordinates and the y-direction is in data coordinates.
Returns a 3-tuple of the form:
@@ -684,7 +687,8 @@
need to place axis elements in different locations.
"""
return (self._yaxis_transform +
- mtransforms.Affine2D().translate(pad_pixels, 0),
+ mtransforms.ScaledTranslation(-1 * pad_points / 72.0, 0,
+ self.figure.dpi_scale_trans),
"center", "left")
def _update_transScale(self):
@@ -4287,7 +4291,6 @@
if sym is not None:
if symstyle==0:
collection = mcoll.RegularPolyCollection(
- self.figure.dpi,
numsides, rotation, scales,
facecolors = colors,
edgecolors = edgecolors,
@@ -4297,7 +4300,6 @@
)
elif symstyle==1:
collection = mcoll.StarPolygonCollection(
- self.figure.dpi,
numsides, rotation, scales,
facecolors = colors,
edgecolors = edgecolors,
@@ -4307,7 +4309,6 @@
)
elif symstyle==2:
collection = mcoll.AsteriskPolygonCollection(
- self.figure.dpi,
numsides, rotation, scales,
facecolors = colors,
edgecolors = edgecolors,
@@ -4316,6 +4317,7 @@
transOffset = self.transData,
)
else:
+ # MGDTODO: This has dpi problems
# rescale verts
rescale = npy.sqrt(max(verts[:,0]**2+verts[:,1]**2))
verts /= rescale
Modified: trunk/matplotlib/lib/matplotlib/axis.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/axis.py 2008-01-29 20:50:53 UTC (rev 4908)
+++ trunk/matplotlib/lib/matplotlib/axis.py 2008-01-31 14:21:49 UTC (rev 4909)
@@ -223,9 +223,9 @@
# get the affine as an a,b,c,d,tx,ty list
# x in data coords, y in axes coords
#t = Text(
- trans, vert, horiz = self.axes.get_xaxis_text1_transform(self.get_pad_pixels())
+ trans, vert, horiz = self.axes.get_xaxis_text1_transform(self._pad)
- t = TextWithDash(
+ t = TextWithDash(
x=0, y=0,
fontproperties=FontProperties(size=rcParams['xtick.labelsize']),
color=rcParams['xtick.color'],
@@ -245,7 +245,7 @@
'Get the default Text 2 instance'
# x in data coords, y in axes coords
#t = Text(
- trans, vert, horiz = self.axes.get_xaxis_text2_transform(self.get_pad_pixels())
+ trans, vert, horiz = self.axes.get_xaxis_text2_transform(self._pad)
t = TextWithDash(
x=0, y=1,
@@ -358,7 +358,7 @@
'Get the default Text instance'
# x in axes coords, y in data coords
#t = Text(
- trans, vert, horiz = self.axes.get_yaxis_text1_transform(self.get_pad_pixels())
+ trans, vert, horiz = self.axes.get_yaxis_text1_transform(self._pad)
t = TextWithDash(
x=0, y=0,
@@ -378,7 +378,7 @@
'Get the default Text instance'
# x in axes coords, y in data coords
#t = Text(
- trans, vert, horiz = self.axes.get_yaxis_text2_transform(self.get_pad_pixels())
+ trans, vert, horiz = self.axes.get_yaxis_text2_transform(self._pad)
t = TextWithDash(
x=1, y=0,
Modified: trunk/matplotlib/lib/matplotlib/collections.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/collections.py 2008-01-29 20:50:53 UTC (rev 4908)
+++ trunk/matplotlib/lib/matplotlib/collections.py 2008-01-31 14:21:49 UTC (rev 4909)
@@ -505,7 +505,6 @@
_path_generator = mpath.Path.unit_regular_polygon
def __init__(self,
- dpi,
numsides,
rotation = 0 ,
sizes = (1,),
@@ -532,7 +531,6 @@
black = (0,0,0,1)
collection = RegularPolyCollection(
- fig.dpi,
numsides=5, # a pentagon
rotation=0,
sizes=(50,),
@@ -545,18 +543,21 @@
"""
Collection.__init__(self,**kwargs)
self._sizes = sizes
- self._dpi = dpi
self._paths = [self._path_generator(numsides)]
+ self._rotation = rotation
+ self.set_transform(transforms.IdentityTransform())
+
+ __init__.__doc__ = cbook.dedent(__init__.__doc__) % artist.kwdocd
+
+ def draw(self, renderer):
# sizes is the area of the circle circumscribing the polygon
# in points^2
self._transforms = [
- transforms.Affine2D().rotate(-rotation).scale(
- (math.sqrt(x) * self._dpi / 72.0) / math.sqrt(math.pi))
- for x in sizes]
- self.set_transform(transforms.IdentityTransform())
+ transforms.Affine2D().rotate(-self._rotation).scale(
+ (npy.sqrt(x) * renderer.dpi / 72.0) / npy.sqrt(npy.pi))
+ for x in self._sizes]
+ return Collection.draw(self, renderer)
- __init__.__doc__ = cbook.dedent(__init__.__doc__) % artist.kwdocd
-
def get_paths(self):
return self._paths
Modified: trunk/matplotlib/lib/matplotlib/figure.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/figure.py 2008-01-29 20:50:53 UTC (rev 4908)
+++ trunk/matplotlib/lib/matplotlib/figure.py 2008-01-31 14:21:49 UTC (rev 4909)
@@ -122,10 +122,10 @@
if facecolor is None: facecolor = rcParams['figure.facecolor']
if edgecolor is None: edgecolor = rcParams['figure.edgecolor']
- self._dpi_scale_trans = Affine2D()
+ self.dpi_scale_trans = Affine2D()
self.dpi = dpi
self.bbox_inches = Bbox.from_bounds(0, 0, *figsize)
- self.bbox = TransformedBbox(self.bbox_inches, self._dpi_scale_trans)
+ self.bbox = TransformedBbox(self.bbox_inches, self.dpi_scale_trans)
self.frameon = frameon
@@ -157,7 +157,7 @@
return self._dpi
def _set_dpi(self, dpi):
self._dpi = dpi
- self._dpi_scale_trans.clear().scale(dpi, dpi)
+ self.dpi_scale_trans.clear().scale(dpi, dpi)
dpi = property(_get_dpi, _set_dpi)
def enable_auto_layout(self, setting=True):
Modified: trunk/matplotlib/lib/matplotlib/patches.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/patches.py 2008-01-29 20:50:53 UTC (rev 4908)
+++ trunk/matplotlib/lib/matplotlib/patches.py 2008-01-31 14:21:49 UTC (rev 4909)
@@ -727,11 +727,11 @@
def __str__(self):
return "YAArrow()"
- def __init__(self, dpi, xytip, xybase, width=4, frac=0.1, headwidth=12, **kwargs):
+ def __init__(self, figure, xytip, xybase, width=4, frac=0.1, headwidth=12, **kwargs):
"""
xytip : (x,y) location of arrow tip
xybase : (x,y) location the arrow base mid point
- dpi : the figure dpi instance (fig.dpi)
+ figure : the figure instance (fig.dpi)
width : the width of the arrow in points
frac : the fraction of the arrow length occupied by the head
headwidth : the width of the base of the arrow head in points
@@ -740,7 +740,7 @@
%(Patch)s
"""
- self.dpi = dpi
+ self.figure = figure
self.xytip = xytip
self.xybase = xybase
self.width = width
@@ -756,8 +756,8 @@
# the base vertices
x1, y1 = self.xytip
x2, y2 = self.xybase
- k1 = self.width*self.dpi/72./2.
- k2 = self.headwidth*self.dpi/72./2.
+ k1 = self.width*self.figure.dpi/72./2.
+ k2 = self.headwidth*self.figure.dpi/72./2.
xb1, yb1, xb2, yb2 = self.getpoints(x1, y1, x2, y2, k1)
# a point on the segment 20% of the distance from the tip to the base
Modified: trunk/matplotlib/lib/matplotlib/projections/geo.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/projections/geo.py 2008-01-29 20:50:53 UTC (rev 4908)
+++ trunk/matplotlib/lib/matplotlib/projections/geo.py 2008-01-31 14:21:49 UTC (rev 4909)
@@ -120,19 +120,19 @@
def get_xaxis_transform(self):
return self._xaxis_transform
- def get_xaxis_text1_transform(self, pixelPad):
+ def get_xaxis_text1_transform(self, pad):
return self._xaxis_text1_transform, 'bottom', 'center'
- def get_xaxis_text2_transform(self, pixelPad):
+ def get_xaxis_text2_transform(self, pad):
return self._xaxis_text2_transform, 'top', 'center'
def get_yaxis_transform(self):
return self._yaxis_transform
- def get_yaxis_text1_transform(self, pixelPad):
+ def get_yaxis_text1_transform(self, pad):
return self._yaxis_text1_transform, 'center', 'right'
- def get_yaxis_text2_transform(self, pixelPad):
+ def get_yaxis_text2_transform(self, pad):
return self._yaxis_text2_transform, 'center', 'left'
def get_axes_patch(self):
Modified: trunk/matplotlib/lib/matplotlib/projections/polar.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/projections/polar.py 2008-01-29 20:50:53 UTC (rev 4908)
+++ trunk/matplotlib/lib/matplotlib/projections/polar.py 2008-01-31 14:21:49 UTC (rev 4909)
@@ -252,19 +252,19 @@
def get_xaxis_transform(self):
return self._xaxis_transform
- def get_xaxis_text1_transform(self, pixelPad):
+ def get_xaxis_text1_transform(self, pad):
return self._xaxis_text1_transform, 'center', 'center'
- def get_xaxis_text2_transform(self, pixelPad):
+ def get_xaxis_text2_transform(self, pad):
return self._xaxis_text2_transform, 'center', 'center'
def get_yaxis_transform(self):
return self._yaxis_transform
- def get_yaxis_text1_transform(self, pixelPad):
+ def get_yaxis_text1_transform(self, pad):
return self._yaxis_text1_transform, 'center', 'center'
- def get_yaxis_text2_transform(self, pixelPad):
+ def get_yaxis_text2_transform(self, pad):
return self._yaxis_text2_transform, 'center', 'center'
def get_axes_patch(self):
Modified: trunk/matplotlib/lib/matplotlib/text.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/text.py 2008-01-29 20:50:53 UTC (rev 4908)
+++ trunk/matplotlib/lib/matplotlib/text.py 2008-01-31 14:21:49 UTC (rev 4909)
@@ -1195,7 +1195,7 @@
dx = shrink*r*math.cos(theta)
dy = shrink*r*math.sin(theta)
- self.arrow = YAArrow(self.figure.dpi, (x0+dx,y0+dy), (x-dx, y-dy),
+ self.arrow = YAArrow(self.figure, (x0+dx,y0+dy), (x-dx, y-dy),
width=width, headwidth=headwidth, frac=frac,
**d)
self.arrow.set_clip_box(self.get_clip_box())
Modified: trunk/matplotlib/lib/matplotlib/transforms.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/transforms.py 2008-01-29 20:50:53 UTC (rev 4908)
+++ trunk/matplotlib/lib/matplotlib/transforms.py 2008-01-31 14:21:49 UTC (rev 4909)
@@ -1898,6 +1898,32 @@
get_matrix.__doc__ = Affine2DBase.get_matrix.__doc__
+class ScaledTranslation(Affine2DBase):
+ def __init__(self, xt, yt, scale_trans):
+ Affine2DBase.__init__(self)
+ self._t = (xt, yt)
+ self._scale_trans = scale_trans
+ self.set_children(scale_trans)
+ self._mtx = None
+ self._inverted = None
+
+ def __repr__(self):
+ return "ScaledTranslation(%s)" % (self._t)
+ __str__ = __repr__
+
+ def get_matrix(self):
+ if self._invalid:
+ xt, yt = self._scale_trans.transform_point(self._t)
+ self._mtx = npy.array([[1.0, 0.0, xt],
+ [0.0, 1.0, yt],
+ [0.0, 0.0, 1.0]],
+ npy.float_)
+ self._invalid = 0
+ self._inverted = None
+ return self._mtx
+ get_matrix.__doc__ = Affine2DBase.get_matrix.__doc__
+
+
class TransformedPath(TransformNode):
"""
A TransformedPath caches a non-affine transformed copy of the
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|