version 1.0.2 (git tag v1.0.2)
* update include geos from 3.2.0 to 3.3.1 so it compiles with gcc
* added colorbar method that uses axes_grid toolkit to
create colorbar axes.
* replace hasattr(arr,'mask') with numpy.ma.isMA(arr).
* docs updated, moved to matplotlib.github.com/basemap.
* added optional 1.25, 2.5 and 10 minute land/sea masks (derived from
GSHHS coastline data). 'resolution'
and 'grid' kwargs added to drawlsmask and maskoceans.
'resolution' can be 'c','l','i','h' or 'f', grid can be 1.25,2.5,5 or 10.
* update shapefile.py from pyshp.googlecode.com to r72.
* change default land-sea mask (now derived directly from gshhs
coastline data, default is 5 minutes use coastline resolution =
'l'). Default for plotting lakes is now True.
* add etopo method (similar to bluemarble, but plots etopo
relief image from www.ngdc.noaa.gov/mgg/global as a map background).
* add shadedrelief method (similar to bluemarble, but plots shaded
relief image from naturalearthdata.com as a map background).
* replace pyshapelib with pure python shapelib.py from
pyshp.googlecode.com. Allows full python 3 compatibility.
* fix doc/conf.py to use inheritance_diagram from Sphinx, not
* fix drawlsmask so cylindrical projections work correctly when
longitude range outside of -180 to 180.
* python 3 compatibility.
* added lic_demo.py to examples (line integral convolution,
* removed deprecated NetCDFFile.
* added zorder keyword to drawmapscale.
version 1.0.1 (svn revision 8967)
* regenerated C source with cython 0.14.1.
* added new "allsky" example from Tom Loredo.
* added 'celestial' keyword - if True astronomical convention for
longitude is used (negative for 'east', positive for 'west').
celestial=True implies resolution=None (no continents or
* improve placement of labels for parallels for pseudo-cylindrical
projections like mollweide, hammer.
* added support for Hammer projection (required adding inverse
projection to proj4 src in src/PJ_hammer.c).
* updated src/pj_mutex.c from proj4 svn to fix a threading bug
* if you try to transform NaNs to/from map projection coords, 1.e30
is returned (previously, this caused a segfault for some
* NetCDFFile function deprecated, will be removed in 1.0.2. Issue
warning advising users to use netcdf4-python instead.
* Deleting an item from the dicts returned by drawparallels
and drawmeridians removes the corresponding parallel or meridian (and
associated labels) from the plot.
* add a remove method to the tuples that are returned in
the dicts returned by drawparallels and drawmeridians.
version 1.0 (svn revision 8531)
* don't force adjustable='box' so Basemap is compatible
with AxesGrid. Added fcstmaps_axesgrid.py example.
* add support for plotting on unstructured grids using
keyword 'tri' in pcolor,contour,contourf methods (which
then forward to tripcolor, tricontour, tricontourf axes
methods). examples/ploticos.py added.
* let continents that fill the whole map be filled.
* added option for cubic spline interpolation in interp function
(order=3) using scipy.ndimage.
* added "near-sided perspective" projection for a satellite
view at an arbitrary altitude.
* patch from Stephane Raynaud to pass format string to
drawmapscale, and allow units='m'.
* updated proj4 source to version 4.7.0, pyproj to 1.8.6.
* add "is_land" method to check whether a point is over land or
* geos-3.1.1 now required. 3.2.0 source included (instead of 2.2.3).
* shiftgrid no longer requires a cyclic point to be present
(patch from Eric Bruning).
* fix date2index bugs.
* update date2index function with a bug-fix from netcdf4-python.
* in contourf method, mask data outside map projection region
(this prevents contourf from erroneously filling entire map).
* added 'nightshade' method to shade night regions on a map.
'daynight.py' example added to illustrate usage.
* added lonmin, lonmax instance variables.
version 0.99.4 (svn revision 7332)
* ax.frame replaced with ax.spines to maintain compatibility
with matplotlib spines support.
* added latmax kwarg to drawparallels and drawmeridians
(patch from Chris Murphy).
* added new example "plotmap_shaded.py" (shaded relief plot).
* added new example "plothighsandlows.py".
* add fix_aspect kwarg to Basemap.__init__, when False
axes.set_aspect is set to 'auto' instead of default 'equal'.
Can be used to make plot fill whole plot region, even if the
plot region doesn't match the aspect ratio of the map region.
* added date2index function, updated netcdftime to 0.7.1.
* added maskoceans function.
* update pupynere to version 1.0.8 (supports writing large files).
* added more informative error message in readshapefile when
one of the shapefile components can't be found.
version 0.99.3 (svn revision 6780)
* if upper right/lower left corners nor width/height given for
azimuthal equidistant ('aeqd') the whole world is drawn in
a circle (only works for perfect spheres, not ellipsoids).
* have setup.py check for already installed pyshapelib (just
like it does for httplib2 and pydap).
* Basemap will now look for it's data in BASEMAPDATA.
If that env var not set, it will fall back to it's
* if readshapefile is called with drawbounds=True, a
LineCollection object is appended to the returned tuple.
* make sure drawmapscale method returns a list of objects that
can be iterated over to remove them from the plot.
* fillcontinents was returning just last Polygon instance.
Now returns a list of all Polygon instances.
* bluemarble/warpimage: pass kwargs to imshow,
return Image instance.
version 0.99.2 (svn revision 6541)
* fix drawlsmask method so that it works for cylindrical
projections with limits outside (-180,180).
* added 'scale' keyword to bluemarble and warpimage methods to
downsample image background.
* Made lat_ts default to 0 for mercator.
* Now can specify just lon_0 for all cylindrical projections
(to produce global map centered on lon_0).
* Added save_background.py example, showing how to re-use
a map background without redrawing coastlines.
* Added embedding_map_in_wx.py example (courtesy of
* Added masked array support to shiftgrid function
(thanks to Jesper Larsen).
* defer import of netcdf stuff till it is needed (in NetCDFFile
* Added McBryde-Thomas Flat Polar Quartic (projection =
'mbtfpq'), Gall Stereographic Cylindrical (projection =
'gall') and van der Grinten (projection = 'vandg').
* fix bugs in warpimage and bluemarble methods for several projections.
* bugfix patch for rotate_vector from David Huard. David
also contributed the beginnings of a test suite.
* make sure scatter method sets pyplot color mappable.
* added cubed_sphere example.
* updated NetCDFFile to use pupynere 1.0.2 (now can write as well
* now works with geos version 3.
* added "proj4string" Basemap instance variable.
* testgdal example now uses gdal to read topo data from a raster
DEM file and ogr to read state boundaries from a shape file.
* warpimage method can now handle gray-scale images, and
images specifed as URLs (for example, the Blue Marble images from
version 0.99.1 (svn revision 5961)
* geos-2.2.3 patched for compatibility with gcc 4.3.
* added "barbs" method to draw wind barbs on the map.
* added "tissot" method for generating Tissot's indicatrix
(see example plot_tissot.py).
* fixed processing of coastlines for gnomonic projection.
* don't try to use PyNIO in NetCDFFile (it was causing
too many suprises).
* start of improved documentation using Sphinx/docutils.
Can be viewed at
* change default behaviour of num2date and date2num to be
the same as matplotlib counterparts.
version 0.99 (svn revision 5344)
* fix to warpimage method for API change in matplotlib 0.98.0.
* updated pyproj to 1.8.6.
* fixed bug in NetCDFFile creating masked arrays when both
_FillValue and missing_value exist.
* drawparallels and drawmeridians return a dictionary containing
the Line2D and Text instances associated with each lat or lon.
* drawcoastlines, drawcountries and friends now have
PatchCollection return values.
* make sure '_nolabel_' set on coastlines, countries, states,
rivers, parallels and meridians so they are not included in
* added drawmapscale method to create a map scale bar similar
to that available with the GMT's psbasemap.
* Now lives in mpl_toolkits.basemap. Instead
of 'from matplotlib.toolkits.basemap import Basemap',
use 'from mpl_toolkits.basemap import Basemap'.
All examples changed. Uses matplotlib mpl_toolkits
namespace package, so basemap can now be installed
if matplotlib is installed as an egg. Python 2.3
* changed _geos to _geoslib, so as not to conflict with
the python module bundled with the GEOS library.
* some fixes/enhancements for omerc projection (added 'no_rot'
* added warpimage method for displaying an image background.
Default is NASA's blue marble image, which is included.
version 0.9.9.1 (svn revision 4808)
* require python 2.4 (really only needed for building).
Once namespace packages are re-enabled in matplotlib,
python 2.3 should work again.
version 0.9.9 (svn revision 4799)
* updated proj4 sources to version 4.6.0.
* removed hidden dependency on setuptools (in dap module).
* fixed exception handling bug in code that looks for
intersection between boundary feature and map projection
* setup.py now looks for GEOS library in a few standard
places (/usr/local, /opt, $HOME, /sw) if the GEOS_DIR
environment variable not set. This is a workaround for a
new Leopard 'feature' (sudo does not inherit enviroment
* added support for reading Point and MultiPoint shapes
from ESRI shapefiles.
* now automatically draws figure if running in
interactive mode (so draw() does not need
to be called explicitly in ipython).
* added num2date and date2num functions, which use
included netcdftime module.
version 0.9.8 (svn revision 4526)
* fixes for filling continents in orthographic projection.
* added 'maskandscale' kwarg to NetCDFFile to
optionally turn off automatic masking and rescaling
of variable data.
* NetCDFFile will try to use PyNIO if it installed
and the file cannot be read with pupynere. This
allows GRIB1,GRIB2,HDF4 and HDFEOS2 files to
* 'fmt' kwarg to drawparallels and drawmeridians can
now be a custom string formatting function (example
customticks.py demonstrates usage).
* remove 'linestyle' kwarg from drawparallels and
drawmeridians (it never did anything anyway since
it was overridden by the 'dashes' kwarg).
* modify NetCDFFile to use dap module to read remote
datasets over http. Include dap and httplib2 modules.
* modify NetCDFFile to automatically apply scale_factor
and add_offset, and return masked arrays masked where
data == missing_value or _FillValue.
* add 'fill_color' option to drawmapboundary, to optionally
fill the map projection background a certain color.
* added 'sstanom' colormap from
version 0.9.7 (svn revision 4422)
* fixed bug in drawlsmask for 'moll','robin' and 'sinu'
* added lake_color keyword to fillcontinents.
* fixed a bug in the 'tmerc' projection.
* added pure python NetCDFFile reader from Roberto De Almeida
to basemap namespace
(from matplotlib.toolkits.basemap import NetCDFFile).
* added support for full-resolution boundaries (will be
a separate download). Full-res files (totaling around
100 mb) available in SVN.
* high-resolution boundaries now included.
* postpone processing of countries, states and river
boundaries until a draw is requested. Only the
coastlines are processed in __init__.
* use a Pyrex/Cython interface to the GEOS library
(http://geos.refractions.net - LGPL license)
to find geometries that are within map projection region.
This speeds up instance creation for small map regions and
high resolution coastlines. Boundary datasets now in binary
format (I/O is faster). Requires GEOS version 2.2.3, source
* remove all numerix imports.
* fix rotate_vector so it works in S. Hem and for non-orthogonal
grids. Support for masked velocity vectors also added. (EF)
* numpification. (EF)
version 0.9.6 (svn revision 3888)
* fix addcyclic function so it handles masked arrays.
* labelling of meridians and parallels now works with
very small map regions (less than 0.2 degrees square).
* Subregions of the globe may be specified with llcrnrlat,
llcrnrlon,urcrnrlat,urcrnrlon keywords for 'ortho' and 'geos'.
(illustrated by examples/geos_demo_2.py).
* Added "labelstyle" keyword to drawparallels and drawmeridians.
If set to "+/-", labels are given prefixed by "+" or "-",
instead of suffixed with "N","S","E" or "W". Useful for
astronomical plots, where the is no such thing and north, south
east or west.
* Added support for geostationary satellite projection
(projection='geos'), contributed by Scott Sinclair.
Illustrated by examples/geos_demo.py.
* added a bunch of extra colormaps (mostly from GMT),
and a script to plot them (examples/show_colormaps.py).
To import new colormaps, use 'from matplotlib.toolkits.basemap
* orthographic projection only defined for perfect sphere - raise
an error if user tries to use an ellipsoid.
* print a warning in contour, contourf in situations that may
result in a screwy looking plot (x not monotonically increasing,
because the data wraps around the edge of the plot). The warning
suggests using the shiftgrid function to recenter the data on
the map projection region.
* fixed setup.py so it works properly with python 2.3,
and on Windows.
* added zorder keyword to drawmeridians, drawparallels,
drawcoastlines, drawstates, drawcountries, drawrivers,
readshapefile and fillcontinents.
* numpy now required.
* added 'srs' (spatial reference system) instance variable.
* updated pyproj to version 1.8.3. Now uses pyproj.Geod
for Great Circle calculations. proj.4 data files now included.
* make sure axes ticks are always turned off, unless noticks=False
set when creating Basemap instance.
20070314: version 0.9.5 (svn revision 3083)
* fixed examples to conform to 'one show() per script' rule.
* intermediate coastlines now installed by default.
basemap-data is no longer a separate package (couldn't
figure out how to manage the egg). If the 'h' res
boundaries are needed, the data files must be manually
put in place by the user. BASEMAP_DATA_PATH env var
no longer used.
* reorganized data files so that bdist_egg includes the data.
setup-data.py now used to install the high-res data files.
* make sure proj returns 1.e30 instead of HUGE_VAL for
undefined transformations (HUGE_VAL is inf on most
platforms, which gets embedded in the postscript, resulting
in a un-renderable file)
* typedef Py_ssize_t if necessary - ADS
* rename pyproj.so _pyproj.so, added a python wrapper pyproj.py,
moved pyproj into matplotlib.toolkits.basemap.
20061117: version 0.9.4
* added "Tissot's indicatrix" example.
* 'extent' keyword was erroneously being passed to pcolor.
* update proj4 source files to version 4.5.0.
* updated pyproj to version 1.8.0 (better error handling).
20061017: version 0.9.3
* update pyproj.c to be compatible with python 2.5.
* added new example ccsm_popgrid.py (contributed by Ivan Lima).
20060831: version 0.9.2
* fixed several bugs in drawlsmask method.
* removed buggy optimizations for cylindrical projections not
crossing the Greenwich meridian.
* can now specify map projection region by setting width and height
in projection coordinates (in meters) instead of specifying
lat/lon of upper right and lower left corners.
20060727: version 0.9.1
* make sure llcrnrlat and llcrnrlon are not at poles for mercator.
* use Eric Firing's new quiver in Basemap quiver method.
* interp functions now work with masked arrays.
* added some sanity checks for projection parameters.
* change from classic to new-style classes.
* removed deprecated 'createfigure' method.
* fixed some creeping numpy'isms (which caused breakage
when numarray or Numeric were used).
20060609: version 0.9:
* updated for new matplotlib aspect ratio handling.
Now maps will always have the correct aspect ratio.
* if resolution keyword is set to None when Basemap
instance is created, no boundary data sets are needed
(methods to draw boundaries, like drawcoastlines, will
raise an exception).
* update to proj4 module - renamed pyproj to avoid
conflicts with proj4 module from CDAT.
* createfigure method deprecated, since maps
will now automatically have the correct aspect ratio.
* Added new projections Xpstere, Xplaea, Xpaeqd (where X
can be n or s). These are special-case, polar-centric
versions of the stereographic, lambert azimuthal equal area
and azimuthal equidistant projections that don't require
you specify the lat/lon values of the lower-left and upper-right
* fixed bugs in plot, scatter and mapboundary methods for
miller, cylindrical and mercator projections.
* 'crude' and 'low' resolution boundary datasets now installed
by default. basemap_data package now only needed for to get
'intermediate' and 'high' resolution datasets.
* moved all packages under single lib/ directory so
setuptools' "develop" command works properly.
* Added sinusoidal projection.
* bilinear interpolation routines can return masked arrays with
values outside range of data coordinates masked.
* New examples (warpimage.py - warping an image to
different map projections, polarmaps.py - simplified polar
projections, garp.py - 'World According to Garp' maps).
* pcolormesh method added.
* drawlsmask method added for masking oceans and/or land areas.
5 minute land-sea mask dataset added.
20060222: version 0.8.2: Minor bug fixes, mostly in examples.
20060203: version 0.8.1: Huge speedups for numpy
(no significant differences for Numeric and numarray).
20060114: version 0.8: added numpy compatibility
20051118: version 0.7.2.1:
There was a problem running examples that read pickle files.
The pickle files were created with numarray, and the
data would not be read correctly using Numeric. Fixed so
that pickles are created with Numeric and Numeric is used
to read them.
20051018: version 0.7.2:
* No longer requires numarray (interp function no
longer uses numarray.nd_image).
* Modified to work with the new ContourSet returned
by contour and contourf.
* Axes frame turned off by default for non-rectangular
projections ('ortho','robin' and 'moll').
* Added createfigure method to create a figure with the
same aspect ratio as the map using pylab.figure.
* Resets subplot.params defaults so that default
axes rectangle will have both a width and height of 0.9
(this ensures that the figure size determines that aspect
ratio of the plot).
* readshapefile method raises an exception if the vertices
look like they are not in geographic (lat/lon) coordinates.
20050921: version 0.7.1:
Fixed several bugs in meridian/parallel labelling and
Cylindrical projections that crossed greenwich were not
being handled properly.
Added 'fmt' keyword arg to drawmeridians and drawparallels
(default is '%g').
Fixed bug in 'readshapefile' that prevented boundaries from
being drawn for 'cyl','merc' or 'miller' projections when the
map region did not cross the greenwich meridian.
Modified imshow method so 'origin' keyword is accepted (it
was always set to 'lower' previously).
Added testgdal.py example showing how to plot raster
geospatial data with gdal module (gdal.maptools.org).
Meridians and parallels labelled correctly when
20050914: version 0.7:
Optimizations to reduce the time it takes to create
a Basemap class instance - now nearly 4 times faster
when using resolution='i'.
Added 'h' (high) resolution boundary data.
Added datasets for major rivers, "drawrivers" class method.
Fixed some errors in boundaries datasets.
Boundary datasets now installed in a separate package.
Should now handle Numeric to numarray conversions internally,
so removed warning when rcParams['numerix'] != 'numarray'.
Changed default area_thresh so it depends on coastline
resolution (10000 for 'c' declining to 10 for 'h').
20050901: version 0.6.2:
Warning issued if numerix = 'Numeric' (a user reported
crashes due to botched Numeric --> numarray conversions).
Changes to proj4 wrapper to make Basemap instances pickle-able.
20050814: version 0.6.1:
Added hurrtracks.py example (plot hurricane tracks from
Now includes pyshapelib (extracted from Thuban source).
20050811: version 0.6:
sf bug #1254163 (make sure lat/lon limits of projection are floats)
wiki_example.py and plotclimdiv.py examples added.
Added 'readshapefile' method for reading and plotting data
from ESRI shapefiles (requires pyshapelib from Thuban).
plotclimdiv.py is an example that illustrates this.
20050628: version 0.5.2:
fixed bug in meridian labelling when lon > 360 or lon < -180.
Now fully "pylab free" if 'ax' keyword is used in Basemap.__init__
or all of the Basemap methods that do drawing.
20050626: version 0.5.1:
Added ability to specify an existing axis instance in
all Basemap methods (instead of just using current one).
Default is still to use current axis instance.
Full control of font properties for parallel and meridian
labels (now uses unicode instead of mathtext for degree symbol).
20050602: version 0.5
Added Orthographic, Mollweide and Robinson projections.
Added 'drawmapboundary' method to draw a
line around the map projection region.
Added 'suppress_ticks' keyword to Basemap.__init__
It's True by default, but can be set to False if you
want to label ticks in native map projection coordinates.
Added 'rotate_vector' method to rotate vectors to map
projection coordinates (without interpolation, as in
Modified pcolor, contour, contourf methods to use
masked arrays. Now requires matplotlib-0.81
drawparallels and drawmeridians methods now take optional
keyword arguments 'xoffset' and 'yoffset', which control how
far from the edge of the map labels are drawn.
20050511: version 0.4.3
Added Oblique Mercator.
great circle calculations now use vincenty's equations
for an ellipsoid.
20050510: version 0.4.2
transform_vector now does a simple rotation of the vector
from geographic to map coordinates, preserving the vector
magnitude (removed 'preserve_magnitude' keyword).
Minor bugs in Miller and Mercator projections fixed.
Added Gnomonic, Cassini-Soldner and Polyconic projections
(now 13 projections supported).
20050509: version 0.4.1
Miller projection was erroneously referred to by the name
'miller' (instead of 'mill') - fixed. Added the ability
to specify the major and minor sphere radii by specifying
the 'rsphere' keyword in __init__ to be a tuple instead of
20050505: version 0.4
added support for miller cylindrical, equidistant conic,
and azimuthal equidistant projections. Bugs fixed in
coastline drawing and continent filling methods.
20050427: version 0.3.3
fillcontinents modified to not fill lakes (they
are actually still filled, but with axis background color).
20050420: version 0.3.2 - code cleanups and docstring typo fixes.
env var BASEMAP_DATA_PATH can now be used to point to
data files in a non-standard install (i.e using --prefix
20050415: version 0.3
Added transform_scalar and transform_vector methods for
interpolating scalar and vector fields to a map projection
grid. Added shiftgrid and addcyclic convenience functions.
Added quiver_demo.py example illustrating how to plot
wind vectors on a map. Updated examples to use
transform_scalar instead of calling interp directly.
Mercator x coordinate units changed from degrees to meters
setup.py now installs data in python-version-numbered directory.
(so you can have separate copies for different python versions).
Fixed aspect ratio of mercator plots.
pcolor and quiver methods.
axes instance no longer a method argument (API change).
20050410: version 0.2.1 - add gcpoints and drawgreatcircles methods.
Added intermediate resolution coastline and political
boundary databases. Fixed bug in filling continents,
and another bug in drawing parallels/meridians. Added
20050404: version 0.2 - drawparallels and drawmeridians can now
draw labels at edge of map.
20050331: version 0.1.2 - now can handle negative longitudes (patch
from Michael Brady). basemap.interp can now handle irregular
(but still rectilinear) lat/lon grids.
20050203: version 0.1 released on SF.
20050202: Changed LineCollections.color to set_color in a try/except block.
(color was a typo in 0.71 and is deprecated).
20050130: no user visible changes. Uses new pyrex generated
C extension interface to proj.4 which is twice as
fast as the Thuban one.
20050124: some code reorg, fixed bugs in S. Hem. projections.
xmin,xmax,ymin,ymax Basemap instance variables renamed
to llcrnrx,urcrnrx,llcrnry,urcrnry. Added __call__
and makegrid methods to Basemap class.
20050121: proj.4 is now called via a C-library interface, instead
of using the proj command-line tool via os.popen.
20050119: fixed glitches in drawing of parallels and meridians.