SourceForge logo
SourceForge logo
Menu

matplotlib-checkins — Commit notification. DO NOT POST to this list, just subscribe to it.

You can subscribe to this list here.

2007 Jan
Feb
Mar
Apr
May
Jun
Jul
(115)
Aug
(120)
Sep
(137)
Oct
(170)
Nov
(461)
Dec
(263)
2008 Jan
(120)
Feb
(74)
Mar
(35)
Apr
(74)
May
(245)
Jun
(356)
Jul
(240)
Aug
(115)
Sep
(78)
Oct
(225)
Nov
(98)
Dec
(271)
2009 Jan
(132)
Feb
(84)
Mar
(74)
Apr
(56)
May
(90)
Jun
(79)
Jul
(83)
Aug
(296)
Sep
(214)
Oct
(76)
Nov
(82)
Dec
(66)
2010 Jan
(46)
Feb
(58)
Mar
(51)
Apr
(77)
May
(58)
Jun
(126)
Jul
(128)
Aug
(64)
Sep
(50)
Oct
(44)
Nov
(48)
Dec
(54)
2011 Jan
(68)
Feb
(52)
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
(1)
2018 Jan
Feb
Mar
Apr
May
(1)
Jun
Jul
Aug
Sep
Oct
Nov
Dec
S M T W T F S
1
(6)
2
(17)
3
(11)
4
(12)
5
(16)
6
(6)
7
(5)
8
(8)
9
(24)
10
(15)
11
(12)
12
(22)
13
(30)
14
(16)
15
(6)
16
(15)
17
(20)
18
(4)
19
(11)
20
(16)
21
(2)
22
(17)
23
(16)
24
(18)
25
(4)
26
(9)
27
(12)
28
(2)
29
30
(4)





Showing 6 results of 6

From: <ds...@us...> - 2008年06月15日 23:53:18
Revision: 5551
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=5551&view=rev
Author: dsdale
Date: 2008年06月15日 16:53:06 -0700 (2008年6月15日)
Log Message:
-----------
added cm and collections to api reference
Modified Paths:
--------------
 trunk/matplotlib/doc/api/index.rst
 trunk/matplotlib/lib/matplotlib/cm.py
 trunk/matplotlib/lib/matplotlib/collections.py
Modified: trunk/matplotlib/doc/api/index.rst
===================================================================
--- trunk/matplotlib/doc/api/index.rst	2008年06月15日 23:05:34 UTC (rev 5550)
+++ trunk/matplotlib/doc/api/index.rst	2008年06月15日 23:53:06 UTC (rev 5551)
@@ -16,5 +16,7 @@
 axes_api.rst
 axis_api.rst
 cbook_api.rst
+ cm_api.rst
+ collections_api.rst
 pyplot_api.rst
 index_backend_api.rst
Modified: trunk/matplotlib/lib/matplotlib/cm.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/cm.py	2008年06月15日 23:05:34 UTC (rev 5550)
+++ trunk/matplotlib/lib/matplotlib/cm.py	2008年06月15日 23:53:06 UTC (rev 5551)
@@ -13,7 +13,7 @@
 
 def get_cmap(name=None, lut=None):
 """
- Get a colormap instance, defaulting to rc values if name is None
+ Get a colormap instance, defaulting to rc values if *name* is None
 """
 if name is None: name = mpl.rcParams['image.cmap']
 if lut is None: lut = mpl.rcParams['image.lut']
