What’s new?¶
The following lists past and future (where dates are replaced with ##
) changes to
ProPlot. Authors are shown next to each change. Where not indicated, Luke Davis was
the author.
See the author page for a list of contributors, and see the contribution guide if you are interested in submitting your own changes.
ProPlot v1.0.0 (2022-##-##)¶
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.8.0 (2021-##-##)¶
Deprecated
Features
All
format
features are now implemented with individual setters, like in matplotlib, but we still encourage using the bulkset
method through documentation examples and by populating theset
docstring (so valid arguments are no longer implicit).Users can now use
figure
withadd_subplot
as an alternative to the recommendedsubplots
workflow (GH#110). This is a major improvement!GridSpec
now accepts physical units, rather than havingsubplots
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 hiddenFigure
methods (GH#110).Use
EdgeStack
class for handling stacks of colorbars, legends, and text (GH#110).
Internals
Add comprehensive unit tests and migrate from Travis CI to Github Actions.
Validate assignments to
RcConfigurator
and turn the configurator into a monkey patch ofrcParams
(GH#109).Implement and document plotting wrappers (e.g.
standardize_1d
) on the individual methods themselves (e.g.plot
; GH#111). This is much easier for users.Handle all projection keyword arguments in
add_subplot
instead ofsubplots
(GH#110).Panels, colorbars, and legends are now members of
EdgeStack
stacks rather than getting inserted directly into the mainGridSpec
(GH#110).
ProPlot v0.7.0 (2021-07-11)¶
Deprecated
Remove v0.6.0 renamed classes (e.g.
ProjAxes
) from top-level namespace (@442e6aa6). These were kept available just for documentation. The renamed functionsshade
,saturate
, andinline_backend_fmt
will be available until v0.8.Change default
rc[‘savefig.transparent’]
back toFalse
(GH#252). Dubious justification forTrue
in the first place, and makes default PNG proplot figures unreadable wherever “dark mode” is enabled.Rename SciVisColor colormaps from
Blue1
,Blue2
, etc. to pluralsBlues1
,Blues2
, etc. to avoid name conflict with open-color colors (@8be0473f). Requesting the old names (case-sensitive) redirects to the new names (@3f0794d0). This permits making monochromatic open-color maps with e.g.plot.Colormap('blue9')
and feels more consistent with ColorBrewer convention of using plurals likeBlues
,Reds
, etc.Shuffle various SciVisColor colormap names to make them consistent/succinct. Make
Browns1
the most colorful/vibrant one, just likeGreens1
andBlues1
; split up theRedPurple
maps intoReds
andPurples
; and add theYellows
category from theOranges
maps (@8be0473f). Requesting the old names (case-sensitive) redirects to the new names (@3f0794d0).Add
rc[‘image.discrete’]
options anddiscrete
keyword for togglingDiscreteNorm
application, and disable by default forimshow
,matshow
,spy
,hexbin
, andhist2d
plots (GH#233, @5a7e05e4). Also makehexbin
andhist2d
behavior withdiscrete=True
more sane by using maximum possible counts for autoscaling, and changeDiscreteNorm
argumentextend
to more intuitive nameunique
.Rename
rc[‘subplots.pad’]
andrc[‘subplots.axpad’]
to more intuitiverc[‘subplots.outerpad’]
andrc[‘subplots.innerpad’]
(@3c7a33a8). Also renameFigure
keywords.Rename
width
andheight
subplots
keyword args tofigwidth
andfigheight
to avoid confusion withrefwidth
/refheight
(@12d01996). Will accept old keyword args without warning since they are used heavily.Rename
aspect
,axwidth
, andaxheight
keyword args to more intuitiverefaspect
,refwidth
, andrefheight
(@12d01996). Will accept old keyword args without warning since they are used heavily.Rename
abovetop
keyword for moving title/abc labels above top panels, colorbars, and legends torc[‘title.above’]
(@9ceacb7b). Example usage:ax.format(title='Title', titleabove=True)
.Rename the
proplot.colors.PerceptuallyUniformColormap.from_color
keywordshade
toluminance
, and add thesaturation
keyword (@3d8e7dd0). These can also be passed toColormap
when it is called with positional arguments.Rename seldom-used
Figure
argumentfallback_to_cm
to more understandablemathtext_fallback
(GH#251).Reduce default
rc[‘savefig.dpi’]
to 1000 (@bfda9c98). Nature recommends 1000, Science recommends “more than 300”, PNAS recommends 1000–1200. So 1000 is fine.Increase default
rc[‘colorbar.insetpad’]
to avoid recurring issue where ticklabels run close to the background patch (@f5435976)Use proplot TeX Gyre fonts with
use_style
styles unless specified otherwise (@6d7444fe). Styles otherwise build on matplotlib defaults.When using
medians=True
ormeans=True
withindicate_error
plot simple error bars by default instead of bars and “boxes” (@4e30f415). Only plot “boxes” with central “markers” by default for violin plots (@13b45ccd).legend_extras
no longer returns the background patch generated for centered-row legends (GH#254). This is consistent withcolorbar_extras
not returning background patches generated for inset colorbars. Until proplot adds new subclasses, it makes more sense if these functions only returnLegend
andColorbar
instances.
Features
Add the remaining commonly-used backend-related
pyplot
functionsion
,ioff
,isinteractive
, andswitch_backend
to the top-levelproplot
namespace (@cd440155). This avoids forcing users to import pyplot inside a proplot session (the remaining pyplot functions are related to the “non-object-oriented” workflow, which proplot explicitly discourages).Add support for local
proplotrc
files in addition to “hidden”.proplotrc
files with leading dot (@8a989aca).Add minimal support for “3D”
Axes3D
axes (GH#249). Example usage:fig.subplots(proj='3d')
.Add
wequal
,hequal
, andequal
options to still use automatic spacing but force the tight layout algorithm to make spacings equal (GH#215, GH#64) by Zachary Moon.Determine colormap levels using only in-bounds data if the x or y axis limits were explicitly set (GH#209). Add
inbounds
apply_cmap
keyword andrc[‘image.inbounds’]
setting to control this.Allow calling
proplot.colors.PerceptuallyUniformColormap.from_hsl
by passinghue
,saturation
, orluminance
toColormap
without any positional arguments (@3d8e7dd0).Allow passing
alpha
,luminance
,saturation
toColormap
as lists to be applied to each component cmap (@3d8e7dd0).Add convenient shorthands for channel references throughout colormap functions – e.g.
h
for hue,l
forluminance
, etc. (@3d8e7dd0).Add the
'Flare'
and'Crest'
seaborn colormaps (@14bc16c9). These are seaborn’s color cycle-friendly alternatives to existing maps.Add the
shift_hue
function analogous toscale_saturation
andscale_luminance
(@67488bb1).Add the
to_hex
function and make all color-manipulation funcs return HEX strings by default (@67488bb1). Otherwisescatter
throws warnings.Use
90
as the defaultluminance
when creating monochromatic colormaps withto_listed
set toTrue
(as whenCycle
callsColormap
; @3d8e7dd0).Add
plotx
andscatterx
commands that interpret plotting args as(y, x)
rather than(x, y)
, analogous toareax
(GH#258).Add support for
indicate_error
horizontal error bars and shading for horizontal plotting commandsbarh
,plotx
, andscatterx
(GH#258).Add support for
ax.plot_command('x_key', 'y_key', data=dataset)
for virtually all plotting commands usingstandardize_1d
andstandardize_2d
(GH#258). This was an existingplot
feature.Add support for the plotting style
ax.plot(x1, y1, fmt1, x2, y2, fmt2, ...)
as allowed by matplotlib (GH#258).Add
absolute_width
keyword tobar_extras
to makewidth
argument absolute (GH#258). RemainsFalse
by default.Use “sticky” edges in x-direction for lines drawn with
plot()
and in y-direction for lines drawn withplotx()
(GH#258). This eliminates padding along the “dependent” axis when limits are not specified, similar to histograms and barplots and matching a feature we previously added tofill_between
(GH#166).Add support for “stacked” plots to
vlines
andhlines
(GH#258).Add
stack
as alternative tostacked
for bar and area plots (@4e30f415). Imperative keywords are better.Allow passing e.g.
barstds=3
orbarpctiles=90
to request error bars denoting +/-3 standard deviations and 5-95 percentile range (@4e30f415).Add singular
indicate_error
keywordsbarstd
,barpctile
, etc. as alternatives tobarstds
,barpctiles
, etc. (@81151a58). Also prefer them in the documentation.Permit different colors for
boxplot
andviolinplot
using color lists (GH#217, GH#218) by Mickaël Lalande. Also allow passing other args as lists (@4e30f415).Allow passing
means=True
toboxplot
to toggle mean line (@4e30f415).Allow setting the mean and median boxplot linestyle with
(mean|median)(ls|linestyle)
keywords (@4e30f415).Automatically set
fill=True
when passing a fill color or color(s) toboxplot_wrapper
(@4e30f415).Allow updating
vlines
andhlines
styling with singularcolor
andlinestyle
and all of their aliases (GH#258).Allow updating axes fonts that use scalings like
'small'
and'large'
by passingfontsize=N
toformat
(GH#212).Add
titlebbox
andabcbbox
as alternatives totitleborder
andabcborder
for “inner” titles and a-b-c labels (GH#240) by Pratiman Patel. Borders are still used by default.Allow putting
title
andabc
in the same location – the title and label are simply offset away from ech other (GH#402214f9). Padding between them is controlled by the new paramrc[‘abc.titlepad’]
.Add new
rc[‘suptitle.pad’]
,rc[‘leftlabel.pad’]
,rc[‘toplabel.pad’]
,rc[‘bottomlabel.pad’]
,rc[‘rightlabel.pad’]
settings to control padding used when aligning super labels (@402214f9). These can also be passed toformat
and applied locally. The new defaults increase super title padding by a bit.More robust interpretation of
rc[‘abc.style’]
– now match case with first'a'
or'A'
in string, and only replace that one (GH#201).Interpret fontsize-relative legend rc params like
legend.borderpad
with'em'
as default units rather than'pt'
(@6d98fd44).Add
rc.basemap
setting for changing the default backend (@c9ca0bdd). If users have a cartopy vs. basemap preference, they probably want to use it globally.Add
rc[‘cartopy.circular’]
setting for optionally disabling the “circular bounds on polar projections” feature (@c9ca0bdd).Support the standard aliases
'ls'
,'linestyle'
,'linestyles'
, etc. inCycle
calls (@3d8e7dd0).Add
queue
keyword tocolorbar
andlegend
to support workflow where users successively add handles to location (GH#254).Add
nozero
keyword arg toapply_cmap
to remove the zero contour from automatically generated levels (@10e0f13b). Example usage:ax.contour(x, y, z, nozero=True)
.Add
positive
andnegative
keyword args toapply_cmap
for requesting automatically-generated all-positive or all-negative levels (@335d58f4). Example usage:ax.contourf(x, y, z, positive=True)
.Add
rotation
keyword tocolorbar_wrapper
for rotating colorbar tick labels, likexrotation
andyrotation
(@2d835f20).Add
tickdir
andtickdirection
keywords tocolorbar_wrapper
for controlling tick style, likextickdir
andytickdir
(@f377f090).Allow specifying labels for auto-generated legends using a
'labels'
key in alegend_kw
keyword argument (@a11d1813).Replace legends drawn in the same location by default rather than drawing two legends on top of each other (GH#254).
Use
Artist
labels for the default list-of-artist colorbar tick labels ifvalues
was not passed – and if labels are non-numeric, rotate them 90 degrees for horizontal colorbars by default (@ed8e1314). Makes the choice between “traditional” legends and “colorbar-style” legends more seamless.Use same default-level generation algorithm for contour plots without colormaps as for all other colormap plots (@10e0f13b). Makes automatically-generated solid-color contours and colormap-style contours identical.
Add suffix
'_copy'
to colormaps converted withto_listed
andto_linear_segmented
to avoid accidental overwriting (@91998e93).If available, use
rc[‘pcolormesh.snap’]
to repair overlap in transparent colorbar solids rather than manual-blending workaround (@c9f59e49).Add
xmin
,xmax
,ymin
, andymax
keyword args toformat
as alternatives toxlim
andylim
(@ae0719b7). Example usage:ax.format(xmin=0)
as opposed toax.format(xlim=(0, None))
.Allow passing full “side” names to
lonlabels
andlatlabels
rather than abbreviations, e.g.'left'
instead of'l'
(@a5060f67). This is more consistent with rest of package.Set default transform to
ccrs.PlateCarree
when callingmatplotlib.axes.Axes.fill
onCartopyAxes
(GH#193). This is more consistent with rest of package.
Bug fixes
Fix 3 fatal issues preventing proplot import and basic usage in matplotlib >= 3.4 (GH#251).
Fix deprecation warnings associated with matplotlib 3.4 refactoring of subplot classes (GH#251).
Fix deprecated reference to
rc.fallback_to_cm
in matplotlib >= 3.3 (GH#251).Fix
IndexFormatter
deprecation warning in matplotlib >= 3.3 by replacing with proplot-local copy (GH#251).Fix deprecation warning in matplotlib >= 3.3 – add
extend
as mappable attribute rather than passing it tocolorbar()
(@a23e7043).Fix issue where figures with fixed-aspect axes don’t scale properly in matplotlib >= 3.3 (GH#210, GH#235).
Fix issue where “twin” (“alternate”) axes content always hidden beneath “parent” content due to adding as children (GH#223).
Fix issue where default layout in complex subplot grids with non-adjacent edges is incorrect (GH#221).
Fix issue where
apply_cycle
fails to merge mean-uncertainty legend handles due to presence of placeholder labels (@4e30f415).Fix issue where
standardize_1d
inappropriately infers legend entries from y-coordinate metadata rather than column metadata (@4e30f415).Fix issue where
barb
andquiver
cannot accept 1D data arrays (GH#255).Fix issue where cannot set
rc.style = 'default'
(GH#240) by Pratiman Patel.Fix issue where
get_legend
returns None even with legends present (GH#224).Fix issue where new child axes reset row/col label settings (@f32d9703).
Fix issue where
DataArray
string coordinates are not extracted from container before applying as tick labels (GH#214).Fix issue where cannot set
extend
other than'neither'
forscatter
colorbars (GH#206).Fix issue where
hexbin
ignoresvmin
andvmax
keywords (GH#250).Fix issue where parametric plot x axis is reversed (@3bde6c47).
Fix issue where e.g.
ax.area(x, 0, y2, negpos=True
has positive colors below x-axis and negative above x-axis (GH#258).Fix issue where “negpos” plots ignore
edgecolor
because they passcolor
rather thanfacecolor
to plotting commands.Fix issue where cannot have datetime labels on
area
plots (GH#255).Fix issue where default orientation of
barh
vertical axis is reversed (@258).Fix issue where
hist
withxarray.DataArray
orpandas.Dataframe
input causes erroneous axis labels; use labels for legend instead (GH#195).Fix issue where axis is accidentally inverted for histogram plots (GH#191).
Fix issue where
[xy]minorlocator=1
is not allowed (GH#219).Fix issue where inner titles ignore axes-local
titlepad
(@14f3d0e3).Fix issue where we again fail to sufficiently pad title above tick marks with tick marks on top x-axis (@402214f9).
Fix issue where non-Cartesian
heatmap
errors rather than warns (GH#238).Fix issue where
labels=True
with no contours causes error (GH#238).Fix issue where
Cycle
fails to register new names and fails to display inshow_cycles
(@94ffc1dc, @4a7a3c79).Fix issue where proplot ignores
set_under
andset_over
values when translating matplotlib colormap classes to proplot subclasses (GH#190).Fix issue where
DiscreteNorm
does not account forset_under
andset_over
colors distinct from adjacent in-bounds colors (GH#190).Fix issue where proplot fails to detect legend entries for “outer” legends (GH#189).
Fix issue where list-of-list-style
legend()
handle and label input fails completely (@a298f81f). This input style is used to specify “centered” legend rows.Fix error message when no legend handles are found (@2c6bf3e2).
Fix issue where multiple-artist legend entries (e.g., for lines indicating means and shading indicating uncertainty) are accidentally truncated (@a11d1813).
Fix issue where numeric zero cannot be applied as legend label (@02417c8c).
Fix issue where simple
pandas.DataFrame.plot
calls withlegend=True
fail (GH#254, GH#198).Fix unnecessary restriction where users can only draw <2 “alt” axes and clean up the
alt[xy]
anddual[xy]
internals (GH#226).Fix matplotlib bug where
altx
andalty
reset the minor locator of the shared axis toAutoMinorLocator
even if the axis scale is'log'
(@2f64361d).Fix issue where axis coordinates are incorrect when
violinplot
orboxplot
receive non-DataFrame input (@b5c3ec4c).Fix issue where
indicate_error
cannot accept 1D error bounds (@ef2d72cd).Fix issue where
show_cmaps
cannot display reversed colormaps (@2dd51177).Fix issue where
'grays_r'
translated to'greys'
(@074c6aef).First reverse, then shift
cmap_r_s
colormaps (@e5156294).Fix obscure
parametric
bug wherenumpy.stack
tries to make nested ragged arrays from parametric coords (@b16d56a8).Fix issue where where
SubplotSpec.get_active_rows_columns
returned incorrect number of “active” rows and columns (@5cf20b84).For rc lookup with
context=True
, use most restrictive search mode rather than least. Otherwiseax.format()
calls inside context blocks can be overwritten with the default rc values in subsequentax.format()
calls (@8005fcc1).
Internals
Refactor massive
standardize_(1d|2d)
and(cmap|cycle)_changer
wrappers to break things into manageable chunks (GH#258, @6af22567, @d3352720).Refactor
colorbar
andlegend
methods and their massive wrappers to clean things up and expand the “queueing” feature beyond wrappers (GH#254).Add prefix
'proplot_'
to registered axes “projections” (@be7ef21e). More clear and guards against conflicts with external packages and other mpl versions.Add system for processing flexible keyword arguments across different commands to
internals/__init__.py
. Analogous to mpl_alias
processing.
Documentation
Finally use
pplt
as the recommended abbreviation:import proplot as pplt
.Major clean up of “Why ProPlot?” page and user guide pages.
Fix incomplete
cmap.from_file
docstrings (@54f1bc7c).Rename “Changelog” to “What’s New?” and list all contributors in “About the Authors”.
Rename public/documented funcs ending in
_wrapper
to ending in_extras
to avoid implication they are the only funcs wrapping those commands (@d1e1e85b).Rename public/documented func
make_mapping_array
to private function, following lead of matplotlib’smakeMappingArray
(@66ae574b).Rename public/documented funcs
cmap_changer
andcycle_changer
toapply_cmap
andapply_cycle
(@86f7699a).
ProPlot v0.6.4 (2020-06-13)¶
Features
Change
autoformat
from aFigure
keyword argument into therc.autoformat
rc setting (@3a7e5a7c).Combine shading and lines when drawing on-the-fly legends with
indicate_error
shading using tuple offill_between
,plot
handles, and haveshadelabel
andfadelabel
instead create separate entries only when passed (GH#187).
Bug fixes
Fix major issue where calling
legend()
without any handles triggers error rather than using default handles (GH#188).Fix issue where on-the-fly colorbar labels were ignored (@a642eeed).
Stop overwriting existing axis labels when
autoformat=True
and DataArrays or DataFrames passed to plotting command (@76c7c586).Support single-level contours with colormap colors (GH#182).
Support changing line width, line style, and color properties for barb, quiver, streamplot, matshow, spy, and hist2d plots (GH#177).
Use
rc[‘patch.linewidth’]
for default bar edge width, stop setting default histogram plot linewidth to zero, and setrc[‘patch.linewidth’]
to0.6
to match proplot’s default line width for lines, axes edges, and hatches (GH#186).
ProPlot v0.6.3 (2020-06-02)¶
Bug fixes
Fix issue where proplot import fails if cartopy is not installed (@e29d49e8).
ProPlot v0.6.2 (2020-06-02)¶
Deprecated
Remove
Figure
setters likeset_sharex
, replace with read-only properties (@7b455008). These did not work and did not add critical functionality.
Features
Add
autoformat
asstandardize_1d
andstandardize_2d
keyword arg, so inheriting labels can be turned on/off for individual plots (@61258280).Share initial limits/scales/tickers from parent subplots when making new panels (@cf0d5d4e).
Permit negative “cuts” with
cut
to expand the neutral zone of a diverging cmap (@94548d09).Add valid
format
arguments toaltx
andalty
, including[x|y]lim
(@734f5940).Pass string
dual[x|y]
arguments like'inverse'
through theScale
constructor (@413e1781).Add
'dms'
locator and formatter, for degree-minute-second labels without cardinal direction indicators (@1b180cd2).Add “tau” formatter (@fc6a9752).
Restore default
rc[‘title.pad’]
to matplotlib value, stop artificially bumping uprc[‘title.pad’]
for “inner” titles (@7de1c1f4).Make custom formatters like
SciFormatter
classes rather than functions returningFuncFormatter
(@7591f474).
Bug fixes
Various improvements to auto-figure sizing with Qt backend and when calling
print_figure
(@db4e48d5, @82457347, @744d7d37).Suppress warning when
matplotlibrc
contains non-style param (@4a0c7f10).Fix fatal
standardize_2d
error whenautoformat=False
(GH#181)Fix issue where
Colormap(..., alpha=alpha)
made persistent changes to the original registered colormap (@cb24ea51).Prevent matplotlib deprecation warning by removing
set_smart_bounds
dependency and improving axis scale transforms (@432576d8).Fix panel sharing issue in presence of stacked or multiple panels (@28eaf0ca).
Fix geographic feature toggling, zorder bugs (@acf0d5d4, @ea151b25).
Fix
hist
bug due tobar(..., width=width)
now being relative to the x step size (@e32ed0bc).Fix bug where
savefig
receivesPath
instead of string (GH#176).
Documentation
Various improvements to website and API docstrings.
Document
proplot.figure.Figure.save
method (@da25266a).Darker “dark mode” (@979c8188).
Prevent website from flashing light mode when changing pages (@75e4d6a1).
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)¶
Deprecated
Remove the
geoaxes
andgeogrid
rc settings (GH#168). Gridline settings are now controlled withgrid
.Remove the
lonstep
andlatstep
settings – we now useLongitudeLocator
andLatitudeLocator
to select “nice” gridline locations even when zoomed in (GH#168)Change default rc settings closer to matplotlib, including margins and line width (GH#166, @f801852b). Many were changed for no good reason.
Change default line style for geographic gridlines from
':'
to'-'
and match style from primary gridlines (GH#166, @f801852b).Rename
add_errorbars
toindicate_error
and rename various keyword args (GH#166, @d8c50a8d).Deprecate support for “parametric” plots inside
plot
, instead useparametric
(@64210bce).Change
units
units
keyword argument to more naturaldest
(@62903b48).Remove the public objects
normalizers
,locators
,formatters
,cartopy_projs
,basemap_kwargs
,cmaps
,colors
, andfonts
(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 (GH#149, @ce4ef6a0).Remove
'Blue0'
SciVisColor colormap (GH#149, @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 (GH#149, @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'
(GH#149, @da4ccb08).Rename
GrayCycle
colormap toMonoCycle
to more accurately reflect colormap design origins (GH#149, @d67e45bf).Rename
rc_configurator
andsubplot_grid
toRcConfigurator
andSubplotsContainer
to match capitalized class naming convention (GH#149).Rename
MidpointNorm
to more intuitiveDivergingNorm
, and make “fair” color scaling the default behavior (@2f549c9).Rename
XYAxes
toCartesianAxes
,GeoAxes
toCartopyAxes
, andProjAxes
toGeoAxes
(GH#149, @4a6a0e34).Rename
BinNorm
toDiscreteNorm
and fix issues with diverging norm color scaling (GH#149, @98a976f1).Rename
ColorDict
toColorDatabase
,CmapDict
toColormapDatabase
(GH#149, @9d7fd3e0).Rename
concatenate
toappend
,updated
tocopy
,truncated
totruncate
, andpunched
tocut
(GH#149, @e1a08930). The old method names remain with a deprecation warning.
Features
Add
SigFigFormatter
(GH#149, @da6105d2) andSciFormatter
(GH#175, @c43f7f91) axis formatters.Make default
areax
andareay
bounds “sticky”, similar to histograms and barplots (GH#166).Use
_LonAxis
and_LatAxis
dummy axes with customLongitudeLocator
andLatitudeLocator
to control geographic gridlines (GH#168).Add
'dmslat'
and'dmslon'
as formatters for cartopy projections, along withdms
format
keyword argument. This labels points with degrees/minutes/seconds when appropriate (GH#168).Support “minor” geographic gridlines with the
gridminor
keyword arg and existinggridminor
settings (GH#168). Default locator used for minor gridlines isAutoMinorLocator
.Add
loninline
,latinline
, androtatelabels
keywords for controlling cartopy gridliner behavior (GH#168).Add
proplot.config.RcConfigurator.save
andproplot.config.RcConfigurator.from_file
methods (GH#167, @e6dd8314).Increase default
rc[‘savefig.dpi’]
to 1200, matching recommendations from academic journals (GH#167, @c00e7314). Also add detailed discussion to user guide.No longer distinguish between “quick” settings and proplot’s “added” settings (GH#167, @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
andto_xyza
, plusset_alpha
for changing alpha channel of arbitrary color (GH#171, @81c647da).Add to
set_alpha
the ability to create an opacity gradation, rather than just an opacity for the entire colormap (GH#171, @4583736).Support passing colormap objects, not just names, to
show_cmaps
andshow_cycles
(GH#171, @7f8ca59f).Add options to
indicate_error
for adding shading to arbitrary plots (GH#166, @d8c50a8d). Also support automatic legend entries for shading and ensureindicate_error
preserves metadata.Wrap
pcolorfast
just likepcolor
andpcolormesh
are wrapped (GH#166, @50a262dd).Add
negpos
feature tobar_wrapper
and newrc.negcolor
andrc.poscolor
rc keyword arguments (GH#166, @ab4d6746).Support
vlines
andhlines
flexible arguments and addnegpos
feature (GH#166, @1c53e947, @e42ee913).Support cartopy 0.18 locators, formatters, deprecations, and new labelling features (GH#158).
Support building a colormap and
DiscreteNorm
insidescatter
, just likecontourf
andpcolormesh
(GH#162).Add
rc[‘geogrid.labelpad’]
andrc[‘geogrid.rotatelabels’]
settings for cartopy gridline labels (GH#158).Support more
AutoFormatter
features onSimpleFormatter
(GH#152, @6decf962).Support drawing colorbars with descending levels (GH#149, @10763146)
Add support for matplotlib stylesheets with
use_style
function andstyle
rc param (GH#149, @edc6f3c9).Add
categories
keyword arg toshow_cmaps
andshow_cycles
(GH#149, @79be642d).Hide bad colormaps like
'jet'
from theshow_cmaps
table instead of deleting them outright, just like CSS4 colors (GH#149, @ce4ef6a0).Draw
show_colors
table as single figure with category labels, similar toshow_cmaps
(GH#149, @c8ca2909).Make
'Grays'
and'Greys'
synonyms for the same ColorBrewer colormap (GH#149, @da4ccb08).Permit drawing “outer” axes and figure legends without explicitly passing handles (GH#149, @a69b48eb). Figure legends use the handles from all axes.
Add
to_listed
andto_linear_segmented
methods for handling conversions (GH#149, @e1a08930).Permit merging mixed colormap types
LinearSegmentedColormap
withPerceptuallyUniformColormap
(@972956b1).Include the
alpha
channel when saving colormaps and cycles by default (GH#149, @117e05f2).Permit 8-character hex strings with alpha channels when loading colormaps and color cycles from hex files (GH#149, @381a84d4).
Publicly support “filling” axes with colorbars using
loc='fill'
(GH#149, @057c9895).Return both figure and axes in
show_
functions; this gives users access to the axes and prevents drawing them twice in notebooks (GH#149, @2f600bc9).Enable passing callables to
Formatter
to create aFuncFormatter
instance.Support sampling
LinearSegmentedColormap
intoListedColormaps
inside ofColormap
rather thanCycle
(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 (GH#152, @c7636296).Fix issue where
AutoFormatter
nonzero-value correction algorithm was right for wrong reasons and could be wrong in rare circumstances (GH#152, @c7636296).Fix issue where
matplotlib.style.use
resets backend (GH#149, @c8319104).Fix issue with colormaps with dots in name (GH#149, @972956b1).
Fix logarithmic scale argument parsing deprecation (GH#149, @6ed7dbc5).
Fix deprecation of direct access to
matplotlib.cm.cmap_d
in matplotlib >=3.2.0 (GH#149, @a69c16da).Fix issues with string font sizes (GH#149, @6121de03). Add hidden
_get_font_size
method to translate font size to numeric.Fix issue where passing actual projection instances generated with
Proj
tosubplots
could incorrectly pair cartopy projections with basemap axes and vice versa (GH#149).Fix issue where could not draw colorbar from list of single-color
PathCollection
s, i.e. scatter plots (GH#149, @e893900b).Fix issue where importing proplot in jupyter notebooks resets the default inline backend (GH#149, @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 (GH#149, @054cceb5).
Internals
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
(GH#166, @9ac149ea).
Documentation
ProPlot v0.5.0 (2020-02-10)¶
Deprecated
Rename
abc.linewidth
andtitle.linewidth
toborderwidth
(@54eb4bee).Rename
text_wrapper
linewidth
andinvert
toborderwidth
andborderinvert
(@54eb4bee).
Features
Add back Fabio Crameri’s scientific colour maps (GH#116).
Permit both e.g.
locator
andxlocator
as keyword arguments toaltx
, etc. (@57fab860).Permit descending
BinNorm
andLinearSegmentedNorm
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
andshow_cycles
tables (@cb206f19).
Bug fixes
Fix issue where
show_cmaps
andshow_cycles
colormap names were messed up (@13045599)Fix issue where
show_cmaps
andshow_cycles
did not return figure instance (@98209e87).Fix issue where user
values
passed tocolorbar_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
andstandardize_2d
(GH#103, GH#121).Redirect to the “default” location when using
legend=True
andcolorbar=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.
Internals
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
, andbottom
instead ofl
,r
,b
, andt
, for clarity (@1ef7e65e).Improve
GrayCycle
colormap, is now much shorter and built from reflected FabioGrayC
colormaps (@5b2c7eb7).
ProPlot v0.4.3 (2020-01-21)¶
Deprecated
Remove
ipython_autoreload
,ipython_autosave
, andipython_matplotlib
(GH#112, GH#113). Move inline backend configuration to a hidden method that gets called whenever therc_configurator
is initalized.
Features
Permit comments at the head of colormap and color files (@0ffc1d15).
Make
parametric
matchplot
autoscaling behavior (@ecdcba82).
Internals
ProPlot v0.4.2 (2020-01-09)¶
Features
Add
family
keyword arg toshow_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)¶
Deprecation
Change the default
.proplotrc
format from YAML to the.matplotlibrc
syntax (GH#101).
Features
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 likeshow_cmaps
(GH#100).
Bug fixes
Fix issue where
show_cmaps
andshow_cycles
draw empty axes (GH#100).Add back the default .proplorc file to docs (GH#101). To do this,
conf.py
auto-generates a file in_static
.
Internals
Add
geogrid.color/linewidth/etc
andgridminor.color/linewidth/etc
props as children ofgrid.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
andCycle
now raise errors while calls toregister_cmaps
andregister_cycles
still issue warnings (GH#100).
ProPlot v0.4.0 (2020-01-07)¶
Deprecated
Rename
basemap_defaults
tobasemap_kwargs
andcartopy_projs
tocartopy_names
(@431a06ce).Remove
subplots.innerspace
,subplots.titlespace
,subplots.xlabspace
, andsubplots.ylabspace
spacing arguments, automatically calculate default non-tight spacing using_get_space
based on current tick lengths, label sizes, etc.Remove redundant
use_fonts
, usercParams['sans-serif']
precedence instead (GH#95).dualx
anddualy
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]
, andalign[x|y]
kwargs (GH#99). These settings are now always figure-wide.Rename
Cycle
samples
toN
, renameshow_colors
nbreak
tonhues
(GH#98).
Features
Add
from_file
static methods (GH#98). You can now load files by passing a name toColormap
.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 toformat
(GH#95).Add getters and setters for various
Figure
settings likeshare[x|y]
,span[x|y]
, andalign[x|y]
(GH#99).Let
twinx
,twiny
,altx
, andalty
acceptformat
keyword args just likedualx
anddualy
(GH#99).Add
Figure
fallback_to_cm
kwarg. This is used byshow_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 acceptsProjection
andBasemap
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 passcontext=True
toget
,fill
, orcategory
(GH#91).
Bug fixes
Fix issues with
dualx
anddualy
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).
Documentation
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).
Internals
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 fromlegend_wrapper
andcolorbar_wrapper
(GH#91). Removewflush
,hflush
, andflush
keyword args fromsubplots
that should have been removed long ago.
ProPlot v0.3.1 (2019-12-16)¶
Bug fixes
ProPlot v0.3.0 (2019-12-15)¶
Deprecated
Remove
'Moisture'
colormap (@cf8952b1).
Features
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
whenshift
is not180
(@e2e2b2c7).Save the
cyclic
andgamma
attributes in JSON files too (@8201a806).
Documentation
Cleanup notebooks, especially the colormaps demo (e.g. @952d4cb3).
Internals
Change
clock
toperf_counter
(GH#86).
ProPlot v0.2.7 (2019-12-09)¶
Bug fixes
Fix issue where
AutoFormatter
logarithmic scale points are incorrect (@9b164733).
Documentation
Improve Configuring ProPlot documentation (@9d50719b).
Internals
ProPlot v0.2.5 (2019-12-07)¶
Features
Much better
CutoffScale
algorithm, permit arbitrary cutoffs (GH#83).
ProPlot v0.2.4 (2019-12-07)¶
Deprecated
Rename
ColorCacheDict
toColorDict
(@aee7d1be).Rename
colors
toColors
(@aee7d1be)Remove
fonts_system
andfonts_proplot
, renamecolordict
tocolors
, make top-level variables more robust (@861583f8).
Documentation
Params table for
show_fonts
(@861583f8).
Internals
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).
Documentation
Organize ipython notebook documentation (@35cb21f2).
Internals
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)¶
Deprecated
Rename
axes_grid
tosubplot_grid
(@ac14e9dd).
Bug fixes
Fix shared x and y axis bugs (@ac14e9dd).
Documentation
Make notebook examples PEP8 compliant (@97f5ffd4). Much more readable now.
ProPlot v0.2.1 (2019-12-02)¶
Deprecated
Rename
autoreload_setup
,autosave_setup
, andmatplotlib_setup
toipython_autoreload
,ipython_autosave
, andipython_matplotlib
, respectively (@84e80c1e).
ProPlot v0.2.0 (2019-12-02)¶
Deprecated
Remove the
nbsetup
rc setting in favor of separateautosave
,autoreload
, andmatplotlib
settings for triggering the respective%
magic commands. (@3a622887;nbsetup
is still accepted but no longer documented).Rename the
format
rc setting in favor of theinlinefmt
setting (@3a622887;format
is still accepted but no longer documented).Rename
FlexibleGridSpec
andFlexibleSubplotSpec
toGridSpec
andSubplotSpec
(@3a622887; until GH#110 is merged it is impossible to use these manually, so this won’t bother anyone).
Features
Support manual resizing for all backends, including
osx
andqt
(@3a622887).
Bug fixes
Disable automatic resizing for the
nbAgg
interactive inline backend. Found no suitable workaround (@3a622887).
Internals
Organize the
rc
documentation and the default.proplotrc
file (@3a622887).Rename
rcParamsCustom
torcParamsLong
(@3a622887; this is inaccessible to the user).When calling
fig.canvas.print_figure()
on a stale figure, callfig.canvas.draw()
first. May be overkill forsavefig
but critical for correctly displaying already-drawn notebook figures.
ProPlot v0.1.0 (2019-12-01)¶
Internals
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.
Documentation
Various RTD bugfixes (e.g. @37633a4c).