Changelog history

ProPlot v1.0.0 (2020-##-##)

This will be published when some major refactoring tasks are completed, and deprecation warnings will be removed. See GH#89, GH#109, GH#110, and GH#111.

ProPlot v0.7.0 (2020-##-##)



  • All features are now implemented with individual setters, like in matplotlib, but we still encourage using the bulk set method through documentation examples and by populating the set docstring (so valid arguments are no longer implicit).

  • Users can now use figure with add_subplot or subplots (GH#110). This is a major improvement!

  • GridSpec now accepts physical units, rather than having subplots handle the units (GH#110).

  • Allow “hanging” twin x and y axes as members of the EdgeStack container. Arbitrarily many siblings are now permitted.

  • Use GeometrySolver for calculating various automatic layout stuff instead of having 1000 hidden Figure methods (GH#110).

  • Use EdgeStack class for handling stacks of colorbars, legends, and text (GH#110).


  • Assignments to rc_configurator are now validated, and the configurator is now a monkey patch of rcParams (GH#109).

  • Plotting wrapper features (e.g. standardize_1d) are now implemented and documented on the individual methods themselves (e.g. plot; GH#111). This is much easier for new users.

  • Handle all projection keyword arguments in add_subplot instead of subplots (GH#110).

  • Panels, colorbars, and legends are now members of EdgeStack stacks rather than getting inserted directly into the main GridSpec (GH#110).

ProPlot v0.6.1 (2020-05-20)

Bug fixes

  • Fix issue where cartopy version checking fails if cartopy is not installed (@86cd50b8).

  • Fix issue where “tight” layout of geographic plots was broken in pre-v0.18 cartopy (@72cb93c6).

  • Fix issue where gridline coverage was incomplete in some zoomed-in projections (@458c6d7c).

  • Fix issue where basemap minor gridlines did not update when major gridlines were updated (@427326a7).

ProPlot v0.6.0 (2020-05-20)


There are quite a lot of deprecations for this release.

  • Remove the geoaxes and geogrid rc settings (GH#168). Gridline settings are now controlled with grid.

  • Remove the lonstep and latstep settings – we now use LongitudeLocator and LatitudeLocator to select “nice” gridline locations even when zoomed in (GH#168)

  • Rename add_errorbars to indicate_error and rename various keyword args (GH#166, @d8c50a8d).

  • Remove 'rgbcycle' setting (@6653b7f0).

  • Deprecate support for “parametric” plots inside plot, instead use parametric (@64210bce).

  • Change units units keyword argument to more natural dest (@62903b48).

  • Remove the public objects normalizers, locators, formatters, cartopy_projs, basemap_kwargs, cmaps, colors, and fonts (GH#149).

  • Drop support for .xrgb and .xrgba files (@4fa72b0c). Not sure if any online sources produce these kinds of files.

  • Drop support for .rgba files, but optionally read 4th opacity column from .rgb and .txt files (@4fa72b0c).

  • Stop reversing the 'Spectral' colormap when ProPlot is imported (@ce4ef6a0).

  • Remove 'Blue0' SciVisColor colormap (@7cb4ce0f). It was odd man out in the table, and not even really perceptually uniform.

  • Remove custom ProPlot cycles – these should be thought out much more carefully (@43f65d17).

  • Remove “crayola” colors and clean up the register_colors algorithm (@8922d6de). Crayola color names less intuitive than XKCD.

  • Use 'cmap_s' instead of 'cmap_shifted' to quickly get a 180 degree-shifted colormap, similar to 'cmap_r' (@da4ccb08).

  • Rename GrayCycle colormap to MonoCycle to more accurately reflect colormap design origins (@d67e45bf).

  • Rename MidpointNorm to more intuitive DivergingNorm, and make “fair” color scaling the default behavior (@2f549c9).

  • Rename XYAxes to CartesianAxes, GeoAxes to CartopyAxes, and ProjAxes to GeoAxes (@4a6a0e34).

  • Rename BinNorm to DiscreteNorm and fix issues with diverging norm color scaling (@98a976f1).

  • Rename ColorDict to ColorDatabase, CmapDict to ColormapDatabase (@9d7fd3e0).

  • Rename concatenate to append, updated to copy, truncated to truncate, and punched to cut (@e1a08930). The old method names remain with a deprecation warning.


  • Add SigFigFormatter (GH#149, @da6105d2) and SciFormatter (GH#175, @c43f7f91) axis formatters.

  • Use _LonAxis and _LatAxis dummy axes with custom LongitudeLocator and LatitudeLocator to control geographic gridlines (GH#168).

  • Add 'dmslat' and 'dmslon' as formatters for cartopy projections, along with dms format keyword argument. This labels points with degrees/minutes/seconds when appropriate (GH#168).

  • Support “minor” geographic gridlines with the gridminor keyword arg and existing gridminor settings (GH#168). Default locator used for minor gridlines is AutoMinorLocator.

  • Add loninline, latinline, and rotatelabels keywords for controlling cartopy gridliner behavior (GH#168).

  • Add and proplot.config.rc_configurator.from_file methods (@e6dd8314).

  • Increase default rc[‘savefig.dpi’] to 1200, matching recommendations from academic journals (@c00e7314). Also add detailed discussion to user guide.

  • No longer distinguish between “quick” settings and proplot’s “added” settings (@e6dd8314). Quick settings, added settings, and matplotlib settings can all have “children” so the distinction no longer makes sense.

  • Add opacity-preserving functions to_rgba and to_xyza, plus set_alpha for changing alpha channel of arbitrary color (@81c647da).

  • Add to set_alpha the ability to create an opacity gradation, rather than just an opacity for the entire colormap (@4a138ba4).

  • Support passing colormap objects, not just names, to show_cmaps and show_cycles (@7f8ca59f).

  • Add options to indicate_error for adding shading to arbitrary plots (GH#166, @d8c50a8d). Also support automatic legend entries for shading and ensure indicate_error preserves metadata.

  • Wrap pcolorfast just like pcolor and pcolormesh are wrapped (@50a262dd).

  • Add negpos feature to bar_wrapper and new rc.negcolor and rc.poscolor rc keyword arguments (@ab4d6746).

  • Support vlines and hlines flexible arguments and add negpos feature (@1c53e947, @e42ee913).

  • Increase default line width from 0.6 to 0.8 to match matplotlib defaults (@f801852b; try to avoid frivolously changing defaults).

  • Change default resolution for geographic features from 'lo' to 'med' (@f801852b).

  • Change default line style for geographic gridlines from ':' to '-' and match style from primary gridlines (@f801852b).

  • Support cartopy 0.18 locators, formatters, deprecations, and new labelling features (GH#158).

  • Support building a colormap and DiscreteNorm inside scatter, just like contourf and pcolormesh (GH#162).

  • Add rc[‘geogrid.labelpad’] and rc[‘geogrid.rotatelabels’] settings for cartopy gridline labels (GH#158).

  • Support more AutoFormatter features on SimpleFormatter (@6decf962).

  • Support drawing colorbars with descending levels (@10763146)

  • Add support for matplotlib stylesheets with use_style function and style rc param (@edc6f3c9).

  • Add categories keyword arg to show_cmaps and show_cycles (@79be642d).

  • Hide bad colormaps like 'jet' from the show_cmaps table instead of deleting them outright, just like CSS4 colors (@ce4ef6a0).

  • Draw show_colors table as single figure with category labels, similar to show_cmaps (@c8ca2909).

  • Make 'Grays' and 'Greys' synonyms for the same ColorBrewer colormap (@da4ccb08).

  • Permit drawing “outer” axes and figure legends without explicitly passing handles (@a69b48eb). Figure legends use the handles from all axes.

  • Add to_listed and to_linear_segmented methods for handling conversions (GH#e1a08930).

  • Permit merging mixed colormap types LinearSegmentedColormap with PerceptuallyUniformColormap (@972956b1).

  • Include the alpha channel when saving colormaps and cycles by default (@117e05f2).

  • Permit 8-character hex strings with alpha channels when loading colormaps and color cycles from hex files (@381a84d4).

  • Publicly support “filling” axes with colorbars using loc='fill' (@057c9895).

  • Make 'Grays' colormap identical to 'Greys' (@da4ccb08).

  • Return both figure and axes in show_ functions; this gives users access to the axes and prevents drawing them twice in notebooks (@2f600bc9).

  • Enable passing callables to Formatter to create a FuncFormatter instance.

  • Support sampling LinearSegmentedColormap into ListedColormaps inside of Colormap rather than Cycle (GH#84, @972956b1).

Bug fixes

  • Fix various issues with axis label sharing and axis sharing for twinned axes and panel axes (GH#164).

  • Permit modifying existing cartopy geographic features with successive calls to format (GH#168).

  • Fix issue drawing bar plots with datetime x axes (GH#156).

  • Fix issue where AutoFormatter tools were not locale-aware, i.e. use comma as decimal point sometimes (@c7636296).

  • Fix issue where AutoFormatter nonzero-value correction algorithm was right for wrong reasons and could be wrong in rare circumstances (@c7636296).

  • Fix issue where resets backend (@c8319104).

  • Fix issue with colormaps with dots in name (@972956b1).

  • Fix logarithmic scale argument parsing deprecation (@6ed7dbc5).

  • Fix deprecation of direct access to in matplotlib >=3.2.0 (@a69c16da).

  • Fix issues with string font sizes (@6121de03). Add hidden _get_font_size method to translate font size to numeric.

  • Fix issue where passing actual projection instances generated with Proj to subplots could incorrectly pair cartopy projections with basemap axes and vice versa.

  • Fix issue where could not draw colorbar from list of single-color PathCollections, i.e. scatter plots (@e893900b).

  • Fix issue where importing proplot in jupyter notebooks resets the default inline backend (@6121de03).

  • Improve axis label sharing algorithm (@6535b219).

  • Fix main axis label sharing bugs in presence of panels (@7b709db9).

  • Fix v0.4.0 regression where panel sharing no longer works (@289e5538).

  • Fix AutoFormatter bug with values close to zero (GH#124, @9b7f89fd)

  • Fix AutoFormatter bug with small negative numbers (GH#117).

  • Label cyclic Scientific colour maps as cyclic (@e10a3109).

  • Permit special colormap normalization and level scaling for colormap-colored contour plots, just like contourf (@054cceb5).


  • Major internal change: Move functions into smaller separate files to mimic how matplotlib library is divided up (GH#149).

  • Add internals folder containing default proplot rc params, deprecation helper functions, and other internal tools (GH#149).

  • Make colorbar axes instances of CartesianAxes, just like panel axes.

  • Rename ubiquitous _notNone function to _not_none and change to more sensible behavior.

  • Turn some private config functions into static methods (@6121de03).

  • Remove “smart bounds” feature from FuncScale (@9ac149ea).

  • Clean up axes iterators (@c8a0768a).


  • Call figure objects fig instead of f.

  • Major clean up of notebook examples (@f86542b5).

  • Major clean up wrappers documentation (@9648c18f)

  • Fix dead “See Also” links (@d32c6506).

  • Use “Other parameters” tables more often (@d32c6506).

ProPlot v0.5.0 (2020-02-10)


  • Remove abcformat from format (@2f295e18).

  • Rename top to abovetop in format (@500dd381).

  • Rename abc.linewidth and title.linewidth to borderwidth (@54eb4bee).

  • Rename text_wrapper linewidth and invert to borderwidth and borderinvert (@54eb4bee).


  • Add back Fabio Crameri’s scientific colour maps (GH#116).

  • Permit both e.g. locator and xlocator as keyword arguments to altx, etc. (@57fab860).

  • Permit descending BinNorm and LinearSegmentedNorm levels (GH#119).

  • Permit overriding the font weight, style, and stretch in the show_fonts table (@e8b9ee38).

  • Permit hiding “unknown” colormaps and color cycles in the show_cmaps and show_cycles tables (@cb206f19).

Bug fixes

  • Fix issue where show_cmaps and show_cycles colormap names were messed up (@13045599)

  • Fix issue where show_cmaps and show_cycles did not return figure instance (@98209e87).

  • Fix issue where user values passed to colorbar_wrapper were sometimes ignored (@fd4f8d5f).

  • Permit passing lists of colors to manually shade line contours and filled contours in cmap_changer.

  • Prevent formatting rightmost meridian label as 1e-10 on cartopy map projections (@37fdd1eb).

  • Support CF-time axes by fixing bug in standardize_1d and standardize_2d (GH#103, GH#121).

  • Redirect to the “default” location when using legend=True and colorbar=True to generate on-the-fly legends and colorbars (@c2c5c58d). This feature was accidentally removed.

  • Let colorbar_wrapper accept lists of colors (@e5f11591). This feature was accidentally removed.


  • Remove various unused keyword arguments (@33654a42).

  • Major improvements to the API controlling axes titles and a-b-c labels (@1ef7e65e).

  • Always use full names left, right, top, and bottom instead of l, r, b, and t, for clarity (@1ef7e65e).

  • Improve GrayCycle colormap, is now much shorter and built from reflected Fabio GrayC colormaps (@5b2c7eb7).

ProPlot v0.4.3 (2020-01-21)


  • Remove ipython_autoreload, ipython_autosave, and ipython_matplotlib (GH#112, GH#113). Move inline backend configuration to a hidden method that gets called whenever the rc_configurator is initalized.



ProPlot v0.4.2 (2020-01-09)


  • Add family keyword arg to show_fonts (GH#106).

  • Package the TeX Gyre font series with ProPlot (GH#106). Remove a couple other fonts.

  • Put the TeX Gyre fonts at the head of the serif, sans-serif, monospace, cursive, and fantasy rcParams font family lists (GH#104, GH#106).

Bug fixes

  • Fix issues with Fira Math weights unrecognized by matplotlib (GH#106).

ProPlot v0.4.1 (2020-01-08)


  • Change the default .proplotrc format from YAML to the .matplotlibrc syntax (GH#101).


  • Comments (lines starting with #) are now permitted in all RGB and HEX style colormap and cycle files (GH#100).

  • Break down show_cycles bars into categories, just like show_cmaps (GH#100).

Bug fixes

  • Fix issue where show_cmaps and show_cycles draw empty axes (GH#100).

  • Add back the default .proplorc file to docs (GH#101). To do this, auto-generates a file in _static.


  • Add geogrid.color/linewidth/etc and gridminor.color/linewidth/etc props as children of grid.color/linewidth/etc (GH#101).

  • Various rc_configurator improvements, remove outdated global variables (GH#101).

  • Better error handling when loading colormap/cycle files, and calls to Colormap and Cycle now raise errors while calls to register_cmaps and register_cycles still issue warnings (GH#100).

ProPlot v0.4.0 (2020-01-07)


  • Rename basemap_defaults to basemap_kwargs and cartopy_projs to cartopy_names (@431a06ce).

  • Remove subplots.innerspace, subplots.titlespace, subplots.xlabspace, and subplots.ylabspace spacing arguments, automatically calculate default non-tight spacing using _get_space based on current tick lengths, label sizes, etc.

  • Remove redundant use_fonts, use rcParams['sans-serif'] precedence instead (GH#95).

  • dualx and dualy no longer accept “scale-spec” arguments. Must be a function, two functions, or an axis scale instance (GH#96).

  • Remove Axes share[x|y], span[x|y], and align[x|y] kwargs (GH#99). These settings are now always figure-wide.

  • Rename Cycle samples to N, rename show_colors nbreak to nhues (GH#98).


  • Add from_file static methods (GH#98). You can now load files by passing a name to Colormap.

  • Add TeX Gyre Heros as open source Helvetica-alternative; this is the new default font. Add Fira Math as DejaVu Sans-alternative; has complete set of math characters (GH#95).

  • Add xlinewidth, ylinewidth, xgridcolor, ygridcolor keyword args to format (GH#95).

  • Add getters and setters for various Figure settings like share[x|y], span[x|y], and align[x|y] (GH#99).

  • Let twinx, twiny, altx, and alty accept format keyword args just like dualx and dualy (GH#99).

  • Add Figure fallback_to_cm kwarg. This is used by show_fonts to show dummy glyphs to clearly illustrate when fonts are missing characters, but preserve graceful fallback for end user.

  • Improve Proj constructor function. It now accepts Projection and Basemap instances, just like other constructor functions, and returns only the projection instance (GH#92).

  • rc __getitem__ always returns the setting. To get context block-restricted settings, you must explicitly pass context=True to get, fill, or category (GH#91).

Bug fixes

  • Fix context bug (GH#80 and GH#91).

  • Fix issues with dualx and dualy with non-linear parent scales (GH#96).

  • Ignore TTC fonts because they cannot be saved in EPS/PDF figures (GH#94 and GH#95).

  • Do not try to use Helvetica Neue because “thin” font style is read as regular (GH#94 and GH#95).


  • Use the imperative mood for docstring summaries (GH#92).

  • Fix show_cycles bug (GH#90) and show cycles using colorbars rather than lines (GH#98).


  • Define rc default values with inline dictionaries rather than with a default .proplotrc file, change the auto-generated user .proplotrc (GH#91).

  • Remove useless panel_kw keyword arg from legend_wrapper and colorbar_wrapper (GH#91). Remove wflush, hflush, and flush keyword args from subplots that should have been removed long ago.

ProPlot v0.3.1 (2019-12-16)

Bug fixes

  • Fix issue where custom fonts were not synced (@a1b47b4c).

  • Fix issue with latest versions of matplotlib where %matplotlib inline fails silently so the backend is not instantiated (@cc39dc56).

ProPlot v0.3.0 (2019-12-15)



  • Add use_font, only sync Google Fonts fonts (GH#87).

  • New 'DryWet' colormap is colorblind friendly (@0280e266).

  • Permit shifting arbitrary colormaps by 180 degrees by appending the name with '_shifted', just like '_r' (@e2e2b2c7).

Bug fixes

  • Add brute force workaround for saving colormaps with callable segmentdata (@8201a806).

  • Fix issue with latest versions of matplotlib where %matplotlib inline fails silently so the backend is not instantiated (@cc39dc56).

  • Fix shifted when shift is not 180 (@e2e2b2c7).

  • Save the cyclic and gamma attributes in JSON files too (@8201a806).


  • Cleanup notebooks, especially the colormaps demo (e.g. @952d4cb3).


ProPlot v0.2.7 (2019-12-09)

Bug fixes

  • Fix issue where AutoFormatter logarithmic scale points are incorrect (@9b164733).



  • Remove prefix, suffix, and negpos keyword args from SimpleFormatter, remove precision keyword arg from AutoFormatter (@8520e363).

  • Make 'deglat', 'deglon', 'lat', 'lon', and 'deg' instances of AutoFormatter instead of SimpleFormatter (@8520e363). The latter should just be used for contours.

ProPlot v0.2.6 (2019-12-08)

Bug fixes

  • Fix issue where twin axes are drawn twice (@56145122).

ProPlot v0.2.5 (2019-12-07)


  • Much better CutoffScale algorithm, permit arbitrary cutoffs (GH#83).

ProPlot v0.2.4 (2019-12-07)


  • Rename ColorCacheDict to ColorDict (@aee7d1be).

  • Rename colors to Colors (@aee7d1be)

  • Remove fonts_system and fonts_proplot, rename colordict to colors, make top-level variables more robust (@861583f8).



  • Improvements to register_colors.

ProPlot v0.2.3 (2019-12-05)

Bug fixes

  • Fix issue with overlapping gridlines using monkey patches on gridliner instances (@8960ebdc).

  • Fix issue where auto colorbar labels are not applied when globe=True (@ecb3c899).

  • More sensible zorder for gridlines (@90d94e55).

  • Fix issue where customized super title settings are overridden when new axes are created (@35cb21f2).


  • Organize ipython notebook documentation (@35cb21f2).


  • Major cleanup of the colorbar_wrapper source code, handle minor ticks using the builtin matplotlib API just like major ticks (@b9976220).

ProPlot v0.2.2 (2019-12-04)


  • Rename axes_grid to subplot_grid (@ac14e9dd).

Bug fixes


  • Make notebook examples PEP8 compliant (@97f5ffd4). Much more readable now.

ProPlot v0.2.1 (2019-12-02)


  • Rename autoreload_setup, autosave_setup, and matplotlib_setup to ipython_autoreload, ipython_autosave, and ipython_matplotlib, respectively (@84e80c1e).

ProPlot v0.2.0 (2019-12-02)


  • Remove the nbsetup rc setting in favor of separate autosave, autoreload, and matplotlib settings for triggering the respective % magic commands. (@3a622887; nbsetup is still accepted but no longer documented).

  • Rename the format rc setting in favor of the inlinefmt setting (@3a622887; format is still accepted but no longer documented).

  • Rename FlexibleGridSpec and FlexibleSubplotSpec to GridSpec and SubplotSpec (@3a622887; until GH#110 is merged it is impossible to use these manually, so this won’t bother anyone).


  • Support manual resizing for all backends, including osx and qt (@3a622887).

Bug fixes

  • Disable automatic resizing for the nbAgg interactive inline backend. Found no suitable workaround (@3a622887).


  • Organize the rc documentation and the default .proplotrc file (@3a622887).

  • Rename rcParamsCustom to rcParamsLong (@3a622887; this is inaccessible to the user).

  • When calling fig.canvas.print_figure() on a stale figure, call fig.canvas.draw() first. May be overkill for savefig but critical for correctly displaying already-drawn notebook figures.

ProPlot v0.1.0 (2019-12-01)


  • Include flake8 in Travis CI testing (@8743b857).

  • Enforce source code PEP8 compliance (@78da51a7).

  • Use pre-commit for all future commits (@e14f6809).

  • Implement tight layout stuff with canvas monkey patches (@67221d10). ProPlot now works for arbitrary backends, not just inline and qt.


ProPlot v0.0.0 (2019-11-27)

The first version released on PyPi.