@@ -29,8 +29,9 @@
 
 def __init__(self, norm=None, cmap=None):
 """
- norm is a colors.normalize instance to map luminance to 0-1
- cmap is a cm colormap instance
+ *norm* is an instance of :class:`colors.Normalize` or one of
+ its subclasses, used to map luminance to 0-1. *cmap* is a
+ :mod:`cm` colormap instance, for example :data:`cm.jet`
 """
 
 self.callbacksSM = cbook.CallbackRegistry((
@@ -50,10 +51,10 @@
 self.colorbar = im, ax
 
 def to_rgba(self, x, alpha=1.0, bytes=False):
- '''Return a normalized rgba array corresponding to x.
- If x is already an rgb array, insert alpha; if it is
- already rgba, return it unchanged.
- If bytes is True, return rgba as 4 uint8s instead of 4 floats.
+ '''Return a normalized rgba array corresponding to *x*. If *x*
+ is already an rgb array, insert *alpha*; if it is already
+ rgba, return it unchanged. If *bytes* is True, return rgba as
+ 4 uint8s instead of 4 floats.
 '''
 try:
 if x.ndim == 3:
@@ -79,7 +80,7 @@
 return x
 
 def set_array(self, A):
- 'Set the image array from numpy array A'
+ 'Set the image array from numpy array *A*'
 self._A = A
 self.update_dict['array'] = True
 
@@ -97,8 +98,8 @@
 
 def set_clim(self, vmin=None, vmax=None):
 """
- set the norm limits for image scaling; if vmin is a length2
- sequence, interpret it as (vmin, vmax) which is used to
+ set the norm limits for image scaling; if *vmin* is a length2
+ sequence, interpret it as ``(vmin, vmax)`` which is used to
 support setp
 
 ACCEPTS: a length 2 sequence of floats
Modified: trunk/matplotlib/lib/matplotlib/collections.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/collections.py	2008年06月15日 23:05:34 UTC (rev 5550)
+++ trunk/matplotlib/lib/matplotlib/collections.py	2008年06月15日 23:53:06 UTC (rev 5551)
@@ -1,10 +1,11 @@
 """
 Classes for the efficient drawing of large collections of objects that
-share most properties, eg a large number of line segments or polygons
+share most properties, e.g. a large number of line segments or
+polygons.
 
 The classes are not meant to be as flexible as their single element
-counterparts (eg you may not be able to select all line styles) but
-they are meant to be fast for common use cases (eg a bunch of solid
+counterparts (e.g. you may not be able to select all line styles) but
+they are meant to be fast for common use cases (e.g. a bunch of solid
 line segemnts)
 """
 import math, warnings
@@ -24,32 +25,34 @@
 
 All properties in a collection must be sequences or scalars;
 if scalars, they will be converted to sequences. The
- property of the ith element of the collection is the
+ property of the ith element of the collection is::
 
- prop[i % len(props)].
+ prop[i % len(props)]
 
- kwargs are:
+ Keyword arguments and default values:
 
- edgecolors=None,
- facecolors=None,
- linewidths=None,
- antialiaseds = None,
- offsets = None,
- transOffset = transforms.IdentityTransform(),
- norm = None, # optional for cm.ScalarMappable
- cmap = None, # ditto
+ * *edgecolors*: None
+ * *facecolors*: None
+ * *linewidths*: None
+ * *antialiaseds*: None
+ * *offsets*: None
+ * *transOffset*: transforms.IdentityTransform()
+ * *norm*: None (optional for
+ :class:`matplotlib.cm.ScalarMappable`)
+ * *cmap*: None (optional for
+ :class:`matplotlib.cm.ScalarMappable`)
 
- offsets and transOffset are used to translate the patch after
- rendering (default no offsets)
+ *offsets* and *transOffset* are used to translate the patch after
+ rendering (default no offsets).
 
- If any of edgecolors, facecolors, linewidths, antialiaseds are
- None, they default to their patch.* rc params setting, in sequence
- form.
+ If any of *edgecolors*, *facecolors*, *linewidths*, *antialiaseds*
+ are None, they default to their :data:`matplotlib.rcParams` patch
+ setting, in sequence form.
 
- The use of ScalarMappable is optional. If the ScalarMappable
- matrix _A is not None (ie a call to set_array has been made), at
- draw time a call to scalar mappable will be made to set the face
- colors.
+ The use of :class:`~matplotlib.cm.ScalarMappable` is optional. If
+ the :class:`~matplotlib.cm.ScalarMappable` matrix _A is not None
+ (ie a call to set_array has been made), at draw time a call to
+ scalar mappable will be made to set the face colors.
 """
 _offsets = np.array([], np.float_)
 _transOffset = transforms.IdentityTransform()
@@ -193,7 +196,8 @@
 """
 Test whether the mouse event occurred in the collection.
 
- Returns T/F, dict(ind=itemlist), where every item in itemlist contains the event.
+ Returns True | False, ``dict(ind=itemlist)``, where every
+ item in itemlist contains the event.
 """
 if callable(self._contains): return self._contains(self,mouseevent)
 
@@ -215,9 +219,9 @@
 
 def set_linewidths(self, lw):
 """
- Set the linewidth(s) for the collection. lw can be a scalar or a
- sequence; if it is a sequence the patches will cycle through the
- sequence
+ Set the linewidth(s) for the collection. *lw* can be a scalar
+ or a sequence; if it is a sequence the patches will cycle
+ through the sequence
 
 ACCEPTS: float or sequence of floats
 """
@@ -228,7 +232,7 @@
 def set_linestyles(self, ls):
 """
 Set the linestyles(s) for the collection.
- ACCEPTS: ['solid' | 'dashed', 'dashdot', 'dotted' | (offset, on-off-dash-seq) ]
+ ACCEPTS: ['solid' | 'dashed', 'dashdot', 'dotted' | (offset, on-off-dash-seq) ]
 """
 try:
 dashd = backend_bases.GraphicsContextBase.dashd
@@ -280,7 +284,7 @@
 def set_color(self, c):
 """
 Set both the edgecolor and the facecolor.
- See set_facecolor and set_edgecolor.
+ See :meth:`set_facecolor` and :meth:`set_edgecolor`.
 
 ACCEPTS: matplotlib color arg or sequence of rgba tuples
 """
@@ -289,10 +293,10 @@
 
 def set_facecolor(self, c):
 """
- Set the facecolor(s) of the collection. c can be a matplotlib
- color arg (all patches have same color), or a a sequence or
- rgba tuples; if it is a sequence the patches will cycle
- through the sequence
+ Set the facecolor(s) of the collection. *c* can be a
+ matplotlib color arg (all patches have same color), or a
+ sequence or rgba tuples; if it is a sequence the patches will
+ cycle through the sequence
 
 ACCEPTS: matplotlib color arg or sequence of rgba tuples
 """
@@ -307,9 +311,10 @@
 
 def set_edgecolor(self, c):
 """
- Set the edgecolor(s) of the collection. c can be a matplotlib color
- arg (all patches have same color), or a a sequence or rgba tuples; if
- it is a sequence the patches will cycle through the sequence
+ Set the edgecolor(s) of the collection. *c* can be a
+ matplotlib color arg (all patches have same color), or a
+ sequence or rgba tuples; if it is a sequence the patches will
+ cycle through the sequence
 
 ACCEPTS: matplotlib color arg or sequence of rgba tuples
 """
@@ -320,7 +325,7 @@
 
 def set_alpha(self, alpha):
 """
- Set the alpha tranparencies of the collection. Alpha must be
+ Set the alpha tranparencies of the collection. *alpha* must be
 a float.
 
 ACCEPTS: float
@@ -364,23 +369,25 @@
 # class is built so we define an initial set here for the init
 # function and they will be overridden after object defn
 artist.kwdocd['Collection'] = """\
- Valid Collection kwargs are:
+ Valid Collection keyword arguments:
 
- edgecolors=None,
- facecolors=None,
- linewidths=None,
- antialiaseds = None,
- offsets = None,
- transOffset = transforms.IdentityTransform(),
- norm = None, # optional for cm.ScalarMappable
- cmap = None, # ditto
+ * *edgecolors*: None
+ * *facecolors*: None
+ * *linewidths*: None
+ * *antialiaseds*: None
+ * *offsets*: None
+ * *transOffset*: transforms.IdentityTransform()
+ * *norm*: None (optional for
+ :class:`matplotlib.cm.ScalarMappable`)
+ * *cmap*: None (optional for
+ :class:`matplotlib.cm.ScalarMappable`)
 
- offsets and transOffset are used to translate the patch after
+ *offsets* and *transOffset* are used to translate the patch after
 rendering (default no offsets)
 
- If any of edgecolors, facecolors, linewidths, antialiaseds are
- None, they default to their patch.* rc params setting, in sequence
- form.
+ If any of *edgecolors*, *facecolors*, *linewidths*, *antialiaseds*
+ are None, they default to their :data:`matplotlib.rcParams` patch
+ setting, in sequence form.
 """
 
 class QuadMesh(Collection):
@@ -494,11 +501,11 @@
 class PolyCollection(Collection):
 def __init__(self, verts, sizes = None, **kwargs):
 """
- verts is a sequence of ( verts0, verts1, ...) where verts_i is
- a sequence of xy tuples of vertices, or an equivalent
- numpy array of shape (nv,2).
+ *verts* is a sequence of ( *verts0*, *verts1*, ...) where
+ *verts_i* is a sequence of xy tuples of vertices, or an
+ equivalent :mod:`numpy` array of shape (nv,2).
 
- sizes gives the area of the circle circumscribing the
+ *sizes* gives the area of the circle circumscribing the
 polygon in points^2
 
 %(Collection)s
@@ -532,9 +539,12 @@
 """
 def __init__(self, xranges, yrange, **kwargs):
 """
- xranges : sequence of (xmin, xwidth)
- yrange : ymin, ywidth
+ *xranges*
+ sequence of (xmin, xwidth)
 
+ *yrange*
+ ymin, ywidth
+
 %(Collection)s
 """
 ymin, ywidth = yrange
@@ -554,34 +564,38 @@
 """
 Draw a regular polygon with numsides.
 
- * dpi is the figure dpi instance, and is required to do the
- area scaling.
+ *dpi*
+ the figure dpi instance, and is required to do the
+ area scaling.
 
- * numsides: the number of sides of the polygon
+ *numsides*
+ the number of sides of the polygon
 
- * sizes gives the area of the circle circumscribing the
- regular polygon in points^2
+ *sizes*
+ gives the area of the circle circumscribing the
+ regular polygon in points^2
 
- * rotation is the rotation of the polygon in radians
+ *rotation*
+ the rotation of the polygon in radians
 
 %(Collection)s
 
- Example: see examples/dynamic_collection.py for complete example
+ Example: see :file:`examples/dynamic_collection.py` for
+ complete example::
 
- offsets = np.random.rand(20,2)
- facecolors = [cm.jet(x) for x in np.random.rand(20)]
- black = (0,0,0,1)
+ offsets = np.random.rand(20,2)
+ facecolors = [cm.jet(x) for x in np.random.rand(20)]
+ black = (0,0,0,1)
 
- collection = RegularPolyCollection(
- numsides=5, # a pentagon
- rotation=0,
- sizes=(50,),
- facecolors = facecolors,
- edgecolors = (black,),
- linewidths = (1,),
- offsets = offsets,
- transOffset = ax.transData,
- )
+ collection = RegularPolyCollection(
+ numsides=5, # a pentagon
+ rotation=0, sizes=(50,),
+ facecolors = facecolors,
+ edgecolors = (black,),
+ linewidths = (1,),
+ offsets = offsets,
+ transOffset = ax.transData,
+ )
 """
 Collection.__init__(self,**kwargs)
 self._sizes = sizes
@@ -633,42 +647,57 @@
 **kwargs
 ):
 """
- segments is a sequence of ( line0, line1, line2), where
- linen = (x0, y0), (x1, y1), ... (xm, ym), or the
- equivalent numpy array with two columns.
- Each line can be a different length.
+ *segments*
+ a sequence of ( *line0*, *line1*, *line2*), where::
 
- colors must be a tuple of RGBA tuples (eg arbitrary color
- strings, etc, not allowed).
+ linen = (x0, y0), (x1, y1), ... (xm, ym)
 
- antialiaseds must be a sequence of ones or zeros
+ or the equivalent numpy array with two columns. Each line
+ can be a different length.
 
- linestyles is a string or dash tuple. Legal string values are
- solid|dashed|dashdot|dotted. The dash tuple is (offset, onoffseq)
- where onoffseq is an even length tuple of on and off ink in points.
+ *colors*
+ must be a tuple of RGBA tuples (eg arbitrary color
+ strings, etc, not allowed).
 
- If linewidths, colors_, or antialiaseds is None, they default to
- their rc params setting, in sequence form.
+ *antialiaseds*
+ must be a sequence of ones or zeros
 
- If offsets and transOffset are not None, then
- offsets are transformed by transOffset and applied after
+ *linestyles* [ 'solid' | 'dashed' | 'dashdot' | 'dotted' ]
+ a string or dash tuple. The dash tuple is::
+
+ (offset, onoffseq),
+
+ where *onoffseq* is an even length tuple of on and off ink
+ in points.
+
+ If *linewidths*, *colors*, or *antialiaseds* is None, they
+ default to their rcParams setting, in sequence form.
+
+ If *offsets* and *transOffset* are not None, then
+ *offsets* are transformed by *transOffset* and applied after
 the segments have been transformed to display coordinates.
 
- If offsets is not None but transOffset is None, then the
- offsets are added to the segments before any transformation.
- In this case, a single offset can be specified as offsets=(xo,yo),
- and this value will be
- added cumulatively to each successive segment, so as
- to produce a set of successively offset curves.
+ If *offsets* is not None but *transOffset* is None, then the
+ *offsets* are added to the segments before any transformation.
+ In this case, a single offset can be specified as::
 
- norm = None, # optional for ScalarMappable
- cmap = None, # ditto
+ offsets=(xo,yo)
 
- pickradius is the tolerance for mouse clicks picking a line. The
- default is 5 pt.
+ and this value will be added cumulatively to each successive
+ segment, so as to produce a set of successively offset curves.
 
- The use of ScalarMappable is optional. If the ScalarMappable
- matrix _A is not None (ie a call to set_array has been made), at
+ *norm*
+ None (optional for :class:`matplotlib.cm.ScalarMappable`)
+ *cmap*
+ None (optional for :class:`matplotlib.cm.ScalarMappable`)
+
+ *pickradius* is the tolerance for mouse clicks picking a line.
+ The default is 5 pt.
+
+ The use of :class:`~matplotlib.cm.ScalarMappable` is optional.
+ If the :class:`~matplotlib.cm.ScalarMappable` matrix
+ :attr:`~matplotlib.cm.ScalarMappable._A` is not None (ie a call to
+ :meth:`~matplotlib.cm.ScalarMappable.set_array` has been made), at
 draw time a call to scalar mappable will be made to set the colors.
 """
 if colors is None: colors = mpl.rcParams['lines.color']
@@ -721,8 +750,8 @@
 
 def set_color(self, c):
 """
- Set the color(s) of the line collection. c can be a
- matplotlib color arg (all patches have same color), or a a
+ Set the color(s) of the line collection. *c* can be a
+ matplotlib color arg (all patches have same color), or a
 sequence or rgba tuples; if it is a sequence the patches will
 cycle through the sequence
 
@@ -732,8 +761,8 @@
 
 def color(self, c):
 """
- Set the color(s) of the line collection. c can be a
- matplotlib color arg (all patches have same color), or a a
+ Set the color(s) of the line collection. *c* can be a
+ matplotlib color arg (all patches have same color), or a
 sequence or rgba tuples; if it is a sequence the patches will
 cycle through the sequence
 
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <ds...@us...> - 2008年06月15日 23:05:37
Revision: 5550
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=5550&view=rev
Author: dsdale
Date: 2008年06月15日 16:05:34 -0700 (2008年6月15日)
Log Message:
-----------
add axis and cbook to api reference
Modified Paths:
--------------
 trunk/matplotlib/doc/api/index.rst
 trunk/matplotlib/lib/matplotlib/axis.py
 trunk/matplotlib/lib/matplotlib/cbook.py
Modified: trunk/matplotlib/doc/api/index.rst
===================================================================
--- trunk/matplotlib/doc/api/index.rst	2008年06月15日 20:38:00 UTC (rev 5549)
+++ trunk/matplotlib/doc/api/index.rst	2008年06月15日 23:05:34 UTC (rev 5550)
@@ -14,5 +14,7 @@
 matplotlib_configuration_api.rst
 artist_api.rst
 axes_api.rst
+ axis_api.rst
+ cbook_api.rst
 pyplot_api.rst
 index_backend_api.rst
Modified: trunk/matplotlib/lib/matplotlib/axis.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/axis.py	2008年06月15日 20:38:00 UTC (rev 5549)
+++ trunk/matplotlib/lib/matplotlib/axis.py	2008年06月15日 23:05:34 UTC (rev 5550)
@@ -23,19 +23,38 @@
 1 refers to the bottom of the plot for xticks and the left for yticks
 2 refers to the top of the plot for xticks and the right for yticks
 
- Publicly accessible attributes
+ Publicly accessible attributes:
 
- tick1line : a Line2D instance
- tick2line : a Line2D instance
- gridline : a Line2D instance
- label1 : a Text instance
- label2 : a Text instance
- gridOn : a boolean which determines whether to draw the tickline
- tick1On : a boolean which determines whether to draw the 1st tickline
- tick2On : a boolean which determines whether to draw the 2nd tickline
- label1On : a boolean which determines whether to draw tick label
- label2On : a boolean which determines whether to draw tick label
+ :attr:`tick1line`
+ a Line2D instance
 
+ :attr:`tick2line`
+ a Line2D instance
+
+ :attr:`gridline`
+ a Line2D instance
+
+ :attr:`label1`
+ a Text instance
+
+ :attr:`label2`
+ a Text instance
+
+ :attr:`gridOn`
+ a boolean which determines whether to draw the tickline
+
+ :attr:`tick1On`
+ a boolean which determines whether to draw the 1st tickline
+
+ :attr:`tick2On`
+ a boolean which determines whether to draw the 2nd tickline
+
+ :attr:`label1On`
+ a boolean which determines whether to draw tick label
+
+ :attr:`label2On`
+ a boolean which determines whether to draw tick label
+
 """
 def __init__(self, axes, loc, label,
 size = None, # points
@@ -111,7 +130,8 @@
 return self.figure.dpi * self._pad / 72.0
 
 def contains(self, mouseevent):
- """Test whether the mouse event occured in the Tick marks.
+ """
+ Test whether the mouse event occured in the Tick marks.
 
 This function always returns false. It is more useful to test if the
 axis as a whole contains the mouse rather than the set of tick marks.
Modified: trunk/matplotlib/lib/matplotlib/cbook.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/cbook.py	2008年06月15日 20:38:00 UTC (rev 5549)
+++ trunk/matplotlib/lib/matplotlib/cbook.py	2008年06月15日 23:05:34 UTC (rev 5550)
@@ -40,7 +40,7 @@
 class todatetime(converter):
 'convert to a datetime or None'
 def __init__(self, fmt='%Y-%m-%d', missing='Null', missingval=None):
- 'use a time.strptime format string for conversion'
+ 'use a :func:`time.strptime` format string for conversion'
 converter.__init__(self, missing, missingval)
 self.fmt = fmt
 
@@ -54,7 +54,7 @@
 class todate(converter):
 'convert to a date or None'
 def __init__(self, fmt='%Y-%m-%d', missing='Null', missingval=None):
- 'use a time.strptime format string for conversion'
+ 'use a :func:`time.strptime` format string for conversion'
 converter.__init__(self, missing, missingval)
 self.fmt = fmt
 def __call__(self, s):
@@ -84,7 +84,7 @@
 class CallbackRegistry:
 """
 Handle registering and disconnecting for a set of signals and
- callbacks
+ callbacks::
 
 signals = 'eat', 'drink', 'be merry'
 
@@ -109,7 +109,7 @@
 
 """
 def __init__(self, signals):
- 'signals is a sequence of valid signals'
+ '*signals* is a sequence of valid signals'
 self.signals = set(signals)
 # callbacks is a dict mapping the signal to a dictionary
 # mapping callback id to the callback function
@@ -117,7 +117,7 @@
 self._cid = 0
 
 def _check_signal(self, s):
- 'make sure s is a valid signal or raise a ValueError'
+ 'make sure *s* is a valid signal or raise a ValueError'
 if s not in self.signals:
 signals = list(self.signals)
 signals.sort()
@@ -125,7 +125,7 @@
 
 def connect(self, s, func):
 """
- register func to be called when a signal s is generated
+ register *func* to be called when a signal *s* is generated
 func will be called
 """
 self._check_signal(s)
@@ -135,7 +135,7 @@
 
 def disconnect(self, cid):
 """
- disconnect the callback registered with callback id cid
+ disconnect the callback registered with callback id *cid*
 """
 for eventname, callbackd in self.callbacks.items():
 try: del callbackd[cid]
@@ -144,8 +144,8 @@
 
 def process(self, s, *args, **kwargs):
 """
- process signal s. All of the functions registered to receive
- callbacks on s will be called with *args and **kwargs
+ process signal *s*. All of the functions registered to receive
+ callbacks on *s* will be called with *\*args* and *\*\*kwargs*
 """
 self._check_signal(s)
 for func in self.callbacks[s].values():
@@ -194,42 +194,42 @@
 
 
 def unique(x):
- 'Return a list of unique elements of x'
+ 'Return a list of unique elements of *x*'
 return dict([ (val, 1) for val in x]).keys()
 
 def iterable(obj):
- 'return true if obj is iterable'
+ 'return true if *obj* is iterable'
 try: len(obj)
 except: return 0
 return 1
 
 
 def is_string_like(obj):
- 'return true if obj looks like a string'
+ 'return true if *obj* looks like a string'
 if hasattr(obj, 'shape'): return 0
 try: obj + ''
 except (TypeError, ValueError): return 0
 return 1
 
 def is_writable_file_like(obj):
- 'return true if obj looks like a file object'
+ 'return true if *obj* looks like a file object'
 return hasattr(obj, 'write') and callable(obj.write)
 
 def is_scalar(obj):
- 'return true if ob is not string like and is not iterable'
+ 'return true if *obj* is not string like and is not iterable'
 return is_string_like(obj) or not iterable(obj)
 
 def is_numlike(obj):
- 'return true if obj looks like a number'
+ 'return true if *obj* looks like a number'
 try: obj+1
 except TypeError: return False
 else: return True
 
 def to_filehandle(fname, flag='r', return_opened=False):
 """
- fname can be a filename or a file handle. Support for gzipped
- files is automatic, if the filename ends in .gz. flag is a
- read/write flag for file
+ *fname* can be a filename or a file handle. Support for gzipped
+ files is automatic, if the filename ends in .gz. *flag* is a
+ read/write flag for :func:`file`
 """
 if is_string_like(fname):
 if fname.endswith('.gz'):
@@ -275,18 +275,19 @@
 
 Sort by attribute or item
 
- Example usage:
- sort = Sorter()
+ Example usage::
 
- list = [(1, 2), (4, 8), (0, 3)]
- dict = [{'a': 3, 'b': 4}, {'a': 5, 'b': 2}, {'a': 0, 'b': 0},
- {'a': 9, 'b': 9}]
+ sort = Sorter()
 
+ list = [(1, 2), (4, 8), (0, 3)]
+ dict = [{'a': 3, 'b': 4}, {'a': 5, 'b': 2}, {'a': 0, 'b': 0},
+ {'a': 9, 'b': 9}]
 
- sort(list) # default sort
- sort(list, 1) # sort by index 1
- sort(dict, 'a') # sort a list of dicts by key 'a'
 
+ sort(list) # default sort
+ sort(list, 1) # sort by index 1
+ sort(dict, 'a') # sort a list of dicts by key 'a'
+
 """
 
 def _helper(self, data, aux, inplace):
@@ -324,19 +325,19 @@
 """
 All-in-one multiple-string-substitution class
 
- Example usage:
+ Example usage::
 
- text = "Larry Wall is the creator of Perl"
- adict = {
- "Larry Wall" : "Guido van Rossum",
- "creator" : "Benevolent Dictator for Life",
- "Perl" : "Python",
- }
+ text = "Larry Wall is the creator of Perl"
+ adict = {
+ "Larry Wall" : "Guido van Rossum",
+ "creator" : "Benevolent Dictator for Life",
+ "Perl" : "Python",
+ }
 
- print multiple_replace(adict, text)
+ print multiple_replace(adict, text)
 
- xlat = Xlator(adict)
- print xlat.xlat(text)
+ xlat = Xlator(adict)
+ print xlat.xlat(text)
 """
 
 def _make_regex(self):
@@ -344,11 +345,11 @@
 return re.compile("|".join(map(re.escape, self.keys())))
 
 def __call__(self, match):
- """ Handler invoked for each regex match """
+ """ Handler invoked for each regex *match* """
 return self[match.group(0)]
 
 def xlat(self, text):
- """ Translate text, returns the modified text. """
+ """ Translate *text*, returns the modified text. """
 return self._make_regex().sub(self, text)
 
 
@@ -424,7 +425,7 @@
 get_realpath_and_stat = GetRealpathAndStat()
 
 def dict_delall(d, keys):
- 'delete all of the keys from the dict d'
+ 'delete all of the *keys* from the :class:`dict` *d*'
 for key in keys:
 try: del d[key]
 except KeyError: pass
@@ -464,10 +465,13 @@
 
 
 def get_split_ind(seq, N):
- """seq is a list of words. Return the index into seq such that
- len(' '.join(seq[:ind])<=N
 """
+ *seq* is a list of words. Return the index into seq such that::
 
+ len(' '.join(seq[:ind])<=N
+
+ """
+
 sLen = 0
 # todo: use Alex's xrange pattern from the cbook for efficiency
 for (word, ind) in zip(seq, range(len(seq))):
@@ -477,7 +481,7 @@
 
 
 def wrap(prefix, text, cols):
- 'wrap text with prefix at length cols'
+ 'wrap *text* with *prefix* at length *cols*'
 pad = ' '*len(prefix.expandtabs())
 available = cols - len(pad)
 
@@ -504,14 +508,13 @@
 _dedent_regex = {}
 def dedent(s):
 """
- Remove excess indentation from docstrings.
+ Remove excess indentation from docstring *s*.
 
- Discards any leading blank lines, then removes up to
- n whitespace characters from each line, where n is
- the number of leading whitespace characters in the
- first line. It differs from textwrap.dedent in its
- deletion of leading blank lines and its use of the
- first non-blank line to determine the indentation.
+ Discards any leading blank lines, then removes up to n whitespace
+ characters from each line, where n is the number of leading
+ whitespace characters in the first line. It differs from
+ textwrap.dedent in its deletion of leading blank lines and its use
+ of the first non-blank line to determine the indentation.
 
 It is also faster in most cases.
 """
@@ -546,6 +549,7 @@
 def listFiles(root, patterns='*', recurse=1, return_folders=0):
 """
 Recursively list files
+
 from Parmar and Martelli in the Python Cookbook
 """
 import os.path, fnmatch
@@ -575,8 +579,8 @@
 
 def get_recursive_filelist(args):
 """
- Recurs all the files and dirs in args ignoring symbolic links and
- return the files as a list of strings
+ Recurs all the files and dirs in *args* ignoring symbolic links
+ and return the files as a list of strings
 """
 files = []
 
@@ -593,7 +597,7 @@
 
 
 def pieces(seq, num=2):
- "Break up the seq into num tuples"
+ "Break up the *seq* into *num* tuples"
 start = 0
 while 1:
 item = seq[start:start+num]
@@ -611,8 +615,8 @@
 
 def allequal(seq):
 """
- return true if all elements of seq compare equal. If seq is 0 or
- 1 length, return True
+ return true if all elements of *seq* compare equal. If *seq* is 0
+ or 1 length, return *True*
 """
 if len(seq)<2: return True
 val = seq[0]
@@ -637,10 +641,11 @@
 
 def allpairs(x):
 """
- return all possible pairs in sequence x
+ return all possible pairs in sequence *x*
 
- Condensed by Alex Martelli from this thread on c.l.python
- http://groups.google.com/groups?q=all+pairs+group:*python*&hl=en&lr=&ie=UTF-8&selm=mailman.4028.1096403649.5135.python-list%40python.org&rnum=1
+ Condensed by Alex Martelli from this thread_ on c.l.python
+
+ .. _thread: http://groups.google.com/groups?q=all+pairs+group:*python*&hl=en&lr=&ie=UTF-8&selm=mailman.4028.1096403649.5135.python-list%40python.org&rnum=1
 """
 return [ (s, f) for i, f in enumerate(x) for s in x[i+1:] ]
 
@@ -650,15 +655,17 @@
 # python 2.2 dicts don't have pop--but we don't support 2.2 any more
 def popd(d, *args):
 """
- Should behave like python2.3 pop method; d is a dict
+ Should behave like python2.3 :meth:`dict.pop` method; *d* is a
+ :class:`dict`::
 
- # returns value for key and deletes item; raises a KeyError if key
- # is not in dict
- val = popd(d, key)
+ # returns value for key and deletes item; raises a KeyError if key
+ # is not in dict
+ val = popd(d, key)
 
- # returns value for key if key exists, else default. Delete key,
- # val item if it exists. Will not raise a KeyError
- val = popd(d, key, default)
+ # returns value for key if key exists, else default. Delete key,
+ # val item if it exists. Will not raise a KeyError
+ val = popd(d, key, default)
+
 """
 if len(args)==1:
 key = args[0]
@@ -744,8 +751,8 @@
 
 def bubble(self, o):
 """
- raise o to the top of the stack and return o. o must be in
- the stack
+ raise *o* to the top of the stack and return *o*. *o* must be
+ in the stack
 """
 
 if o not in self._elements:
@@ -761,7 +768,7 @@
 return o
 
 def remove(self, o):
- 'remove element o from the stack'
+ 'remove element *o* from the stack'
 if o not in self._elements:
 raise ValueError('Unknown element o')
 old = self._elements[:]
@@ -776,7 +783,7 @@
 
 def finddir(o, match, case=False):
 """
- return all attributes of o which match string in match. if case
+ return all attributes of *o* which match string in match. if case
 is True require an exact case match.
 """
 if case:
@@ -787,7 +794,7 @@
 return [orig for name, orig in names if name.find(match)>=0]
 
 def reverse_dict(d):
- 'reverse the dictionary -- may lose data if values are not uniq!'
+ 'reverse the dictionary -- may lose data if values are not unique!'
 return dict([(v,k) for k,v in d.items()])
 
 
@@ -808,7 +815,7 @@
 
 _safezip_msg = 'In safezip, len(args[0])=%d but len(args[%d])=%d'
 def safezip(*args):
- 'make sure args are equal len before zipping'
+ 'make sure *args* are equal len before zipping'
 Nx = len(args[0])
 for i, arg in enumerate(args[1:]):
 if len(arg) != Nx:
@@ -870,12 +877,16 @@
 
 def print_cycles(objects, outstream=sys.stdout, show_progress=False):
 """
- objects: A list of objects to find cycles in. It is often useful
- to pass in gc.garbage to find the cycles that are
- preventing some objects from being garbage collected.
- outstream: The stream for output.
- show_progress: If True, print the number of objects reached as they are
- found.
+ *objects*
+ A list of objects to find cycles in. It is often useful to
+ pass in gc.garbage to find the cycles that are preventing some
+ objects from being garbage collected.
+
+ *outstream*
+ The stream for output.
+
+ *show_progress*
+ If True, print the number of objects reached as they are found.
 """
 import gc
 from types import FrameType
@@ -936,9 +947,9 @@
 together into disjoint sets when a full-blown graph data structure
 would be overkill.
 
- Objects can be joined using .join(), tested for connectedness
- using .joined(), and all disjoint sets can be retreived using
- .get().
+ Objects can be joined using :meth:`join`, tested for connectedness
+ using :meth:`joined`, and all disjoint sets can be retreived using
+ :meth:`get`.
 
 The objects being joined must be hashable.
 
@@ -987,7 +998,7 @@
 
 def joined(self, a, b):
 """
- Returns True if a and b are members of the same set.
+ Returns True if *a* and *b* are members of the same set.
 """
 mapping = self._mapping
 try:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 5549
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=5549&view=rev
Author: astraw
Date: 2008年06月15日 13:38:00 -0700 (2008年6月15日)
Log Message:
-----------
fix example to run with current MPL and numpy
Modified Paths:
--------------
 trunk/matplotlib/examples/units/date_converter.py
Modified: trunk/matplotlib/examples/units/date_converter.py
===================================================================
--- trunk/matplotlib/examples/units/date_converter.py	2008年06月15日 15:29:57 UTC (rev 5548)
+++ trunk/matplotlib/examples/units/date_converter.py	2008年06月15日 20:38:00 UTC (rev 5549)
@@ -1,7 +1,8 @@
 import date_support # set up the date converters
 import datetime
 from matplotlib.dates import drange
-from pylab import figure, show, nx
+from pylab import figure, show
+import numpy as np
 
 
 xmin = datetime.date(2007,1,1)
@@ -12,7 +13,7 @@
 fig = figure()
 fig.subplots_adjust(bottom=0.2)
 ax = fig.add_subplot(111)
-ax.plot(xdates, nx.mlab.rand(len(xdates)), 'o')
+ax.plot(xdates, np.random.rand(len(xdates)), 'o')
 ax.set_xlim(datetime.date(2007,2,1), datetime.date(2007,3,1))
 
 fig.autofmt_xdate()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <ds...@us...> - 2008年06月15日 15:30:38
Revision: 5548
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=5548&view=rev
Author: dsdale
Date: 2008年06月15日 08:29:57 -0700 (2008年6月15日)
Log Message:
-----------
Expanded on documentation guidelines
Modified Paths:
--------------
 trunk/matplotlib/doc/devel/documenting_mpl.rst
 trunk/matplotlib/doc/glossary/index.rst
Modified: trunk/matplotlib/doc/devel/documenting_mpl.rst
===================================================================
--- trunk/matplotlib/doc/devel/documenting_mpl.rst	2008年06月15日 12:08:13 UTC (rev 5547)
+++ trunk/matplotlib/doc/devel/documenting_mpl.rst	2008年06月15日 15:29:57 UTC (rev 5548)
@@ -33,6 +33,7 @@
 The output produced by Sphinx can be configured by editing the `conf.py`
 file located in the `doc/`.
 
+
 Organization of matplotlib's documentation
 ==========================================
 
@@ -50,6 +51,7 @@
 
 .. include:: ../../TODO
 
+ 
 Formatting
 ==========
 
@@ -61,6 +63,20 @@
 other semantic markup. For example, when referring to external files, use the
 ``:file:`` directive.
 
+* Function arguments and keywords should be referred to using the *emphasis*
+ role. This will keep matplotlib's documentation consistant with Python's
+ documentation::
+
+ Here is a description of *argument*
+
+ Please do not use the `default role`::
+
+ Please do not describe `argument` like this.
+
+ nor the ``literal`` role::
+
+ Please do not describe ``argument`` like this.
+ 
 * Sphinx does not support tables with column- or row-spanning cells for
 latex output. Such tables can not be used when documenting matplotlib.
 
@@ -92,10 +108,96 @@
 
 In [69]: lines = plot([1,2,3])
 
+* Footnotes [#]_ can be added using ``[#]_``, followed later by::
+
+ .. rubric:: Footnotes
+
+ .. [#]
+
+ .. rubric:: Footnotes
+
+ .. [#] For example.
+
+* Use the *note* and *warning* directives, sparingly, to draw attention to
+ important comments::
+
+ .. note::
+ Here is a note
+
+ yields:
+
+ .. note::
+ here is a note
+
+ also:
+
+ .. warning::
+ here is a warning
+
+* Use the *deprecated* directive when appropriate::
+
+ .. deprecated:: 0.98
+ This feature is obsolete, use something else.
+
+ yields:
+
+ .. deprecated:: 0.98
+ This feature is obsolete, use something else.
+
+* Use the *versionadded* and *versionchanged* directives, which have similar
+ syntax to the *deprecated* role::
+
+ .. versionadded:: 0.98
+ The transforms have been completely revamped.
+
+ .. versionadded:: 0.98
+ The transforms have been completely revamped.
+ 
+* Use the *seealso* directive, for example::
+
+ .. seealso::
+
+ Using ReST :ref:`emacs-helpers`:
+ One example
+
+ A bit about :ref:`referring-to-mpl-docs`:
+ One more
+
+ yields:
+ 
+ .. seealso::
+
+ Using ResT :ref:`emacs-helpers`:
+ One example
+
+ A bit about :ref:`referring-to-mpl-docs`:
+ One more
+
+* Please keep the :ref:`glossary` in mind when writing documentation. You can
+ create a references to a term in the glossary with the ``:term:`` role.
+
+* The autodoc extension will handle index entries for the API, but additional
+ entries in the index_ need to be explicitly added.
+ 
 .. _documentation: http://sphinx.pocoo.org/contents.html
 .. _`inline markup`: http://sphinx.pocoo.org/markup/inline.html
+.. _index: http://sphinx.pocoo.org/markup/para.html#index-generating-markup
 
+Docstrings
+----------
 
+In addition to the aforementioned formatting suggestions:
+
+* Please limit the text width of docstrings to 70 characters.
+ 
+* Keyword arguments should be described using a definition list.
+
+ .. note::
+ matplotlib makes extensive use of keyword arguments as pass-through
+ arguments, there are a many cases where a table is used in place of a
+ definition list for autogenerated sections of docstrings.
+ 
+
 Figures
 =======
 
@@ -139,7 +241,6 @@
 :include-source
 
 
-
 .. _referring-to-mpl-docs:
 
 Referring to mpl documents
@@ -166,8 +267,6 @@
 .. literalinclude:: ../mpl_data/matplotlibrc
 
 
-
-
 .. _internal-section-refs:
 
 Internal section references
@@ -196,8 +295,8 @@
 In addition, since underscores are widely used by Sphinx itself, let's prefer
 hyphens to separate words.
 
-.. _emacs-helpers:
 
+
 Section names, etc
 ==================
 
@@ -205,6 +304,9 @@
 section titles, eg ``Possible hangups`` rather than ``Possible
 Hangups``
 
+
+.. _emacs-helpers:
+
 Emacs helpers
 =============
 
Modified: trunk/matplotlib/doc/glossary/index.rst
===================================================================
--- trunk/matplotlib/doc/glossary/index.rst	2008年06月15日 12:08:13 UTC (rev 5547)
+++ trunk/matplotlib/doc/glossary/index.rst	2008年06月15日 15:29:57 UTC (rev 5548)
@@ -1,6 +1,9 @@
-########
+
+.. _glossary:
+
+********
 Glossary
-########
+********
 
 .. glossary::
 
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 5547
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=5547&view=rev
Author: jswhit
Date: 2008年06月15日 05:08:13 -0700 (2008年6月15日)
Log Message:
-----------
moved to __init__.py so Sphinx can find docstrings.
Removed Paths:
-------------
 trunk/toolkits/basemap/lib/mpl_toolkits/basemap/basemap.py
Deleted: trunk/toolkits/basemap/lib/mpl_toolkits/basemap/basemap.py
===================================================================
--- trunk/toolkits/basemap/lib/mpl_toolkits/basemap/basemap.py	2008年06月15日 11:57:51 UTC (rev 5546)
+++ trunk/toolkits/basemap/lib/mpl_toolkits/basemap/basemap.py	2008年06月15日 12:08:13 UTC (rev 5547)
@@ -1,3344 +0,0 @@
-"""
-Module for plotting data on maps with matplotlib.
-
-Contains the Basemap class (which does most of the 
-heavy lifting), and the following functions:
-
-NetCDFFile: Read local and remote NetCDF datasets.
-
-interp: bilinear interpolation between rectilinear grids.
-
-shiftgrid: shifts global lat/lon grids east or west.
-
-addcyclic: Add cyclic (wraparound) point in longitude.
-
-num2date: convert from a numeric time value to a datetime object.
-
-date2num: convert from a datetime object to a numeric time value.
-"""
-from matplotlib import __version__ as _matplotlib_version
-from matplotlib.cbook import is_scalar, dedent
-# check to make sure matplotlib is not too old.
-_mpl_required_version = '0.98'
-if _matplotlib_version < _mpl_required_version:
- msg = dedent("""
- your matplotlib is too old - basemap requires version %s or 
- higher, you have version %s""" % 
- (_mpl_required_version,_matplotlib_version))
- raise ImportError(msg)
-from matplotlib import rcParams, is_interactive, _pylab_helpers
-from matplotlib.collections import LineCollection
-from matplotlib.patches import Ellipse, Circle, Polygon
-from matplotlib.lines import Line2D
-from matplotlib.transforms import Bbox
-import pyproj, sys, os, math, dbflib
-from proj import Proj
-import numpy as np
-import numpy.ma as ma
-from shapelib import ShapeFile
-import _geoslib, pupynere, netcdftime
-
-# basemap data files now installed in lib/matplotlib/toolkits/basemap/data
-basemap_datadir = os.sep.join([os.path.dirname(__file__), 'data'])
-
-__version__ = '0.99'
-
-# supported map projections.
-_projnames = {'cyl' : 'Cylindrical Equidistant',
- 'merc' : 'Mercator',
- 'tmerc' : 'Transverse Mercator',
- 'omerc' : 'Oblique Mercator',
- 'mill' : 'Miller Cylindrical',
- 'lcc' : 'Lambert Conformal',
- 'laea' : 'Lambert Azimuthal Equal Area',
- 'nplaea' : 'North-Polar Lambert Azimuthal',
- 'splaea' : 'South-Polar Lambert Azimuthal',
- 'eqdc' : 'Equidistant Conic',
- 'aeqd' : 'Azimuthal Equidistant',
- 'npaeqd' : 'North-Polar Azimuthal Equidistant',
- 'spaeqd' : 'South-Polar Azimuthal Equidistant',
- 'aea' : 'Albers Equal Area',
- 'stere' : 'Stereographic',
- 'npstere' : 'North-Polar Stereographic',
- 'spstere' : 'South-Polar Stereographic',
- 'cass' : 'Cassini-Soldner',
- 'poly' : 'Polyconic',
- 'ortho' : 'Orthographic',
- 'geos' : 'Geostationary',
- 'sinu' : 'Sinusoidal',
- 'moll' : 'Mollweide',
- 'robin' : 'Robinson',
- 'gnom' : 'Gnomonic',
- }
-supported_projections = []
-for _items in _projnames.iteritems():
- supported_projections.append("'%s' = %s\n" % (_items))
-supported_projections = ''.join(supported_projections)
-
-# projection specific parameters.
-projection_params = {'cyl' : 'corners only (no width/height)',
- 'merc' : 'corners plus lat_ts (no width/height)',
- 'tmerc' : 'lon_0,lat_0',
- 'omerc' : 'lon_0,lat_0,lat_1,lat_2,lon_1,lon_2,no_rot',
- 'mill' : 'corners only (no width/height)',
- 'lcc' : 'lon_0,lat_0,lat_1,lat_2',
- 'laea' : 'lon_0,lat_0',
- 'nplaea' : 'bounding_lat,lon_0,lat_0,no corners or width/height',
- 'splaea' : 'bounding_lat,lon_0,lat_0,no corners or width/height',
- 'eqdc' : 'lon_0,lat_0,lat_1,lat_2',
- 'aeqd' : 'lon_0,lat_0',
- 'npaeqd' : 'bounding_lat,lon_0,lat_0,no corners or width/height',
- 'spaeqd' : 'bounding_lat,lon_0,lat_0,no corners or width/height',
- 'aea' : 'lon_0,lat_0,lat_1',
- 'stere' : 'lon_0,lat_0,lat_ts',
- 'npstere' : 'bounding_lat,lon_0,lat_0,no corners or width/height',
- 'spstere' : 'bounding_lat,lon_0,lat_0,no corners or width/height',
- 'cass' : 'lon_0,lat_0',
- 'poly' : 'lon_0,lat_0',
- 'ortho' : 'lon_0,lat_0,llcrnrx,llcrnry,urcrnrx,urcrnry,no width/height',
- 'geos' : 'lon_0,satellite_height,llcrnrx,llcrnry,urcrnrx,urcrnry,no width/height',
- 'sinu' : 'lon_0,lat_0,no corners or width/height',
- 'moll' : 'lon_0,lat_0,no corners or width/height',
- 'robin' : 'lon_0,lat_0,no corners or width/height',
- 'gnom' : 'lon_0,lat_0',
- }
-
-# The __init__ docstring is pulled out here because it is so long;
-# Having it in the usual place makes it hard to get from the
-# __init__ argument list to the code that uses the arguments.
-_Basemap_init_doc = """
- create a Basemap instance.
-
- This sets up a basemap with specified map projection.
- and creates the coastline data structures in native map projection
- coordinates.
-
- arguments:
-
- projection - map projection. Supported projections are:
-%(supported_projections)s
- Default is 'cyl'.
-
- For most map projections, the map projection region can either be
- specified by setting these keywords:
-
- llcrnrlon - longitude of lower left hand corner of the desired map domain (degrees).
- llcrnrlat - latitude of lower left hand corner of the desired map domain (degrees).
- urcrnrlon - longitude of upper right hand corner of the desired map domain (degrees).
- urcrnrlat - latitude of upper right hand corner of the desired map domain (degrees).
-
- or these keywords:
-
- width - width of desired map domain in projection coordinates (meters).
- height - height of desired map domain in projection coordinates (meters).
- lon_0 - center of desired map domain (in degrees).
- lat_0 - center of desired map domain (in degrees).
-
- For 'sinu', 'moll', 'npstere', 'spstere', 'nplaea', 'splaea', 'nplaea',
- 'splaea', 'npaeqd', 'spaeqd' or 'robin', the values of
- llcrnrlon,llcrnrlat,urcrnrlon,urcrnrlat,width and height are ignored
- (because either they are computed internally, or entire globe is
- always plotted). For the cylindrical projections
- ('cyl','merc' and 'mill'), the default is to use
- llcrnrlon=-180,llcrnrlat=-90, urcrnrlon=180 and urcrnrlat=90). For all other
- projections except 'ortho' and 'geos', either the lat/lon values of the
- corners or width and height must be specified by the user.
- For 'ortho' and 'geos', the lat/lon values of the corners may be specified,
- or the x/y values of the corners (llcrnrx,llcrnry,urcrnrx,urcrnry) in the 
- coordinate system of the global projection (with x=0,y=0 at the center
- of the global projection). If the corners are not specified,
- the entire globe is plotted.
-
- resolution - resolution of boundary database to use. Can be 'c' (crude),
- 'l' (low), 'i' (intermediate), 'h' (high), 'f' (full) or None.
- If None, no boundary data will be read in (and class methods
- such as drawcoastlines will raise an exception if invoked).
- Resolution drops off by roughly 80%%
- between datasets. Higher res datasets are much slower to draw.
- Default 'c'. Coastline data is from the GSHHS
- (http://www.soest.hawaii.edu/wessel/gshhs/gshhs.html).
- State, country and river datasets from the Generic Mapping
- Tools (http://gmt.soest.hawaii.edu).
-
- area_thresh - coastline or lake with an area smaller than area_thresh
- in km^2 will not be plotted. Default 10000,1000,100,10,1 for resolution
- 'c','l','i','h','f'.
-
- rsphere - radius of the sphere used to define map projection (default
- 6370997 meters, close to the arithmetic mean radius of the earth). If
- given as a sequence, the first two elements are interpreted as
- the the radii of the major and minor axes of an ellipsoid. Note: sometimes
- an ellipsoid is specified by the major axis and an 'inverse flattening
- parameter' (if). The minor axis (b) can be computed from the major axis (a)
- and the inverse flattening parameter using the formula if = a/(a-b).
-
- suppress_ticks - suppress automatic drawing of axis ticks and labels
- in map projection coordinates. Default False, so parallels and meridians
- can be labelled instead. If parallel or meridian labelling is requested
- (using drawparallels and drawmeridians methods), automatic tick labelling
- will be supressed even is suppress_ticks=False. suppress_ticks=False
- is useful if you want to use your own custom tick formatter, or
- if you want to let matplotlib label the axes in meters
- using native map projection coordinates
-
- anchor - determines how map is placed in axes rectangle (passed to
- axes.set_aspect). Default is 'C', which means map is centered.
- Allowed values are ['C', 'SW', 'S', 'SE', 'E', 'NE', 'N', 'NW', 'W'].
-
- ax - set default axes instance (default None - pylab.gca() may be used
- to get the current axes instance). If you don't want pylab to be imported,
- you can either set this to a pre-defined axes instance, or use the 'ax'
- keyword in each Basemap method call that does drawing. In the first case,
- all Basemap method calls will draw to the same axes instance. In the
- second case, you can draw to different axes with the same Basemap instance.
- You can also use the 'ax' keyword in individual method calls to
- selectively override the default axes instance.
-
- The following parameters are map projection parameters which all default to
- None. Not all parameters are used by all projections, some are ignored.
- The module variable 'projection_params' is a dictionary which
- lists which parameters apply to which projections.
-
- lat_ts - latitude of true scale for mercator projection, optional
- for stereographic projection.
- lat_1 - first standard parallel for lambert conformal, albers
- equal area projection and equidistant conic projections. Latitude of one
- of the two points on the projection centerline for oblique mercator.
- If lat_1 is not given, but lat_0 is, lat_1 is set to lat_0 for
- lambert conformal, albers equal area and equidistant conic.
- lat_2 - second standard parallel for lambert conformal, albers
- equal area projection and equidistant conic projections. Latitude of one
- of the two points on the projection centerline for oblique mercator.
- If lat_2 is not given, it is set to lat_1 for
- lambert conformal, albers equal area and equidistant conic.
- lon_1 - longitude of one of the two points on the projection centerline
- for oblique mercator.
- lon_2 - longitude of one of the two points on the projection centerline
- for oblique mercator.
- no_rot - only used by oblique mercator. If set to True, the map projection
- coordinates will not be rotated to true North. Default is False (projection
- coordinates are automatically rotated).
- lat_0 - central latitude (y-axis origin) - used by all projections,
- Must be equator for mercator projection.
- lon_0 - central meridian (x-axis origin) - used by all projections,
- boundinglat - bounding latitude for pole-centered projections (npstere,spstere,
- nplaea,splaea,npaeqd,spaeqd). These projections are square regions centered
- on the north or south pole. The longitude lon_0 is at 6-o'clock, and the
- latitude circle boundinglat is tangent to the edge of the map at lon_0.
- satellite_height - height of satellite (in m) above equator -
- only relevant for geostationary projections ('geos'). Default 35,786 km.
-
- Here are the most commonly used class methods (see the docstring
- for each for more details):
-
- To draw a graticule grid (labelled latitude and longitude lines)
- use the drawparallels and drawmeridians methods.
-
- To draw coastline, rivers and political boundaries, use the
- the drawcontinents, drawrivers, drawcountries and drawstates methods.
-
- To fill the continents and inland lakes, use the fillcontinents method.
-
- To draw the boundary of the map projection region, and fill the 
- interior a certain color, use the drawmapboundary method.
-
- The contour, contourf, pcolor, pcolormesh, plot, scatter
- quiver and imshow methods use the corresponding matplotlib axes
- methods to draw on the map.
-
- The transform_scalar method can be used to interpolate regular
- lat/lon grids of scalar data to native map projection grids.
-
- The transform_vector method can be used to interpolate and rotate
- regular lat/lon grids of vector data to native map projection grids.
-
- The rotate_vector method rotates a vector field from lat/lon
- coordinates into map projections coordinates, without doing any 
- interpolation.
-
- The readshapefile method can be used to read in data from ESRI
- shapefiles.
-
- The drawgreatcircle method draws great circles on the map.
-""" % locals()
-
-# unsupported projection error message.
-_unsupported_projection = ["'%s' is an unsupported projection.\n"]
-_unsupported_projection.append("The supported projections are:\n")
-_unsupported_projection.append(supported_projections)
-_unsupported_projection = ''.join(_unsupported_projection)
-
-def _validated_ll(param, name, minval, maxval):
- param = float(param)
- if param > maxval or param < minval:
- raise ValueError('%s must be between %f and %f degrees' %
- (name, minval, maxval))
- return param
-
-def _insert_validated(d, param, name, minval, maxval):
- if param is not None:
- d[name] = _validated_ll(param, name, minval, maxval)
-
-class Basemap(object):
- """
- Class for plotting data on map projections with matplotlib.
- See __init__ docstring for details on how to create a class
- instance for a given map projection.
-
- Useful instance variables:
-
- projection - map projection. Print the module variable
- "supported_projections" to see a list.
- aspect - map aspect ratio (size of y dimension / size of x dimension).
- llcrnrlon - longitude of lower left hand corner of the desired map domain.
- llcrnrlon - latitude of lower left hand corner of the desired map domain.
- urcrnrlon - longitude of upper right hand corner of the desired map domain.
- urcrnrlon - latitude of upper right hand corner of the desired map domain.
- llcrnrx,llcrnry,urcrnrx,urcrnry - corners of map domain in projection coordinates.
- rmajor,rminor - equatorial and polar radii of ellipsoid used (in meters).
- resolution - resolution of boundary dataset being used ('c' for crude,
- 'l' for low, etc.). If None, no boundary dataset is associated with the
- Basemap instance.
- srs - a string representing the 'spatial reference system' for the map
- projection as defined by PROJ.4.
-
- Example Usage:
-
- >>> from mpl_toolkits.basemap import Basemap
- >>> import numpy as np
- >>> import matplotlib.pyplot as plt
- >>> import matplotlib.mlab as mlab
- >>> # read in topo data (on a regular lat/lon grid)
- >>> etopo = mlab.load('etopo20data.gz')
- >>> lons = mlab.load('etopo20lons.gz')
- >>> lats = mlab.load('etopo20lats.gz')
- >>> # create Basemap instance for Robinson projection.
- >>> m = Basemap(projection='robin',lon_0=0.5*(lons[0]+lons[-1]))
- >>> # compute native map projection coordinates for lat/lon grid.
- >>> x, y = m(*np.meshgrid(lons,lats))
- >>> # make filled contour plot.
- >>> cs = m.contourf(x,y,etopo,30,cmap=plt.cm.jet)
- >>> m.drawcoastlines() # draw coastlines
- >>> m.drawmapboundary() # draw a line around the map region
- >>> m.drawparallels(np.arange(-90.,120.,30.),labels=[1,0,0,0]) # draw parallels
- >>> m.drawmeridians(np.arange(0.,420.,60.),labels=[0,0,0,1]) # draw meridians
- >>> plt.title('Robinson Projection') # add a title
- >>> plt.show()
-
- [this example (simpletest.py) plus many others can be found in the
- examples directory of source distribution. The "OO" version of this
- example (which does not use pylab) is called "simpletest_oo.py".]
- """
-
- def __init__(self, llcrnrlon=None, llcrnrlat=None,
- urcrnrlon=None, urcrnrlat=None,
- llcrnrx=None, llcrnry=None,
- urcrnrx=None, urcrnry=None,
- width=None, height=None,
- projection='cyl', resolution='c',
- area_thresh=None, rsphere=6370997.0,
- lat_ts=None,
- lat_1=None, lat_2=None,
- lat_0=None, lon_0=None,
- lon_1=None, lon_2=None,
- no_rot=False,
- suppress_ticks=True,
- satellite_height=35786000,
- boundinglat=None,
- anchor='C',
- ax=None):
- # docstring is added after __init__ method definition
-
- # where to put plot in figure (default is 'C' or center)
- self.anchor = anchor
- # map projection.
- self.projection = projection
-
- # set up projection parameter dict.
- projparams = {}
- projparams['proj'] = projection
- try:
- if rsphere[0] > rsphere[1]:
- projparams['a'] = rsphere[0]
- projparams['b'] = rsphere[1]
- else:
- projparams['a'] = rsphere[1]
- projparams['b'] = rsphere[0]
- except:
- if projection == 'tmerc':
- # use bR_a instead of R because of obscure bug
- # in proj4 for tmerc projection.
- projparams['bR_a'] = rsphere
- else:
- projparams['R'] = rsphere
- # set units to meters.
- projparams['units']='m'
- # check for sane values of lon_0, lat_0, lat_ts, lat_1, lat_2
- _insert_validated(projparams, lat_0, 'lat_0', -90, 90)
- _insert_validated(projparams, lat_1, 'lat_1', -90, 90)
- _insert_validated(projparams, lat_2, 'lat_2', -90, 90)
- _insert_validated(projparams, lat_ts, 'lat_ts', -90, 90)
- _insert_validated(projparams, lon_0, 'lon_0', -360, 720)
- _insert_validated(projparams, lon_1, 'lon_1', -360, 720)
- _insert_validated(projparams, lon_2, 'lon_2', -360, 720)
- if projection == 'geos':
- projparams['h'] = satellite_height
- # check for sane values of projection corners.
- using_corners = (None not in [llcrnrlon,llcrnrlat,urcrnrlon,urcrnrlat])
- if using_corners:
- self.llcrnrlon = _validated_ll(llcrnrlon, 'llcrnrlon', -360, 720)
- self.urcrnrlon = _validated_ll(urcrnrlon, 'urcrnrlon', -360, 720)
- self.llcrnrlat = _validated_ll(llcrnrlat, 'llcrnrlat', -90, 90)
- self.urcrnrlat = _validated_ll(urcrnrlat, 'urcrnrlat', -90, 90)
-
- # for each of the supported projections,
- # compute lat/lon of domain corners
- # and set values in projparams dict as needed.
-
- if projection in ['lcc', 'eqdc', 'aea']:
- # if lat_0 is given, but not lat_1,
- # set lat_1=lat_0
- if lat_1 is None and lat_0 is not None:
- lat_1 = lat_0
- projparams['lat_1'] = lat_1
- if lat_1 is None or lon_0 is None:
- raise ValueError('must specify lat_1 or lat_0 and lon_0 for %s basemap (lat_2 is optional)' % _projnames[projection])
- if lat_2 is None:
- projparams['lat_2'] = lat_1
- if not using_corners:
- if width is None or height is None:
- raise ValueError, 'must either specify lat/lon values of corners (llcrnrlon,llcrnrlat,ucrnrlon,urcrnrlat) in degrees or width and height in meters'
- if lon_0 is None or lat_0 is None:
- raise ValueError, 'must specify lon_0 and lat_0 when using width, height to specify projection region'
- llcrnrlon,llcrnrlat,urcrnrlon,urcrnrlat = _choosecorners(width,height,**projparams)
- self.llcrnrlon = llcrnrlon; self.llcrnrlat = llcrnrlat
- self.urcrnrlon = urcrnrlon; self.urcrnrlat = urcrnrlat
- elif projection == 'stere':
- if lat_0 is None or lon_0 is None:
- raise ValueError, 'must specify lat_0 and lon_0 for Stereographic basemap (lat_ts is optional)'
- if not using_corners:
- if width is None or height is None:
- raise ValueError, 'must either specify lat/lon values of corners (llcrnrlon,llcrnrlat,ucrnrlon,urcrnrlat) in degrees or width and height in meters'
- if lon_0 is None or lat_0 is None:
- raise ValueError, 'must specify lon_0 and lat_0 when using width, height to specify projection region'
- llcrnrlon,llcrnrlat,urcrnrlon,urcrnrlat = _choosecorners(width,height,**projparams)
- self.llcrnrlon = llcrnrlon; self.llcrnrlat = llcrnrlat
- self.urcrnrlon = urcrnrlon; self.urcrnrlat = urcrnrlat
- elif projection in ['spstere', 'npstere',
- 'splaea', 'nplaea',
- 'spaeqd', 'npaeqd']:
- if boundinglat is None or lon_0 is None:
- raise ValueError('must specify boundinglat and lon_0 for %s basemap' % _projnames[projection])
- if projection[0] == 's':
- sgn = -1
- else:
- sgn = 1
- rootproj = projection[2:]
- projparams['proj'] = rootproj
- if rootproj == 'stere':
- projparams['lat_ts'] = sgn * 90.
- projparams['lat_0'] = sgn * 90.
- self.llcrnrlon = lon_0 - sgn*45.
- self.urcrnrlon = lon_0 + sgn*135.
- proj = pyproj.Proj(projparams)
- x,y = proj(lon_0,boundinglat)
- lon,self.llcrnrlat = proj(math.sqrt(2.)*y,0.,inverse=True)
- self.urcrnrlat = self.llcrnrlat
- if width is not None or height is not None:
- print 'warning: width and height keywords ignored for %s projection' % _projnames[projection]
- elif projection == 'laea':
- if lat_0 is None or lon_0 is None:
- raise ValueError, 'must specify lat_0 and lon_0 for Lambert Azimuthal basemap'
- if not using_corners:
- if width is None or height is None:
- raise ValueError, 'must either specify lat/lon values of corners (llcrnrlon,llcrnrlat,ucrnrlon,urcrnrlat) in degrees or width and height in meters'
- if lon_0 is None or lat_0 is None:
- raise ValueError, 'must specify lon_0 and lat_0 when using width, height to specify projection region'
- llcrnrlon,llcrnrlat,urcrnrlon,urcrnrlat = _choosecorners(width,height,**projparams)
- self.llcrnrlon = llcrnrlon; self.llcrnrlat = llcrnrlat
- self.urcrnrlon = urcrnrlon; self.urcrnrlat = urcrnrlat
- elif projection == 'merc':
- if lat_ts is None:
- raise ValueError, 'must specify lat_ts for Mercator basemap'
- # clip plot region to be within -89.99S to 89.99N
- # (mercator is singular at poles)
- if not using_corners:
- llcrnrlon = -180.
- llcrnrlat = -90.
- urcrnrlon = 180
- urcrnrlat = 90.
- if llcrnrlat < -89.99: llcrnrlat = -89.99
- if llcrnrlat > 89.99: llcrnrlat = 89.99
- if urcrnrlat < -89.99: urcrnrlat = -89.99
- if urcrnrlat > 89.99: urcrnrlat = 89.99
- self.llcrnrlon = llcrnrlon; self.llcrnrlat = llcrnrlat
- self.urcrnrlon = urcrnrlon; self.urcrnrlat = urcrnrlat
- if width is not None or height is not None:
- print 'warning: width and height keywords ignored for %s projection' % self.projection
- elif projection in ['tmerc','gnom','cass','poly'] :
- if lat_0 is None or lon_0 is None:
- raise ValueError, 'must specify lat_0 and lon_0 for Transverse Mercator, Gnomonic, Cassini-Soldnerr Polyconic basemap'
- if not using_corners:
- if width is None or height is None:
- raise ValueError, 'must either specify lat/lon values of corners (llcrnrlon,llcrnrlat,ucrnrlon,urcrnrlat) in degrees or width and height in meters'
- if lon_0 is None or lat_0 is None:
- raise ValueError, 'must specify lon_0 and lat_0 when using width, height to specify projection region'
- llcrnrlon,llcrnrlat,urcrnrlon,urcrnrlat = _choosecorners(width,height,**projparams)
- self.llcrnrlon = llcrnrlon; self.llcrnrlat = llcrnrlat
- self.urcrnrlon = urcrnrlon; self.urcrnrlat = urcrnrlat
- elif projection == 'ortho':
- if not projparams.has_key('R'):
- raise ValueError, 'orthographic projection only works for perfect spheres - not ellipsoids'
- if lat_0 is None or lon_0 is None:
- raise ValueError, 'must specify lat_0 and lon_0 for Orthographic basemap'
- if width is not None or height is not None:
- print 'warning: width and height keywords ignored for %s projection' % self.projection
- if not using_corners:
- llcrnrlon = -180.
- llcrnrlat = -90.
- urcrnrlon = 180
- urcrnrlat = 90.
- self._fulldisk = True
- else:
- self._fulldisk = False
- self.llcrnrlon = llcrnrlon; self.llcrnrlat = llcrnrlat
- self.urcrnrlon = urcrnrlon; self.urcrnrlat = urcrnrlat
- # FIXME: won't work for points exactly on equator??
- if np.abs(lat_0) < 1.e-2: lat_0 = 1.e-2
- projparams['lat_0'] = lat_0
- elif projection == 'geos':
- if lon_0 is None:
- raise ValueError, 'must specify lon_0 for Geostationary basemap'
- if width is not None or height is not None:
- print 'warning: width and height keywords ignored for %s projection' % self.projection
- if not using_corners:
- llcrnrlon = -180.
- llcrnrlat = -90.
- urcrnrlon = 180
- urcrnrlat = 90.
- self._fulldisk = True
- else:
- self._fulldisk = False
- self.llcrnrlon = llcrnrlon; self.llcrnrlat = llcrnrlat
- self.urcrnrlon = urcrnrlon; self.urcrnrlat = urcrnrlat
- elif projection in ['moll','robin','sinu']:
- if lon_0 is None:
- raise ValueError, 'must specify lon_0 for Robinson, Mollweide, or Sinusoidal basemap'
- if width is not None or height is not None:
- print 'warning: width and height keywords ignored for %s projection' % self.projection
- llcrnrlon = -180.
- llcrnrlat = -90.
- urcrnrlon = 180
- urcrnrlat = 90.
- self.llcrnrlon = llcrnrlon; self.llcrnrlat = llcrnrlat
- self.urcrnrlon = urcrnrlon; self.urcrnrlat = urcrnrlat
- elif projection == 'omerc':
- if lat_1 is None or lon_1 is None or lat_2 is None or lon_2 is None:
- raise ValueError, 'must specify lat_1,lon_1 and lat_2,lon_2 for Oblique Mercator basemap'
- projparams['lat_1'] = lat_1
- projparams['lon_1'] = lon_1
- projparams['lat_2'] = lat_2
- projparams['lon_2'] = lon_2
- projparams['lat_0'] = lat_0
- if no_rot:
- projparams['no_rot']=''
- #if not using_corners:
- # raise ValueError, 'cannot specify map region with width and height keywords for this projection, please specify lat/lon values of corners'
- if not using_corners:
- if width is None or height is None:
- raise ValueError, 'must either specify lat/lon values of corners (llcrnrlon,llcrnrlat,ucrnrlon,urcrnrlat) in degrees or width and height in meters'
- if lon_0 is None or lat_0 is None:
- raise ValueError, 'must specify lon_0 and lat_0 when using width, height to specify projection region'
- llcrnrlon,llcrnrlat,urcrnrlon,urcrnrlat = _choosecorners(width,height,**projparams)
- self.llcrnrlon = llcrnrlon; self.llcrnrlat = llcrnrlat
- self.urcrnrlon = urcrnrlon; self.urcrnrlat = urcrnrlat
- elif projection == 'aeqd':
- if lat_0 is None or lon_0 is None:
- raise ValueError, 'must specify lat_0 and lon_0 for Azimuthal Equidistant basemap'
- if not using_corners:
- if width is None or height is None:
- raise ValueError, 'must either specify lat/lon values of corners (llcrnrlon,llcrnrlat,ucrnrlon,urcrnrlat) in degrees or width and height in meters'
- if lon_0 is None or lat_0 is None:
- raise ValueError, 'must specify lon_0 and lat_0 when using width, height to specify projection region'
- llcrnrlon,llcrnrlat,urcrnrlon,urcrnrlat = _choosecorners(width,height,**projparams)
- self.llcrnrlon = llcrnrlon; self.llcrnrlat = llcrnrlat
- self.urcrnrlon = urcrnrlon; self.urcrnrlat = urcrnrlat
- elif projection == 'mill':
- if not using_corners:
- llcrnrlon = -180.
- llcrnrlat = -90.
- urcrnrlon = 180
- urcrnrlat = 90.
- self.llcrnrlon = llcrnrlon; self.llcrnrlat = llcrnrlat
- self.urcrnrlon = urcrnrlon; self.urcrnrlat = urcrnrlat
- if width is not None or height is not None:
- print 'warning: width and height keywords ignored for %s projection' % self.projection
- elif projection == 'cyl':
- if not using_corners:
- llcrnrlon = -180.
- llcrnrlat = -90.
- urcrnrlon = 180
- urcrnrlat = 90.
- self.llcrnrlon = llcrnrlon; self.llcrnrlat = llcrnrlat
- self.urcrnrlon = urcrnrlon; self.urcrnrlat = urcrnrlat
- if width is not None or height is not None:
- print 'warning: width and height keywords ignored for %s projection' % self.projection
- else:
- raise ValueError(_unsupported_projection % projection)
-
- # initialize proj4
- proj = Proj(projparams,self.llcrnrlon,self.llcrnrlat,self.urcrnrlon,self.urcrnrlat)
-
- # make sure axis ticks are suppressed.
- self.noticks = suppress_ticks
-
- # make Proj instance a Basemap instance variable.
- self.projtran = proj
- # copy some Proj attributes.
- atts = ['rmajor','rminor','esq','flattening','ellipsoid','projparams']
- for att in atts:
- self.__dict__[att] = proj.__dict__[att]
- # these only exist for geostationary projection.
- if hasattr(proj,'_width'):
- self.__dict__['_width'] = proj.__dict__['_width']
- if hasattr(proj,'_height'):
- self.__dict__['_height'] = proj.__dict__['_height']
- # spatial reference string (useful for georeferencing output
- # images with gdal_translate).
- if hasattr(self,'_proj4'):
- self.srs = proj._proj4.srs
- else:
- pjargs = []
- for key,value in self.projparams.iteritems():
- # 'cyl' projection translates to 'eqc' in PROJ.4
- if projection == 'cyl' and key == 'proj':
- value = 'eqc'
- # ignore x_0 and y_0 settings for 'cyl' projection
- # (they are not consistent with what PROJ.4 uses)
- elif projection == 'cyl' and key in ['x_0','y_0']:
- continue
- pjargs.append('+'+key+"="+str(value)+' ')
- self.srs = ''.join(pjargs)
- # set instance variables defining map region.
- self.xmin = proj.xmin
- self.xmax = proj.xmax
- self.ymin = proj.ymin
- self.ymax = proj.ymax
- if projection == 'cyl':
- self.aspect = (self.urcrnrlat-self.llcrnrlat)/(self.urcrnrlon-self.llcrnrlon)
- else:
- self.aspect = (proj.ymax-proj.ymin)/(proj.xmax-proj.xmin)
- if projection in ['geos','ortho'] and \
- None not in [llcrnrx,llcrnry,urcrnrx,urcrnry]:
- self.llcrnrx = llcrnrx+0.5*proj.xmax
- self.llcrnry = llcrnry+0.5*proj.ymax
- self.urcrnrx = urcrnrx+0.5*proj.xmax
- self.urcrnry = urcrnry+0.5*proj.ymax
- self._fulldisk = False
- else:
- self.llcrnrx = proj.llcrnrx
- self.llcrnry = proj.llcrnry
- self.urcrnrx = proj.urcrnrx
- self.urcrnry = proj.urcrnry
- # set min/max lats for projection domain.
- if projection in ['mill','cyl','merc']:
- self.latmin = self.llcrnrlat
- self.latmax = self.urcrnrlat
- elif projection in ['ortho','geos','moll','robin','sinu']:
- self.latmin = -90.
- self.latmax = 90.
- else:
- lons, lats = self.makegrid(101,101)
- self.latmin = lats.min()
- self.latmax = lats.max()
-
- # if ax == None, pyplot.gca may be used.
- self.ax = ax
- self.lsmask = None
-
- # set defaults for area_thresh.
- self.resolution = resolution
- if area_thresh is None and resolution is not None:
- if resolution == 'c':
- area_thresh = 10000.
- elif resolution == 'l':
- area_thresh = 1000.
- elif resolution == 'i':
- area_thresh = 100.
- elif resolution == 'h':
- area_thresh = 10.
- elif resolution == 'f':
- area_thresh = 1.
- else:
- raise ValueError, "boundary resolution must be one of 'c','l','i','h' or 'f'"
- self.area_thresh = area_thresh
- # define map boundary polygon (in lat/lon coordinates)
- self._boundarypolyll, self._boundarypolyxy = self._getmapboundary()
- # read in coastline polygons, only keeping those that
- # intersect map boundary polygon.
- if self.resolution is not None:
- self.coastsegs, self.coastpolygontypes = self._readboundarydata('gshhs')
- # reformat for use in matplotlib.patches.Polygon.
- self.coastpolygons = []
- # also, split coastline segments that jump across entire plot.
- coastsegs = []
- for seg in self.coastsegs:
- x, y = zip(*seg)
- self.coastpolygons.append((x,y))
- x = np.array(x,np.float64); y = np.array(y,np.float64)
- xd = (x[1:]-x[0:-1])**2
- yd = (y[1:]-y[0:-1])**2
- dist = np.sqrt(xd+yd)
- split = dist > 5000000.
- if np.sum(split) and self.projection not in ['merc','cyl','mill']:
- ind = (np.compress(split,np.squeeze(split*np.indices(xd.shape)))+1).tolist()
- iprev = 0
- ind.append(len(xd))
- for i in ind:
- # don't add empty lists.
- if len(range(iprev,i)): 
- coastsegs.append(zip(x[iprev:i],y[iprev:i]))
- iprev = i
- else:
- coastsegs.append(seg)
- self.coastsegs = coastsegs
- # set __init__'s docstring
- __init__.__doc__ = _Basemap_init_doc
-
- def __call__(self,x,y,inverse=False):
- """
- Calling a Basemap class instance with the arguments lon, lat will
- convert lon/lat (in degrees) to x/y native map projection
- coordinates (in meters). If optional keyword 'inverse' is
- True (default is False), the inverse transformation from x/y
- to lon/lat is performed.
-
- For cylindrical equidistant projection ('cyl'), this
- does nothing (i.e. x,y == lon,lat).
-
- For non-cylindrical projections, the inverse transformation
- always returns longitudes between -180 and 180 degrees. For
- cylindrical projections (self.projection == 'cyl','mill' or 'merc')
- the inverse transformation will return longitudes between
- self.llcrnrlon and self.llcrnrlat.
-
- input arguments lon, lat can be either scalar floats or N arrays.
- """
- return self.projtran(x,y,inverse=inverse)
-
- def makegrid(self,nx,ny,returnxy=False):
- """
- return arrays of shape (ny,nx) containing lon,lat coordinates of
- an equally spaced native projection grid.
- if returnxy = True, the x,y values of the grid are returned also.
- """
- return self.projtran.makegrid(nx,ny,returnxy=returnxy)
-
- def _readboundarydata(self,name):
- """
- read boundary data, clip to map projection region.
- """
- msg = dedent("""
- Unable to open boundary dataset file. Only the 'crude', 'low',
- 'intermediate' and 'high' resolution datasets are installed by default.
- If you are requesting a 'full' resolution dataset, you may need to
- download and install those files separately
- (see the basemap README for details).""")
- try:
- bdatfile = open(os.path.join(basemap_datadir,name+'_'+self.resolution+'.dat'),'rb')
- bdatmetafile = open(os.path.join(basemap_datadir,name+'meta_'+self.resolution+'.dat'),'r')
- except:
- raise IOError, msg
- polygons = []
- polygon_types = []
- # coastlines are polygons, other boundaries are line segments.
- if name == 'gshhs':
- Shape = _geoslib.Polygon
- else:
- Shape = _geoslib.LineString
- # see if map projection region polygon contains a pole.
- NPole = _geoslib.Point(self(0.,90.))
- SPole = _geoslib.Point(self(0.,-90.))
- boundarypolyxy = self._boundarypolyxy
- boundarypolyll = self._boundarypolyll
- hasNP = NPole.within(boundarypolyxy)
- hasSP = SPole.within(boundarypolyxy)
- containsPole = hasNP or hasSP
- # these projections cannot cross pole.
- if containsPole and\
- self.projection in ['merc','mill','cyl','robin','moll','sinu','geos']:
- #self.projection in ['tmerc','omerc','cass','merc','mill','cyl','robin','moll','sinu','geos']:
- raise ValueError('%s projection cannot cross pole'%(self.projection))
- # make sure orthographic projection has containsPole=True
- # we will compute the intersections in stereographic
- # coordinates, then transform to orthographic.
- if self.projection == 'ortho' and name == 'gshhs':
- containsPole = True
- lon_0=self.projparams['lon_0']
- lat_0=self.projparams['lat_0']
- re = self.projparams['R']
- # center of stereographic projection restricted to be 
- # nearest one of 6 points on the sphere (every 90 deg lat/lon).
- lon0 = 90.*(np.around(lon_0/90.))
- lat0 = 90.*(np.around(lat_0/90.))
- if np.abs(int(lat0)) == 90: lon0=0.
- maptran = pyproj.Proj(proj='stere',lon_0=lon0,lat_0=lat0,R=re)
- # boundary polygon for orthographic projection
- # in stereographic coorindates.
- b = self._boundarypolyll.boundary
- blons = b[:,0]; blats = b[:,1]
- b[:,0], b[:,1] = maptran(blons, blats)
- boundarypolyxy = _geoslib.Polygon(b)
- for line in bdatmetafile:
- linesplit = line.split()
- area = float(linesplit[1])
- south = float(linesplit[3])
- north = float(linesplit[4])
- if area < 0.: area = 1.e30
- useit = self.latmax>=south and self.latmin<=north and area>self.area_thresh
- if useit:
- type = int(linesplit[0])
- npts = int(linesplit[2])
- offsetbytes = int(linesplit[5])
- bytecount = int(linesplit[6])
- bdatfile.seek(offsetbytes,0)
- # read in binary string convert into an npts by 2
- # numpy array (first column is lons, second is lats).
- polystring = bdatfile.read(bytecount)
- # binary data is little endian.
- b = np.array(np.fromstring(polystring,dtype='<f4'),'f8')
- b.shape = (npts,2)
- b2 = b.copy()
- # if map boundary polygon is a valid one in lat/lon
- # coordinates (i.e. it does not contain either pole),
- # the intersections of the boundary geometries
- # and the map projection region can be computed before
- # transforming the boundary geometry to map projection
- # coordinates (this saves time, especially for small map
- # regions and high-resolution boundary geometries).
- if not containsPole:
- # close Antarctica.
- if name == 'gshhs' and south < -68 and area > 10000:
- lons = b[:,0]
- lats = b[:,1]
- lons2 = lons[:-2][::-1]
- lats2 = lats[:-2][::-1]
- lons1 = lons2 - 360.
- lons3 = lons2 + 360.
- lons = lons1.tolist()+lons2.tolist()+lons3.tolist()
- lats = lats2.tolist()+lats2.tolist()+lats2.tolist()
- lonstart,latstart = lons[0], lats[0]
- lonend,latend = lons[-1], lats[-1]
- lons.insert(0,lonstart)
- lats.insert(0,-90.)
- lons.append(lonend)
- lats.append(-90.)
- b = np.empty((len(lons),2),np.float64)
- b[:,0] = lons; b[:,1] = lats
- poly = _geoslib.Polygon(b)
- antart = True
- else:
- poly = Shape(b)
- antart = False
- # create duplicate polygons shifted by -360 and +360
- # (so as to properly treat polygons that cross
- # Greenwich meridian).
- if not antart:
- b2[:,0] = b[:,0]-360
- poly1 = Shape(b2)
- b2[:,0] = b[:,0]+360
- poly2 = Shape(b2)
- polys = [poly1,poly,poly2]
- else: # Antartica already extends from -360 to +720.
- polys = [poly]
- for poly in polys:
- # if polygon instersects map projection
- # region, process it.
- if poly.intersects(boundarypolyll):
- # if geometry intersection calculation fails,
- # just move on.
- try:
- geoms = poly.intersection(boundarypolyll)
- except:
- continue
- # iterate over geometries in intersection.
- for psub in geoms:
- # only coastlines are polygons,
- # which have a 'boundary' attribute.
- # otherwise, use 'coords' attribute
- # to extract coordinates.
- b = psub.boundary
- blons = b[:,0]; blats = b[:,1]
- # transformation from lat/lon to
- # map projection coordinates.
- bx, by = self(blons, blats)
- polygons.append(zip(bx,by))
- polygon_types.append(type)
- # if map boundary polygon is not valid in lat/lon
- # coordinates, compute intersection between map
- # projection region and boundary geometries in map
- # projection coordinates.
- else:
- # transform coordinates from lat/lon
- # to map projection coordinates.
- # special case for ortho, compute coastline polygon
- # vertices in stereographic coords.
- if name == 'gshhs' and self.projection == 'ortho':
- b[:,0], b[:,1] = maptran(b[:,0], b[:,1])
- else:
- b[:,0], b[:,1] = self(b[:,0], b[:,1])
- goodmask = np.logical_and(b[:,0]<1.e20,b[:,1]<1.e20)
- # if less than two points are valid in
- # map proj coords, skip this geometry.
- if np.sum(goodmask) <= 1: continue
- if name != 'gshhs':
- # if not a polygon,
- # just remove parts of geometry that are undefined
- # in this map projection.
- bx = np.compress(goodmask, b[:,0])
- by = np.compress(goodmask, b[:,1])
- # for orthographic projection, all points
- # outside map projection region are eliminated
- # with the above step, so we're done.
- if self.projection == 'ortho':
- polygons.append(zip(bx,by))
- polygon_types.append(type)
- continue
- # create a GEOS geometry object.
- poly = Shape(b)
- # if geometry instersects map projection
- # region, and doesn't have any invalid points, process it.
- if goodmask.all() and poly.intersects(boundarypolyxy):
- # if geometry intersection calculation fails,
- # just move on.
- try:
- geoms = poly.intersection(boundarypolyxy)
- except:
- continue
- # iterate over geometries in intersection.
- for psub in geoms:
- b = psub.boundary
- # if projection == 'ortho',
- # transform polygon from stereographic
- # to orthographic coordinates.
- if self.projection == 'ortho':
- # if coastline polygon covers more than 99%
- # of map region for fulldisk projection,
- # it's probably bogus, so skip it.
- areafrac = psub.area()/boundarypolyxy.area()
- if name == 'gshhs' and\
- self._fulldisk and\
- areafrac > 0.99: continue
- # inverse transform from stereographic
- # to lat/lon.
- b[:,0], b[:,1] = maptran(b[:,0], b[:,1], inverse=True)
- # orthographic.
- b[:,0], b[:,1]= self(b[:,0], b[:,1])
- polygons.append(zip(b[:,0],b[:,1]))
- polygon_types.append(type)
- return polygons, polygon_types
-
- def _getmapboundary(self):
- """
- create map boundary polygon (in lat/lon and x/y coordinates)
- """
- nx = 100
- ny = 100
- maptran = self
- if self.projection in ['ortho','geos']:
- # circular region.
- thetas = np.linspace(0.,2.*np.pi,2*nx*ny)[:-1]
- if self.projection == 'ortho':
- rminor = self.rmajor
- rmajor = self.rmajor
- else:
- rminor = self._height
- rmajor = self._width
- x = rmajor*np.cos(thetas) + rmajor
- y = rminor*np.sin(thetas) + rminor
- b = np.empty((len(x),2),np.float64)
- b[:,0]=x; b[:,1]=y
- boundaryxy = _geoslib.Polygon(b)
- # compute proj instance for full disk, if necessary.
- if not self._fulldisk:
- projparms = self.projparams.copy()
- del projparms['x_0']
- del projparms['y_0']
- if self.projection == 'ortho':
- llcrnrx = -self.rmajor
- llcrnry = -self.rmajor
- urcrnrx = -llcrnrx
- urcrnry = -llcrnry
- else:
- llcrnrx = -self._width
- llcrnry = -self._height
- urcrnrx = -llcrnrx
- urcrnry = -llcrnry
- projparms['x_0']=-llcrnrx
- projparms['y_0']=-llcrnry
- maptran = pyproj.Proj(projparms)
- elif self.projection in ['moll','robin','sinu']:
- # quasi-elliptical region.
- lon_0 = self.projparams['lon_0']
- # left side
- lats1 = np.linspace(-89.9,89.9,ny).tolist()
- lons1 = len(lats1)*[lon_0-179.9]
- # top.
- lons2 = np.linspace(lon_0-179.9,lon_0+179.9,nx).tolist()
- lats2 = len(lons2)*[89.9]
- # right side
- lats3 = np.linspace(89.9,-89.9,ny).tolist()
- lons3 = len(lats3)*[lon_0+179.9]
- # bottom.
- lons4 = np.linspace(lon_0+179.9,lon_0-179.9,nx).tolist()
- lats4 = len(lons4)*[-89.9]
- lons = np.array(lons1+lons2+lons3+lons4,np.float64)
- lats = np.array(lats1+lats2+lats3+lats4,np.float64)
- x, y = maptran(lons,lats)
- b = np.empty((len(x),2),np.float64)
- b[:,0]=x; b[:,1]=y
- boundaryxy = _geoslib.Polygon(b)
- else: # all other projections are rectangular.
- # left side (x = xmin, ymin <= y <= ymax)
- yy = np.linspace(self.ymin, self.ymax, ny)[:-1]
- x = len(yy)*[self.xmin]; y = yy.tolist()
- # top (y = ymax, xmin <= x <= xmax)
- xx = np.linspace(self.xmin, self.xmax, nx)[:-1]
- x = x + xx.tolist()
- y = y + len(xx)*[self.ymax]
- # right side (x = xmax, ymin <= y <= ymax)
- yy = np.linspace(self.ymax, self.ymin, ny)[:-1]
- x = x + len(yy)*[self.xmax]; y = y + yy.tolist()
- # bottom (y = ymin, xmin <= x <= xmax)
- xx = np.linspace(self.xmax, self.xmin, nx)[:-1]
- x = x + xx.tolist()
- y = y + len(xx)*[self.ymin]
- x = np.array(x,np.float64)
- y = np.array(y,np.float64)
- b = np.empty((4,2),np.float64)
- b[:,0]=[self.xmin,self.xmin,self.xmax,self.xmax]
- b[:,1]=[self.ymin,self.ymax,self.ymax,self.ymin]
- boundaryxy = _geoslib.Polygon(b)
- if self.projection in ['mill','merc','cyl']:
- # make sure map boundary doesn't quite include pole.
- if self.urcrnrlat > 89.9999:
- urcrnrlat = 89.9999
- else:
- urcrnrlat = self.urcrnrlat
- if self.llcrnrlat < -89.9999:
- llcrnrlat = -89.9999
- else:
- llcrnrlat = self.llcrnrlat
- lons = [self.llcrnrlon, self.llcrnrlon, self.urcrnrlon, self.urcrnrlon]
- lats = [llcrnrlat, urcrnrlat, urcrnrlat, llcrnrlat]
- x, y = self(lons, lats)
- b = np.empty((len(x),2),np.float64)
- b[:,0]=x; b[:,1]=y
- boundaryxy = _geoslib.Polygon(b)
- else:
- if self.projection not in ['moll','robin','sinu']:
- lons, lats = maptran(x,y,inverse=True)
- # fix lons so there are no jumps.
- n = 1
- lonprev = lons[0]
- for lon,lat in zip(lons[1:],lats[1:]):
- if np.abs(lon-lonprev) > 90.:
- if lonprev < 0:
- lon = lon - 360.
- else:
- lon = lon + 360
- lons[n] = lon
- lonprev = lon
- n = n + 1
- b = np.empty((len(lons),2),np.float64)
- b[:,0]=lons; b[:,1]=lats
- boundaryll = _geoslib.Polygon(b)
- return boundaryll, boundaryxy
-
-
- def drawmapboundary(self,color='k',linewidth=1.0,fill_color=None,\
- zorder=None,ax=None):
- """
- draw boundary around map projection region, optionally
- filling interior of region.
-
- linewidth - line width for boundary (default 1.)
- color - color of boundary line (default black)
- fill_color - fill the map region background with this
- color (default is no fill or fill with axis background color).
- zorder - sets the zorder for filling map background
- (default 0).
- ax - axes instance to use (default None, use default axes 
- instance).
- returns PatchCollection representing map boundary.
- """
- # get current axes instance (if none specified).
- if ax is None and self.ax is None:
- try:
- ax = plt.gca()
- except:
- import matplotlib.pyplot as plt
- ax = plt.gca()
- elif ax is None and self.ax is not None:
- ax = self.ax
- limb = None
- if self.projection == 'ortho':
- limb = Circle((self.rmajor,self.rmajor),self.rmajor)
- elif self.projection == 'geos':
- limb = Ellipse((self._width,self._height),2.*self._width,2.*self._height)
- if self.projection in ['ortho','geos'] and self._fulldisk:
- # elliptical region.
- ax.add_patch(limb)
- if fill_color is None:
- limb.set_fill(False)
- else:
- limb.set_facecolor(fill_color)
- limb.set_zorder(0)
- limb.set_edgecolor(color)
- limb.set_linewidth(linewidth)
- limb.set_clip_on(False)
- if zorder is not None:
- limb.set_zorder(zorder)
- elif self.projection in ['moll','robin','sinu']: # elliptical region.
- nx = 100; ny = 100
- # quasi-elliptical region.
- lon_0 = self.projparams['lon_0']
- # left side
- lats1 = np.linspace(-89.9,89.9,ny).tolist()
- lons1 = len(lats1)*[lon_0-179.9]
- # top.
- lons2 = np.linspace(lon_0-179.9,lon_0+179.9,nx).tolist()
- lats2 = len(lons2)*[89.9]
- # right side
- lats3 = np.linspace(89.9,-89.9,ny).tolist()
- lons3 = len(lats3)*[lon_0+179.9]
- # bottom.
- lons4 = np.linspace(lon_0+179.9,lon_0-179.9,nx).tolist()
- lats4 = len(lons4)*[-89.9]
- lons = np.array(lons1+lons2+lons3+lons4,np.float64)
- lats = np.array(lats1+lats2+lats3+lats4,np.float64)
- x, y = self(lons,lats)
- xy = zip(x,y)
- limb = Polygon(xy,edgecolor=color,linewidth=linewidth)
- ax.add_patch(limb)
- if fill_color is None:
- limb.set_fill(False)
- else:
- limb.set_facecolor(fill_color)
- limb.set_zorder(0)
- limb.set_clip_on(False)
- if zorder is not None:
- limb.set_zorder(zorder)
- else: # all other projections are rectangular.
- ax.axesPatch.set_linewidth(linewidth)
- if self.projection not in ['geos','ortho']:
- if fill_color is None:
- ax.axesPatch.set_facecolor(ax.get_axis_bgcolor())
- else:
- ax.axesPatch.set_facecolor(fill_color)
- ax.axesPatch.set_zorder(0)
- ax.axesPatch.set_edgecolor(color)
- ax.set_frame_on(True)
- if zorder is not None:
- ax.axesPatch.set_zorder(zorder)
- else:
- ax.axesPatch.set_facecolor(ax.get_axis_bgcolor())
- ax.axesPatch.set_edgecolor(color)
- ax.set_frame_on(True)
- if zorder is not None:
- ax.axesPatch.set_zorder(zorder)
- # for geos or ortho projections, also
- # draw and fill map projection limb, clipped
- # to rectangular region.
- ax.add_patch(limb)
- if fill_color is None:
- limb.set_fill(False)
- else:
- limb.set_facecolor(fill_color)
- limb.set_zorder(0)
- limb.set_edgecolor(color)
- limb.set_linewidth(linewidth)
- if zorder is not None:
- limb.set_zorder(zorder)
- limb.set_clip_on(True)
- # set axes limits to fit map region.
- self.set_axes_limits(ax=ax)
- return limb
-
- def fillcontinents(self,color='0.8',lake_color=None,ax=None,zorder=None):
- """
- Fill continents.
-
- color - color to fill continents (default gray).
- lake_color - color to fill inland lakes (default axes background).
- ax - axes instance (overrides default axes instance).
- zorder - sets the zorder for the continent polygons (if not specified,
- uses default zorder for a Polygon patch). Set to zero if you want to paint
- over the filled continents).
-
- After filling continents, lakes are re-filled with axis background color.
-
- returns Polygon object.
- """
- if self.resolution is None:
- raise AttributeError, 'there are no boundary datasets associated with this Basemap instance'
- # get current axes instance (if none specified).
- if ax is None and self.ax is None:
- try:
- ax = plt.gca()
- except:
- import matplotlib.pyplot as plt
- ax = plt.gca()
- elif ax is None and self.ax is not None:
- ax = self.ax
- # get axis background color.
- axisbgc = ax.get_axis_bgcolor()
- npoly = 0
- for x,y in self.coastpolygons:
- xa = np.array(x,np.float32)
- ya = np.array(y,np.float32)
- # check to see if all four corners of domain in polygon (if so,
- # don't draw since it will just fill in the whole map).
- delx = 10; dely = 10
- if self.projection in ['cyl']:
- delx = 0.1
- dely = 0.1
- test1 = np.fabs(xa-self.urcrnrx) < delx
- test2 = np.fabs(xa-self.llcrnrx) < delx
- test3 = np.fabs(ya-self.urcrnry) < dely
- test4 = np.fabs(ya-self.llcrnry) < dely
- hasp1 = np.sum(test1*test3)
- hasp2 = np.sum(test2*test3)
- hasp4 = np.sum(test2*test4)
- hasp3 = np.sum(test1*test4)
- if not hasp1 or not hasp2 or not ...
 
[truncated message content]
Revision: 5546
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=5546&view=rev
Author: jswhit
Date: 2008年06月15日 04:57:51 -0700 (2008年6月15日)
Log Message:
-----------
finished cleanup of docstrings so sphinx-generated API docs look nice.
Modified Paths:
--------------
 trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py
Modified: trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py
===================================================================
--- trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py	2008年06月14日 21:14:34 UTC (rev 5545)
+++ trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py	2008年06月15日 11:57:51 UTC (rev 5546)
@@ -2391,6 +2391,8 @@
 (see matplotlib.pyplot.scatter documentation).
 
 Extra keyword ``ax`` can be used to override the default axes instance.
+
+ Other \**kwargs passed on to matplotlib.pyplot.scatter.
 """
 if not kwargs.has_key('ax') and self.ax is None:
 try:
@@ -2427,6 +2429,8 @@
 (see matplotlib.pyplot.plot documentation).
 
 Extra keyword ``ax`` can be used to override the default axis instance.
+
+ Other \**kwargs passed on to matplotlib.pyplot.plot.
 """
 if not kwargs.has_key('ax') and self.ax is None:
 try:
@@ -2466,6 +2470,8 @@
 will be drawn over map region.
 
 Extra keyword ``ax`` can be used to override the default axis instance.
+
+ Other \**kwargs passed on to matplotlib.pyplot.plot.
 """
 if not kwargs.has_key('ax') and self.ax is None:
 try:
@@ -2507,15 +2513,16 @@
 
 def pcolor(self,x,y,data,**kwargs):
 """
- Make a pseudo-color plot over the map.
+ Make a pseudo-color plot over the map
+ (see matplotlib.pyplot.pcolor documentation).
 
- see matplotlib.pyplot.pcolor documentation for definition of \**kwargs
-
 If x or y are outside projection limb (i.e. they have values > 1.e20)
 they will be convert to masked arrays with those values masked.
 As a result, those values will not be plotted.
 
- extra keyword 'ax' can be used to override the default axis instance.
+ Extra keyword ``ax`` can be used to override the default axis instance.
+
+ Other \**kwargs passed on to matplotlib.pyplot.pcolor.
 """
 if not kwargs.has_key('ax') and self.ax is None:
 try:
@@ -2557,11 +2564,12 @@
 
 def pcolormesh(self,x,y,data,**kwargs):
 """
- Make a pseudo-color plot over the map.
+ Make a pseudo-color plot over the map
+ (see matplotlib.pyplot.pcolormesh documentation).
 
- see matplotlib.pyplot.pcolormesh documentation for definition of \**kwargs
+ Extra keyword ``ax`` can be used to override the default axis instance.
 
- extra keyword 'ax' can be used to override the default axis instance.
+ Other \**kwargs passed on to matplotlib.pyplot.pcolormesh.
 """
 if not kwargs.has_key('ax') and self.ax is None:
 try:
@@ -2599,9 +2607,12 @@
 
 def contour(self,x,y,data,*args,**kwargs):
 """
- Make a contour plot over the map (see matplotlib.pyplot.contour documentation).
+ Make a contour plot over the map 
+ (see matplotlib.pyplot.contour documentation).
 
- extra keyword 'ax' can be used to override the default axis instance.
+ Extra keyword ``ax`` can be used to override the default axis instance.
+
+ Other \*args and \**kwargs passed on to matplotlib.pyplot.contour.
 """
 if not kwargs.has_key('ax') and self.ax is None:
 try:
@@ -2666,11 +2677,15 @@
 
 def contourf(self,x,y,data,*args,**kwargs):
 """
- Make a filled contour plot over the map (see matplotlib.pyplot.contourf documentation).
+ Make a filled contour plot over the map
+ (see matplotlib.pyplot.contourf documentation).
+
 If x or y are outside projection limb (i.e. they have values > 1.e20),
 the corresponing data elements will be masked.
 
 Extra keyword 'ax' can be used to override the default axis instance.
+
+ Other \*args and \**kwargs passed on to matplotlib.pyplot.scatter.
 """
 if not kwargs.has_key('ax') and self.ax is None:
 try:
@@ -2736,11 +2751,11 @@
 def quiver(self, x, y, u, v, *args, **kwargs):
 """
 Make a vector plot (u, v) with arrows on the map.
+ (see matplotlib.pyplot.quiver documentation).
 
- Extra arguments (\*args and \**kwargs) passed to quiver Axes method (see
- matplotlib.pyplot.quiver documentation for details).
+ Extra keyword ``ax`` can be used to override the default axis instance.
 
- extra keyword 'ax' can be used to override the default axis instance.
+ Other \*args and \**kwargs passed on to matplotlib.pyplot.quiver.
 """
 if not kwargs.has_key('ax') and self.ax is None:
 try:
@@ -2774,38 +2789,53 @@
 def drawlsmask(self,rgba_land,rgba_ocean,lsmask=None,
 lsmask_lons=None,lsmask_lats=None,lakes=False,**kwargs):
 """
- draw land-sea mask image.
+ Draw land-sea mask image.
 
- *Note* the land-sea mask image cannot be overlaid on top
- of other images, due to limitations in matplotlib image handling.
+ .. note::
+ The land-sea mask image cannot be overlaid on top
+ of other images, due to limitations in matplotlib image handling
+ (you can't specify the zorder of an image).
 
- land is colored with rgba integer tuple rgba_land.
- ocean is colored with rgba integer tuple rgba_ocean.
+ ============== ====================================================
+ Arguments Description
+ ============== ====================================================
+ rgba_land rgba integer tuple that describes desired
+ land color. For example, for green (non-transparent)
+ land areas, use rgba_land = (0,255,0,255).
+ rgba_ocean rgba integer tuple that describes desired
+ ocean color. For example, for blue (non-transparent)
+ ocean areas, use (0,0,255,255). To make transparent
+ blue oceans (useful if you just want to mask land
+ regions over another image), use 
+ rgba_ocean = (0,0,255,0).
+ ============== ====================================================
 
- For example, to color oceans blue and land green, use
- rgba_ocean = (0,0,255,255) and rgba_land = (0,255,0,255).
- To make oceans transparent (useful if you just want to mask land
- regions over another image), use rgba_ocean = (0,0,255,0).
+ ============== ====================================================
+ Keywords Description
+ ============== ====================================================
+ lakes If True, inland lakes are also colored with
+ rgba_ocean (default is lakes=False).
+ lsmask An array of 0's for ocean pixels, 1's for
+ land pixels and optionally 2's for inland
+ lake pixels defining a global land-sea mask.
+ Default is None, and default
+ 5-minute resolution land-sea mask is used.
+ lsmask_lons 1d array of longitudes for lsmask (ignored
+ if lsmask is None). Longitudes must be ordered
+ from -180 W eastward.
+ lsmask_lats 1d array of latitudes for lsmask (ignored
+ if lsmask is None). Latitudes must be ordered
+ from -90 S northward.
+ \**kwargs extra keyword arguments passed on to 
+ :meth:`imshow`
+ ============== ====================================================
 
- If lakes=True, inland lakes are also colored with
- rgba_ocean (default is lakes=False).
-
- Default land-sea mask is from
- http://www.ngdc.noaa.gov/ecosys/cdroms/graham/graham/graham.htm
- and has 5-minute resolution.
-
- To specify your own global land-sea mask, set the
- lsmask keyword to a (nlats, nlons) array
- with 0's for ocean pixels, 1's for land pixels and
- optionally 2's for inland lake pixels.
- The lsmask_lons keyword should be a 1-d array
- with the longitudes of the mask, lsmask_lats should be
- a 1-d array with the latitudes. Longitudes should be ordered
- from -180 W eastward, latitudes from -90 S northward.
 If any of the lsmask, lsmask_lons or lsmask_lats keywords are not
- set, the default land-sea mask is used.
+ set, the default land-sea mask from
+ http://www.ngdc.noaa.gov/ecosys/cdroms/graham/graham/graham.htm.
+ is used.
 
- extra keyword 'ax' can be used to override the default axis instance.
+ Extra keyword ``ax`` can be used to override the default axis instance.
 """
 # look for axes instance (as keyword, an instance variable
 # or from plt.gca().
@@ -2898,15 +2928,17 @@
 
 def warpimage(self,image="bluemarble",**kwargs):
 """
- display an image (given by file keyword) as a background.
+ Display an image (given by ``image`` keyword) as a map background.
 
- Default (if file not specified) is to display 
+ Default (if ``image`` not specified) is to display 
 'blue marble next generation' image from http://visibleearth.nasa.gov/.
 
 Specified image must have pixels covering the whole globe in a regular
 lat/lon grid, starting and -180W and the South Pole.
 
- extra keyword 'ax' can be used to override the default axis instance.
+ Extra keyword ``ax`` can be used to override the default axis instance.
+
+ \**kwargs passed on to :meth:`imshow`.
 """
 try:
 from PIL import Image
@@ -2987,36 +3019,36 @@
 units='km',fontsize=9,yoffset=None,labelstyle='simple',\
 fontcolor='k',fillcolor1='w',fillcolor2='k',ax=None):
 """
- draw a map scale at lon,lat representing distance in the map
- projection coordinates at lon0,lat0.
+ Draw a map scale at ``lon,lat`` of length ``length`` 
+ representing distance in the map
+ projection coordinates at ``lon0,lat0``. 
 
- The length of the scale
- is specified by the length argument, with units given by the units
- keyword (default 'km'). 
+ ============== ====================================================
+ Keywords Description
+ ============== ====================================================
+ units the units of the length argument (Default km).
+ barstyle ``simple`` or ``fancy`` (roughly corresponding
+ to the styles provided by Generic Mapping Tools).
+ Default ``simple``. 
+ fontsize for map scale annotations, default 9.
+ color for map scale annotations, default black.
+ labelstype ``simple`` (default) or ``fancy``. For
+ ``fancy`` the map scale factor (ratio betwee
+ the actual distance and map projection distance
+ at lon0,lat0) and the value of lon0,lat0 are also 
+ displayed on the top of the scale bar. For 
+ ``simple``, just the units are display on top
+ and the distance below the scale bar.
+ yoffset yoffset controls how tall the scale bar is,
+ and how far the annotations are offset from the
+ scale bar. Default is 0.02 times the height of 
+ the map (0.02*(self.ymax-self.ymin)).
+ fillcolor1(2) colors of the alternating filled regions
+ (default white and black). Only relevant for 
+ 'fancy' barstyle.
+ ============== ====================================================
 
- Two styles of scale bar are available
- (specified by the labelstyle keyword) - 'simple' and 'fancy', which
- correspond roughly to the corresponding styles provided by 
- the Generic Mapping Tools software. Default is 'simple'.
-
- The fontsize and color of the map scale annotations can be specified
- with the fontsize (default 9) and fontcolor (default black) keywords.
-
- labelstyle='simple' results in basic annotation (the units on top
- of the scalebar and the distance below). This is the default.
- If labelstyle='fancy' the map scale factor (ratio between
- the actual distance and map projection distance at lon0,lat0) and
- the value of lon0,lat0 are also printed on top of the scale bar.
-
- yoffset controls how tall the scale bar is, and how far the annotations
- are offset from the scale bar. Default is 0.02 times the height of the map
- (0.02*(self.ymax-self.ymin)).
-
- fillcolor1 and fillcolor2 are only relevant for the 'fancy' scale bar.
- They are the colors of the alternating filled regions (default white
- and black).
-
- extra keyword 'ax' can be used to override the default axis instance.
+ Extra keyword ``ax`` can be used to override the default axis instance.
 """
 # get current axes instance (if none specified).
 if ax is None and self.ax is None:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

Showing 6 results of 6

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.
Thanks for helping keep SourceForge clean.
X





Briefly describe the problem (required):
Upload screenshot of ad (required):
Select a file, or drag & drop file here.
Screenshot instructions:

Click URL instructions:
Right-click on the ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)

More information about our ad policies

Ad destination/click URL:

AltStyle によって変換されたページ (->オリジナル) /