Revision: 4603
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4603&view=rev
Author: mdboom
Date: 2007-12-04 13:33:33 -0800 (Tue, 04 Dec 2007)
Log Message:
-----------
Add experimental support for auto-layout of axes on the figure, to
prevent ticks and labels from overlapping things in other axes.
Modified Paths:
--------------
branches/transforms/examples/backend_driver.py
branches/transforms/examples/colorbar_only.py
branches/transforms/examples/figlegend_demo.py
branches/transforms/examples/finance_demo.py
branches/transforms/examples/mathtext_demo.py
branches/transforms/examples/simple_plot.py
branches/transforms/lib/matplotlib/axes.py
branches/transforms/lib/matplotlib/axis.py
branches/transforms/lib/matplotlib/figure.py
branches/transforms/lib/matplotlib/projections/polar.py
branches/transforms/lib/matplotlib/rcsetup.py
Added Paths:
-----------
branches/transforms/examples/auto_layout.py
Added: branches/transforms/examples/auto_layout.py
===================================================================
--- branches/transforms/examples/auto_layout.py (rev 0)
+++ branches/transforms/examples/auto_layout.py 2007-12-04 21:33:33 UTC (rev
4603)
@@ -0,0 +1,34 @@
+#!/usr/bin/env python
+"""
+Example: simple line plot.
+Show how to make and save a simple line plot with labels, title and grid
+"""
+from pylab import *
+
+t = arange(0.0, 1.0+0.01, 0.01)
+s = cos(2*2*pi*t)
+ax1 = subplot(211)
+plot(t, s, '-', lw=2)
+
+xlabel('xlabel for bottom axes')
+ylabel('ylabel on the right')
+title('About as simple as it gets, folks')
+grid(True)
+ax1.yaxis.set_label_position('right')
+ax1.xaxis.set_ticklabels(['Monday', 'Tuesday', 'Wednesday', 'Thursday',
'Friday'])
+for label in ax1.get_xticklabels():
+ label.set_rotation(45)
+
+ax2 = subplot(212)
+plot(t, s, '-', lw=2)
+grid(True)
+xlabel('xlabel for bottom axes (the ticks are on the top for no good reason)')
+ylabel('I\'m a lefty')
+ax2.xaxis.set_label_position('bottom')
+ax2.xaxis.set_ticks_position('top')
+
+
+#savefig('simple_plot.png')
+savefig('simple_plot')
+
+show()
Property changes on: branches/transforms/examples/auto_layout.py
___________________________________________________________________
Name: svn:executable
+ *
Modified: branches/transforms/examples/backend_driver.py
===================================================================
--- branches/transforms/examples/backend_driver.py 2007-12-04 21:30:06 UTC
(rev 4602)
+++ branches/transforms/examples/backend_driver.py 2007-12-04 21:33:33 UTC
(rev 4603)
@@ -23,6 +23,7 @@
'alignment_test.py',
'arctest.py',
'arrow_demo.py',
+ 'auto_layout.py',
'axes_demo.py',
'axhspan_demo.py',
'bar_stacked.py',
@@ -35,7 +36,7 @@
'cohere_demo.py',
'contour_demo.py',
'contourf_demo.py',
- 'csd_demo.py',
+ 'csd_demo.py',
'custom_ticker1.py',
'customize_rc.py',
'date_demo1.py',
Modified: branches/transforms/examples/colorbar_only.py
===================================================================
--- branches/transforms/examples/colorbar_only.py 2007-12-04 21:30:06 UTC
(rev 4602)
+++ branches/transforms/examples/colorbar_only.py 2007-12-04 21:33:33 UTC
(rev 4603)
@@ -7,7 +7,7 @@
# Make a figure and axes with dimensions as desired.
fig = pylab.figure(figsize=(8,1.5))
-ax = fig.add_axes([0.05, 0.4, 0.9, 0.5])
+ax = fig.add_axes([0.05, 0.05, 0.9, 0.9])
# Set the colormap and norm to correspond to the data for which
# the colorbar will be used.
Modified: branches/transforms/examples/figlegend_demo.py
===================================================================
--- branches/transforms/examples/figlegend_demo.py 2007-12-04 21:30:06 UTC
(rev 4602)
+++ branches/transforms/examples/figlegend_demo.py 2007-12-04 21:33:33 UTC
(rev 4603)
@@ -1,7 +1,7 @@
#!/usr/bin/env python
from pylab import *
-ax1 = axes([0.1, 0.1, 0.4, 0.7])
+ax1 = axes([0.05, 0.1, 0.4, 0.7])
ax2 = axes([0.55, 0.1, 0.4, 0.7])
x = arange(0.0, 2.0, 0.02)
Modified: branches/transforms/examples/finance_demo.py
===================================================================
--- branches/transforms/examples/finance_demo.py 2007-12-04 21:30:06 UTC
(rev 4602)
+++ branches/transforms/examples/finance_demo.py 2007-12-04 21:33:33 UTC
(rev 4603)
@@ -22,7 +22,7 @@
raise SystemExit
fig = figure()
-fig.subplots_adjust(bottom=0.2)
+# fig.subplots_adjust(bottom=0.2)
ax = fig.add_subplot(111)
ax.xaxis.set_major_locator(mondays)
ax.xaxis.set_minor_locator(alldays)
Modified: branches/transforms/examples/mathtext_demo.py
===================================================================
--- branches/transforms/examples/mathtext_demo.py 2007-12-04 21:30:06 UTC
(rev 4602)
+++ branches/transforms/examples/mathtext_demo.py 2007-12-04 21:33:33 UTC
(rev 4603)
@@ -7,7 +7,7 @@
from matplotlib.pyplot import figure, show
fig = figure()
-fig.subplots_adjust(bottom=0.2)
+# fig.subplots_adjust(bottom=0.2)
ax = fig.add_subplot(111, axisbg='y')
ax.plot([1,2,3], 'r')
Modified: branches/transforms/examples/simple_plot.py
===================================================================
--- branches/transforms/examples/simple_plot.py 2007-12-04 21:30:06 UTC (rev
4602)
+++ branches/transforms/examples/simple_plot.py 2007-12-04 21:33:33 UTC (rev
4603)
@@ -13,6 +13,9 @@
ylabel('voltage (mV)')
title('About as simple as it gets, folks')
grid(True)
+axes().xaxis.set_label_position('top')
+axes().xaxis.set_ticks_position('top')
+axes().yaxis.set_label_position('right')
#savefig('simple_plot.png')
savefig('simple_plot')
Modified: branches/transforms/lib/matplotlib/axes.py
===================================================================
--- branches/transforms/lib/matplotlib/axes.py 2007-12-04 21:30:06 UTC (rev
4602)
+++ branches/transforms/lib/matplotlib/axes.py 2007-12-04 21:33:33 UTC (rev
4603)
@@ -770,13 +770,14 @@
self.grid(self._gridOn)
props = font_manager.FontProperties(size=rcParams['axes.titlesize'])
+ self.titleOffsetTrans = mtransforms.Affine2D().translate(0.0, 10.0)
self.title = mtext.Text(
- x=0.5, y=1.02, text='',
+ x=0.5, y=1.0, text='',
fontproperties=props,
verticalalignment='bottom',
horizontalalignment='center',
)
- self.title.set_transform(self.transAxes)
+ self.title.set_transform(self.transAxes + self.titleOffsetTrans)
self.title.set_clip_box(None)
self._set_artist_props(self.title)
@@ -800,6 +801,8 @@
self.xaxis.set_clip_path(self.axesPatch)
self.yaxis.set_clip_path(self.axesPatch)
+ self.titleOffsetTrans.clear()
+
def clear(self):
'clear the axes'
self.cla()
@@ -905,14 +908,14 @@
ysize = max(math.fabs(ymax-ymin), 1e-30)
return ysize/xsize
- def apply_aspect(self):
+ def apply_aspect(self, position):
'''
Use self._aspect and self._adjustable to modify the
axes box or the view limits.
'''
aspect = self.get_aspect()
if aspect == 'auto':
- self.set_position( self._originalPosition , 'active')
+ self.set_position( position , 'active')
return
if aspect == 'equal':
@@ -929,7 +932,7 @@
fig_aspect = figH/figW
if self._adjustable == 'box':
box_aspect = A * self.get_data_ratio()
- pb = self._originalPosition.frozen()
+ pb = position.frozen()
pb1 = pb.shrunk_to_aspect(box_aspect, pb, fig_aspect)
self.set_position(pb1.anchored(self.get_anchor(), pb), 'active')
return
@@ -939,7 +942,7 @@
ymin,ymax = self.get_ybound()
ysize = max(math.fabs(ymax-ymin), 1e-30)
- l,b,w,h = self.get_position(original=True).bounds
+ l,b,w,h = position.bounds
box_aspect = fig_aspect * (h/w)
data_ratio = box_aspect / A
@@ -1014,7 +1017,7 @@
self.set_autoscale_on(True)
self.set_aspect('auto')
self.autoscale_view()
- self.apply_aspect()
+ # self.apply_aspect()
if s=='equal':
self.set_aspect('equal', adjustable='datalim')
elif s == 'scaled':
@@ -1289,6 +1292,32 @@
YL = ylocator.autoscale()
self.set_ybound(YL)
+ def update_layout(self, renderer):
+ pad_pixels = rcParams['xtick.major.pad'] * self.figure.dpi / 72.0
+ inverse_transFigure = self.figure.transFigure.inverted()
+ t_text, b_text = self.xaxis.get_text_heights(renderer)
+ l_text, r_text = self.yaxis.get_text_widths(renderer)
+ title_height = self.title.get_window_extent(renderer).height
+ title_height += pad_pixels * 2.0
+ original_t_text = t_text
+
+ ((l_text, t_text),
+ (r_text, b_text),
+ (dummy, title_height)) = inverse_transFigure.transform(
+ ((l_text, t_text),
+ (r_text, b_text),
+ (0.0, title_height)))
+ x0, y0, x1, y1 = self.get_position(True).extents
+ # Adjust the title
+ self.titleOffsetTrans.clear().translate(
+ 0, original_t_text + pad_pixels * 2.0)
+
+ new_position = mtransforms.Bbox.from_extents(
+ x0 + l_text, y0 + b_text,
+ x1 - r_text, y1 - t_text - title_height)
+
+ self.set_position(new_position, 'active')
+
#### Drawing
def draw(self, renderer=None, inframe=False):
"Draw everything (plot lines, axes, labels)"
@@ -1299,8 +1328,9 @@
raise RuntimeError('No renderer defined')
if not self.get_visible(): return
renderer.open_group('axes')
- self.apply_aspect()
+ self.apply_aspect(self.get_position())
+
if self.axison and self._frameon:
self.axesPatch.draw(renderer)
Modified: branches/transforms/lib/matplotlib/axis.py
===================================================================
--- branches/transforms/lib/matplotlib/axis.py 2007-12-04 21:30:06 UTC (rev
4602)
+++ branches/transforms/lib/matplotlib/axis.py 2007-12-04 21:33:33 UTC (rev
4603)
@@ -130,11 +130,11 @@
ACCEPTS: float
"""
- self._pad.set(val)
+ self._pad = val
def get_pad(self, val):
'Get the value of the tick label pad in points'
- return self._pad.get()
+ return self._pad
def _get_text1(self):
'Get the default Text 1 instance'
@@ -578,30 +578,43 @@
if a is None: return
a.set_figure(self.figure)
- def draw(self, renderer, *args, **kwargs):
- 'Draw the axis lines, grid lines, tick lines and labels'
- if not self.get_visible(): return
- renderer.open_group(__name__)
- ticklabelBoxes = []
- ticklabelBoxes2 = []
-
+ def iter_ticks(self):
+ """
+ Iterate through all of the major and minor ticks.
+ """
majorLocs = self.major.locator()
majorTicks = self.get_major_ticks(len(majorLocs))
self.major.formatter.set_locs(majorLocs)
majorLabels = [self.major.formatter(val, i) for i, val in
enumerate(majorLocs)]
+ minorLocs = self.minor.locator()
+ minorTicks = self.get_minor_ticks(len(minorLocs))
+ self.minor.formatter.set_locs(minorLocs)
+ minorLabels = [self.minor.formatter(val, i) for i, val in
enumerate(minorLocs)]
- seen = {}
+ major_minor = [
+ (majorTicks, majorLocs, majorLabels),
+ (minorTicks, minorLocs, minorLabels)]
+ for group in major_minor:
+ for tick in zip(*group):
+ yield tick
+
+ def get_ticklabel_extents(self, renderer):
+ """
+ Get the extents of the tick labels on either side
+ of the axes.
+ """
+ ticklabelBoxes = []
+ ticklabelBoxes2 = []
+
interval = self.get_view_interval()
- for tick, loc, label in zip(majorTicks, majorLocs, majorLabels):
+ for tick, loc, label in self.iter_ticks():
if tick is None: continue
if not interval_contains(interval, loc): continue
- seen[loc] = 1
tick.update_position(loc)
tick.set_label1(label)
tick.set_label2(label)
- tick.draw(renderer)
if tick.label1On and tick.label1.get_visible():
extent = tick.label1.get_window_extent(renderer)
ticklabelBoxes.append(extent)
@@ -609,19 +622,30 @@
extent = tick.label2.get_window_extent(renderer)
ticklabelBoxes2.append(extent)
- minorLocs = self.minor.locator()
- minorTicks = self.get_minor_ticks(len(minorLocs))
- self.minor.formatter.set_locs(minorLocs)
- minorLabels = [self.minor.formatter(val, i) for i, val in
enumerate(minorLocs)]
+ if len(ticklabelBoxes):
+ bbox = Bbox.union(ticklabelBoxes)
+ else:
+ bbox = Bbox.from_extents(0, 0, 0, 0)
+ if len(ticklabelBoxes2):
+ bbox2 = Bbox.union(ticklabelBoxes2)
+ else:
+ bbox2 = Bbox.from_extents(0, 0, 0, 0)
+ return bbox, bbox2
- for tick, loc, label in zip(minorTicks, minorLocs, minorLabels):
+ def draw(self, renderer, *args, **kwargs):
+ 'Draw the axis lines, grid lines, tick lines and labels'
+ ticklabelBoxes = []
+ ticklabelBoxes2 = []
+
+ if not self.get_visible(): return
+ renderer.open_group(__name__)
+ interval = self.get_view_interval()
+ for tick, loc, label in self.iter_ticks():
if tick is None: continue
if not interval_contains(interval, loc): continue
- #if seen.has_key(loc): continue
tick.update_position(loc)
tick.set_label1(label)
tick.set_label2(label)
-
tick.draw(renderer)
if tick.label1On and tick.label1.get_visible():
extent = tick.label1.get_window_extent(renderer)
@@ -1142,6 +1166,28 @@
bottom = bbox.y0
self.offsetText.set_position((x,
bottom-self.OFFSETTEXTPAD*self.figure.dpi/72.0))
+ def get_text_heights(self, renderer):
+ """
+ Returns the amount of space one should reserve for text
+ above and below the axes. Returns a tuple (above, below)
+ """
+ bbox, bbox2 = self.get_ticklabel_extents(renderer)
+ # MGDTODO: Need a better way to get the pad
+ padPixels = self.majorTicks[0]._padPixels
+
+ above = 0.0
+ if bbox2.height:
+ above += bbox2.height + padPixels
+ below = 0.0
+ if bbox.height:
+ below += bbox.height + padPixels
+
+ if self.get_label_position() == 'top':
+ above += self.label.get_window_extent(renderer).height + padPixels
+ else:
+ below += self.label.get_window_extent(renderer).height + padPixels
+ return above, below
+
def set_ticks_position(self, position):
"""
Set the ticks position (top, bottom, both, default or none)
@@ -1360,6 +1406,24 @@
self.offsetText.set_ha(position)
self.offsetText.set_position((x,y))
+ def get_text_widths(self, renderer):
+ bbox, bbox2 = self.get_ticklabel_extents(renderer)
+ # MGDTODO: Need a better way to get the pad
+ padPixels = self.majorTicks[0]._padPixels
+
+ left = 0.0
+ if bbox.width:
+ left += bbox.width + padPixels
+ right = 0.0
+ if bbox2.width:
+ right += bbox2.width + padPixels
+
+ if self.get_label_position() == 'left':
+ left += self.label.get_window_extent(renderer).width + padPixels
+ else:
+ right += self.label.get_window_extent(renderer).width + padPixels
+ return left, right
+
def set_ticks_position(self, position):
"""
Set the ticks position (left, right, both or default)
Modified: branches/transforms/lib/matplotlib/figure.py
===================================================================
--- branches/transforms/lib/matplotlib/figure.py 2007-12-04 21:30:06 UTC
(rev 4602)
+++ branches/transforms/lib/matplotlib/figure.py 2007-12-04 21:33:33 UTC
(rev 4603)
@@ -6,7 +6,7 @@
import artist
from artist import Artist
from axes import Axes, SubplotBase, subplot_class_factory
-from cbook import flatten, allequal, Stack, iterable, dedent
+from cbook import flatten, allequal, Stack, iterable, dedent, set
import _image
import colorbar as cbar
from image import FigureImage
@@ -100,7 +100,7 @@
def __str__(self):
return "Figure(%gx%g)" % tuple(self.bbox.size)
-
+
def __init__(self,
figsize = None, # defaults to rc figure.figsize
dpi = None, # defaults to rc figure.dpi
@@ -126,7 +126,7 @@
self.dpi = dpi
self.bbox_inches = Bbox.from_bounds(0, 0, *figsize)
self.bbox = TransformedBbox(self.bbox_inches, self._dpi_scale_trans)
-
+
self.frameon = frameon
self.transFigure = BboxTransformTo(self.bbox)
@@ -158,7 +158,7 @@
self._dpi = dpi
self._dpi_scale_trans.clear().scale(dpi, dpi)
dpi = property(_get_dpi, _set_dpi)
-
+
def autofmt_xdate(self, bottom=0.2, rotation=30, ha='right'):
"""
A common use case is a number of subplots with shared xaxes
@@ -181,7 +181,7 @@
else:
for label in ax.get_xticklabels():
label.set_visible(False)
- self.subplots_adjust(bottom=bottom)
+ #self.subplots_adjust(bottom=bottom)
def get_children(self):
'get a list of artists contained in the figure'
@@ -322,7 +322,7 @@
dpival = self.dpi
self.bbox_inches.p1 = w, h
-
+
if forward:
dpival = self.dpi
canvasw = w*dpival
@@ -389,7 +389,7 @@
ACCEPTS: float
"""
self.bbox_inches.x1 = val
-
+
def set_figheight(self, val):
"""
Set the height of the figure in inches
@@ -448,7 +448,7 @@
provided, which is equivalent to projection='polar').
Valid values for "projection" are: %s. Some of these projections
support additional kwargs, which may be provided to add_axes.
-
+
rect = l,b,w,h
add_axes(rect)
add_axes(rect, frameon=False, axisbg='g')
@@ -469,7 +469,7 @@
add_axes(rect, label='axes2')
The Axes instance will be returned
-
+
The following kwargs are supported:
%s
""" % (", ".join(get_projection_names()), '%(Axes)s')
@@ -496,7 +496,7 @@
"Only one of these arguments should be supplied." %
projection)
projection = 'polar'
-
+
a = projection_factory(projection, self, rect, **kwargs)
self.axes.append(a)
@@ -524,7 +524,7 @@
be provided to add_axes.
The Axes instance will be returned.
-
+
If the figure already has a subplot with key *args, *kwargs then it
will
simply make that subplot current and return it
@@ -623,7 +623,40 @@
renderer.draw_image(l, b, im, self.bbox,
*self.get_transformed_clip_path_and_affine())
+ # update the positions of the axes
+ # This gives each of the axes the opportunity to resize itself
+ # based on the tick and axis labels etc., and then makes sure
+ # that any axes that began life aligned to another axes remains
+ # aligned after these adjustments
+ if len(self.axes) > 1:
+ aligned_positions = [{}, {}, {}, {}]
+ for a in self.axes:
+ a.update_layout(renderer)
+ orig_pos = a.get_position(True)
+ curr_pos = a.get_position()
+ for pos, orig, curr in zip(aligned_positions,
+ orig_pos.get_points().flatten(),
+ curr_pos.get_points().flatten()):
+ if orig in pos:
+ pos[orig][0].append(a)
+ pos[orig][1].add(curr)
+ else:
+ pos[orig] = [[a], set([curr])]
+ for i, pos in enumerate(aligned_positions):
+ for axes, places in pos.values():
+ if len(places) > 1:
+ if i < 2:
+ curr = max(places)
+ else:
+ curr = min(places)
+ for a in axes:
+ curr_pos = a.get_position().frozen()
+ curr_pos.get_points()[i/2, i%2] = curr
+ a.set_position(curr_pos, 'active')
+ else:
+ for a in self.axes: a.update_layout(renderer)
+
# render the axes
for a in self.axes: a.draw(renderer)
Modified: branches/transforms/lib/matplotlib/projections/polar.py
===================================================================
--- branches/transforms/lib/matplotlib/projections/polar.py 2007-12-04
21:30:06 UTC (rev 4602)
+++ branches/transforms/lib/matplotlib/projections/polar.py 2007-12-04
21:33:33 UTC (rev 4603)
@@ -20,7 +20,7 @@
Theta starts pointing east and goes anti-clockwise.
"""
name = 'polar'
-
+
class PolarTransform(Transform):
"""
The base polar transform. This handles projection theta and r into
@@ -61,10 +61,10 @@
ipath = path.interpolated(self._resolution)
return Path(self.transform(ipath.vertices), ipath.codes)
transform_path.__doc__ = Transform.transform_path.__doc__
-
+
transform_path_non_affine = transform_path
transform_path_non_affine.__doc__ =
Transform.transform_path_non_affine.__doc__
-
+
def inverted(self):
return PolarAxes.InvertedPolarTransform()
inverted.__doc__ = Transform.inverted.__doc__
@@ -95,7 +95,7 @@
self._invalid = 0
return self._mtx
get_matrix.__doc__ = Affine2DBase.get_matrix.__doc__
-
+
class InvertedPolarTransform(Transform):
"""
The inverse of the polar transform, mapping Cartesian
@@ -130,7 +130,7 @@
class RadialLocator(Locator):
"""
Used to locate radius ticks.
-
+
Ensures that all ticks are strictly positive. For all other
tasks, it delegates to the base Locator (which may be
different depending on the scale of the r-axis.
@@ -155,12 +155,12 @@
return self.base.refresh()
RESOLUTION = 75
-
+
def __init__(self, *args, **kwargs):
"""
Create a new Polar Axes for a polar plot.
"""
-
+
self._rpad = 0.05
Axes.__init__(self, *args, **kwargs)
self.set_aspect('equal', adjustable='box', anchor='C')
@@ -179,8 +179,6 @@
self.xaxis.set_ticks_position('none')
self.yaxis.set_ticks_position('none')
- self.title.set_y(1.06)
-
def _set_lim_and_transforms(self):
self.dataLim = Bbox.unit()
self.viewLim = Bbox.unit()
@@ -239,9 +237,17 @@
self._yaxis_transform
)
+ def update_layout(self, renderer):
+ t_text, b_text = self.xaxis.get_text_heights(renderer)
+ l_text, r_text = self.yaxis.get_text_widths(renderer)
+ originalPosition = self.get_position(True)
+ title_offset = (b_text - originalPosition.transformed(
+ self.figure.transFigure).height) / 2.0
+ self.titleOffsetTrans.clear().translate(0, title_offset)
+
def get_xaxis_transform(self):
return self._xaxis_transform
-
+
def get_xaxis_text1_transform(self, pixelPad):
return self._xaxis_text1_transform, 'center', 'center'
@@ -250,16 +256,16 @@
def get_yaxis_transform(self):
return self._yaxis_transform
-
+
def get_yaxis_text1_transform(self, pixelPad):
return self._yaxis_text1_transform, 'center', 'center'
def get_yaxis_text2_transform(self, pixelPad):
return self._yaxis_text2_transform, 'center', 'center'
-
+
def get_axes_patch(self):
return Circle((0.5, 0.5), 0.5)
-
+
def set_rmax(self, rmax):
self.viewLim.y1 = rmax
angle = self._r_label1_position.to_values()[4]
@@ -275,7 +281,7 @@
Axes.set_yscale(self, *args, **kwargs)
self.yaxis.set_major_locator(
self.RadialLocator(self.yaxis.get_major_locator()))
-
+
set_rscale = Axes.set_yscale
set_rticks = Axes.set_yticks
@@ -313,7 +319,7 @@
for t in self.xaxis.get_ticklabels():
t.update(kwargs)
set_thetagrids.__doc__ = cbook.dedent(set_thetagrids.__doc__) % kwdocd
-
+
def set_rgrids(self, radii, labels=None, angle=None, rpad=None, **kwargs):
"""
set the radial locations and labels of the r grids
@@ -354,9 +360,9 @@
self._r_label2_position.clear().translate(angle, -self._rpad * rmax)
for t in self.yaxis.get_ticklabels():
t.update(kwargs)
-
+
set_rgrids.__doc__ = cbook.dedent(set_rgrids.__doc__) % kwdocd
-
+
def set_xscale(self, scale, *args, **kwargs):
if scale != 'linear':
raise NotImplementedError("You can not set the xscale on a polar
plot.")
@@ -364,7 +370,7 @@
def set_xlim(self, *args, **kargs):
# The xlim is fixed, no matter what you do
self.viewLim.intervalx = (0.0, npy.pi * 2.0)
-
+
def format_coord(self, theta, r):
'return a format string formatting the coordinate'
theta /= math.pi
@@ -387,7 +393,7 @@
Return True if this axes support the zoom box
"""
return False
-
+
def start_pan(self, x, y, button):
angle = self._r_label1_position.to_values()[4] / 180.0 * npy.pi
mode = ''
@@ -398,7 +404,7 @@
mode = 'drag_r_labels'
elif button == 3:
mode = 'zoom'
-
+
self._pan_start = cbook.Bunch(
rmax = self.get_rmax(),
trans = self.transData.frozen(),
@@ -411,14 +417,14 @@
def end_pan(self):
del self._pan_start
-
+
def drag_pan(self, button, key, x, y):
p = self._pan_start
-
+
if p.mode == 'drag_r_labels':
startt, startr = p.trans_inverse.transform_point((p.x, p.y))
t, r = p.trans_inverse.transform_point((x, y))
-
+
# Deal with theta
dt0 = t - startt
dt1 = startt - t
@@ -433,24 +439,24 @@
p.r_label_angle - dt, rpad)
self._r_label2_position.clear().translate(
p.r_label_angle - dt, -rpad)
-
+
elif p.mode == 'zoom':
startt, startr = p.trans_inverse.transform_point((p.x, p.y))
t, r = p.trans_inverse.transform_point((x, y))
-
+
dr = r - startr
# Deal with r
scale = r / startr
self.set_rmax(p.rmax / scale)
-
+
# These are a couple of aborted attempts to project a polar plot using
# cubic bezier curves.
-
+
# def transform_path(self, path):
# twopi = 2.0 * npy.pi
# halfpi = 0.5 * npy.pi
-
+
# vertices = path.vertices
# t0 = vertices[0:-1, 0]
# t1 = vertices[1: , 0]
@@ -469,7 +475,7 @@
# kappa = 4.0 * ((npy.sqrt(2.0) - 1.0) / 3.0)
# kappa = 0.5
-
+
# p0 = vertices[0:-1]
# p1 = vertices[1: ]
@@ -497,17 +503,17 @@
# result[2::3, 0:1] = xk
# result[2::3, 1: ] = yk
-
+
# result[3::3] = p1
# print vertices[-2:]
# print result[-2:]
-
+
# return mpath.Path(result, codes)
-
+
# twopi = 2.0 * npy.pi
# halfpi = 0.5 * npy.pi
-
+
# vertices = path.vertices
# t0 = vertices[0:-1, 0]
# t1 = vertices[1: , 0]
@@ -518,7 +524,7 @@
# print "interpolate", interpolate
# if interpolate > 1.0:
# vertices = self.interpolate(vertices, interpolate)
-
+
# result = npy.zeros((len(vertices) * 3 - 2, 2), npy.float_)
# codes = mpath.Path.CURVE4 * npy.ones((len(vertices) * 3 - 2, ),
mpath.Path.code_type)
# result[0] = vertices[0]
@@ -547,7 +553,7 @@
# result[2::3, 0] = t1 - (tkappa * td_scaled)
# result[2::3, 1] = r1*hyp_kappa
# # result[2::3, 1] = r1 / npy.cos(tkappa * td_scaled) #
npy.sqrt(r1*r1 + ravg_kappa*ravg_kappa)
-
+
# result[3::3, 0] = t1
# result[3::3, 1] = r1
@@ -556,4 +562,4 @@
# return mpath.Path(result, codes)
# transform_path_non_affine = transform_path
-
+
Modified: branches/transforms/lib/matplotlib/rcsetup.py
===================================================================
--- branches/transforms/lib/matplotlib/rcsetup.py 2007-12-04 21:30:06 UTC
(rev 4602)
+++ branches/transforms/lib/matplotlib/rcsetup.py 2007-12-04 21:33:33 UTC
(rev 4603)
@@ -143,7 +143,7 @@
if len(s)==6 and s.isalnum(): # looks like hex
return '#' + s
-
+
if len(s)==7 and s.startswith('#') and s[1:].isalnum():
return s
@@ -198,7 +198,7 @@
return float(s)
except ValueError:
raise ValueError('not a valid font size')
-
+
def validate_font_properties(s):
parse_fontconfig_pattern(s)
return s
@@ -369,7 +369,7 @@
'mathtext.sf' : ['sans\-serif', validate_font_properties],
'mathtext.fontset' : ['cm', validate_fontset],
'mathtext.fallback_to_cm' : [True, validate_bool],
-
+
'image.aspect' : ['equal', validate_aspect], # equal, auto, a
number
'image.interpolation' : ['bilinear', str],
'image.cmap' : ['jet', str], # one of gray, jet, etc
@@ -440,12 +440,12 @@
'figure.facecolor' : [ '0.75', validate_color], # facecolor; scalar gray
'figure.edgecolor' : [ 'w', validate_color], # edgecolor; white
- 'figure.subplot.left' : [0.125, ValidateInterval(0, 1, closedmin=False,
closedmax=False)],
+ 'figure.subplot.left' : [0.1, ValidateInterval(0, 1, closedmin=False,
closedmax=False)],
'figure.subplot.right' : [0.9, ValidateInterval(0, 1, closedmin=False,
closedmax=False)],
'figure.subplot.bottom' : [0.1, ValidateInterval(0, 1, closedmin=False,
closedmax=False)],
'figure.subplot.top' : [0.9, ValidateInterval(0, 1, closedmin=False,
closedmax=False)],
- 'figure.subplot.wspace' : [0.2, ValidateInterval(0, 1, closedmin=False,
closedmax=True)],
- 'figure.subplot.hspace' : [0.2, ValidateInterval(0, 1, closedmin=False,
closedmax=True)],
+ 'figure.subplot.wspace' : [0.1, ValidateInterval(0, 1, closedmin=False,
closedmax=True)],
+ 'figure.subplot.hspace' : [0.1, ValidateInterval(0, 1, closedmin=False,
closedmax=True)],
'savefig.dpi' : [100, validate_float], # DPI
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell. From the desktop to the data center, Linux is going
mainstream. Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins