What’s new?¶
This page lists the API changes with each version. Please note that when functions and keywords are renamed, they are not removed – requesting the old name will issue a warning rather than an error. 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 more comprehensive testing is completed and stability is improved.
ProPlot v0.8.0 (2021-08-16)¶
Deprecated¶
Numbers passed to
pad
,wpad
,hpad
,space
,wspace
,hspace
,left
,right
,top
, andbottom
are now interpreted as em-widths instead of inches (@20502345). Unfortunately this is a major breaking change that cannot be “gently” phased in with warnings, but this will be much more convenient going forward.Make default reference subplot size, panel widths, colorbar widths independent of
rc['font.size']
(@a50d5264). Default space size should definitely sync with font size, since larger fonts produce larger labels between subplots, but the same reasoning does not apply for subplot size.Interpret
sharex/sharey=True
as3
(i.e., “turn all sharing on”) instead of1
(integer conversion ofTrue
) (GH#51967ce3). This is more intuitive and matches convention elsewhere. Also allow specifying level 1 with'labels'
and level 2 with'limits'
.Rename
SubplotsContainer
to simplerSubplotGrid
and move definition tofigure.py
(@51967ce3).Deprecate arbitrary
__getattr__
override forSubplotGrid
(@51967ce3). Instead have dedicatedformat
,colorbar
,legend
,[alt|dual|twin][xy]
,panel[_axes]
, andinset[_axes]
methods.Deprecate scattershot
Figure
immutable/documented properties (@51967ce3). Really not necessary.Remove ancient deprecated getters and setters for
sharex
,spanx
, etc. once used with figure objects (@51967ce3).Make
CartopyAxes
andBasemapAxes
private and remove documentation (@25e759b0). These classes are just for internal implementation of different cartographic “backends” – behavior of public methods is the same for both. Instead just documentproplot.axes.GeoAxes
.Rename
Axes3D
toThreeAxes
so that class name fits more nicely amongst other class names (@30a112bd).Sync 3D axes figure background color with axes background to avoid weird misaligned white square behind axes (@30a112bd).
Rename
RcConfigurator
toConfigurator
(@5626bc88). Previous name was redundant and needlessly verbose (thec
inrc
already stands for “configuration”…).Add
rc['leftlabel.rotation']
,rc['toplabel.rotation']
,rc['rightlabel.rotation']
,rc['bottomlabel.rotation']
settings, and make default row label rotation match y label rotation (@bae85113).Rename
image
category settings torc['cmap.inbounds']
,rc['cmap.discrete']
,rc['cmap.edgefix']
,rc['cmap.levels']
, andrc['cmap.lut']
(@a50d5264).Rename long and confusing
rc['text.labelsize']
andrc['text.titlesize']
settings to clearerrc['font.smallsize']
andrc['font.largesize']
(analogous torc['font.size']
) (GH#a50d5264).Rename
rc['tick.ratio']
torc['tick.widthratio']
and add missingrc['tick.width']
setting (@a50d5264).Rename vague shorthands
rc.alpha
andrc.facecolor
back to nativerc['axes.alpha']
andrc['axes.facecolor']
and renamerc.linewidth
andrc.color
torc['meta.width']
andrc['meta.color']
(@41b5e400). However axes can still be updated by passingalpha
,linewidth
,facecolor
, andedgecolor
toformat
, and nowformat
supports arbitrary patch artist settings and aliases likelw
,ec
,fc
,hatch
, etc.Treat
rc['tick.label']
andrc['grid.label']
font size, color, and weight settings as synonyms (@a50d5264). In general the tick vs. grid distinction is not meaningful for text labels. However we often want different padding so still allowrc['tick.labelpad']
andrc['grid.labelpad']
to be distinct.Rename
proplot.config.Configurator.load_file
toproplot.config.Configurator.load
in order to matchsave
(@1769d349).Change the default
Configurator
save location from the home directory to the current directory and change the default filename toproplotrc
(without the leading dot) (@41b5e400).Rename obscure
LinearSegmentedColormap
,PerceptuallyUniformColormap
, andListedColormap
to more intuitive/succinctContinuousColormap
,PerceptualColormap
, andDiscreteColormap
(@ade787f9). Important due to the “qualitative colormap” behaviors triggered when aDiscreteColormap
is passed to plot commands (see features).Following above change, rename
LinearSegmentedNorm
to simplerSegmentedNorm
, renameColormap
argumentto_listed
todiscrete
, changelistmode
options from'listed'
,'linear'
to'discrete'
,'continuous'
, and addfilemode
option (@ade787f9, @5ccd6c01).Allow omitting the colormap name when instantiating colormap classes or using class methods like
from_list
(@ade787f9). This is more intuitive.Capture
colors
passed to commands likecontour
andpcolor
and use it to build qualitativeDiscreteColormap
maps (@6382cf91). This matches the behavior of xarray plotting utilities. No longer usecolor
to change “edge color” of filled contours/grid boxes.Set default linewidth to 0.25 when adding “edges” to filled contours (@6382cf91). This matches matplotlib behavior when passing edgecolor to a
pcolor
command.Deprecate
boxes
andviolins
shorthands in favor of singularbox
andviolin
(@6382cf91). This feel analogous to existingbar
andbarh
.Treat 2D
scatter
arguments by iterating over columns and default-styling each column with the property cycle rather than unraveling 2D arguments into 1D arrays (@6382cf91). Can also iterate overs
andc
columns.Rename the confusingly-capitalized
Colors
toget_colors
and move toutils.py
(@51d480da). This is not a “class constructor” – it just returns lists of colors.Rename the
show
function keywordcategories
toinclude
, consistent with the newignore
keyword (@c45d5fa1).Change default
rc['legend.facecolor']
to white instead of inheriting from axes background (@6382cf91). Also set defaultrc['legend.edgecolor']
torc['meta.color']
(black by default) and havelegend
read from rc settings rather than setting defaultlegend
input arguments.Control edge width for legend frames with
ew
oredgewidth
rather thanlw
andlinewidth
to avoid conflict with feature that permits modifying legend handle properties (@6382cf91).
Features¶
Dynamically add classes that are “registered” by contructor functions to the top-level namespace (@4382a1b1). This is consistent with behavior of importing custom-ProPlot tickers, norms, etc. to top-level namespace. Now e.g.
pplt.MultipleLocator
orpplt.LogNorm
are allowed.Allow creating subplots with
figure
and either (1) subsequently callingsubplots
or (2) passing integers or subplot specs generated byGridSpec
toadd_subplot
(@51967ce3). This is convenient for complex grids or mixed proj types.Add consistent/intuitive aliases
subplot
andadd_subplots
for native matplotlib commandsadd_subplot
andsubplots
(@51967ce3).Add
subplotgrid
property to access aSubplotGrid
after drawing subplots one-by-one (@fb83384f).Implement physical-units
left
,right
,top
,bottom
,wspace
, andhspace
spaces directly on theGridSpec
rather than externally (@20502345). Now absolute spaces are always preserved when figure size changes even if tight layout is disabled.Have
GridSpec
directly handle “panel slots” (@20502345). Adding panels to a figure adds row or column “panel slots” to the gridspec and subsequently indexing the gridspec ignores those slots.Add tight layout “padding” arguments to
GridSpec
and add gridspec parameters as optional arguments toFigure
(@20502345). When a gridspec is added to the figure the arguments are passed to the gridspec. This replaces matplotlib’ssubplotpars
andsubplots_adjust
.Allow variable tight layout padding between subplot panels using
wpad
andhpad
, analogous towspace
andhspace
(@20502345). Previously this was fixed atrc['subplots.innerpad']
.Add
pad
keyword tolegend
,colorbar
, andpanel
that controls local tight layout padding, analogous tospace
(@20502345). Previously this was fixed atrc['subplots.panelpad']
.Ensure
wequal
andhequal
only apply to the main subplot rows and columns; always ignore panel and colorbar spaces (@20502345).Improve default behavior in presence of ‘outer’ colorbars + legends when
rc['subplots.tight']
is disabled (@20502345).Add a
format
method for formatting every subplot in the figure when you don’t have aSubplotGrid
available (@20502345). Also move internal implementation of figure-wide settings there. Figure-wide settings likesuptitle
can still be updated fromAxes.format
.Permit mutability of
SubplotGrid
(@51967ce3). Power users may want to manipulate their own grids.Permit 2d indexing of
SubplotGrid
with arbitrary gridspec geometry by looking up subplotspec indices (@51967ce3). Previously 2d indexing ofSubplotGrid
with complex geometry would just return a wrong result.Issue warning message when users try
fig.subplots_adjust()
orpplt.figure(subplotpars=SubplotParams)
and auto-disable and warn when matplotlib “tight layout” rc settings are toggled (@51967ce3).Add nicer string representations of figures, gridspecs, subplotspecs, and axes clearly showing the geometry and layout (@51967ce3, @51967ce3, @6382cf91).
Rename setting
rc['abc.style']
torc.abc
(@a50d5264). Setting this toFalse
still “turns off” labels, setting toTrue
“turns on” labels with the default style'a'
, and setting to a string “turns on” labels with this style.Set default location for new axes panels to
'right'
, allowing for emptyax.panel_axes()
calls (@51967ce3).Convert valid keyword arguments to positional arguments for virtually all plotting functions rather than a subset (@6382cf91). This expands the use of the
data
keyword and permits a seaborn-like workflow (for example,ax.plot(x='x_key', y='y_key', data=xarray_dataset)
).Support
pint.Quantity
arguments by auto-applyingsetup_matplotlib
with the quantity’s unit registry when a quantity is passed (@6382cf91).Support
pint.Quantity
input for z coordinates (e.g., toax.contourf
) by stripping the units to prevent warning (@6382cf91).Support
xarray.DataArray
arguments containingpint.Quantity
arrays by accessingdata
rather than accessing.values
(@6382cf91).Apply
pint.Quantity
default unit labels to plots by formatting the units with the newrc.unitformat
setting (@6382cf91).Add
rc['cmap.sequential']
='fire'
,rc['cmap.diverging']
='negpos'
,rc['cmap.cyclic']
='twilight'
, andrc['cmap.qualitative']
='flatui'
settings to control the default sequential, diverging, cyclic, and qualitative cmaps, and add booleansequential
,diverging
,cyclic
, andqualitative
keywords to select corresponding default cmaps (@6382cf91).Add special qualitative cmap handling when
colors=colors
,qualitative=True
, orcmap=pcolors.DiscreteColormap(...)
– always applyDiscreteNorm
(ignore and warn if user passeddiscrete=False
), truncate or wrap colors if there are too many/not enough for the levels, and add default extremes withset_under
orset_over
depending on userextend
(@6382cf91).Select
rc['cmap.diverging']
and applyDivergingNorm
automatically based on input data, similar to xarray and seaborn (@6382cf91). This is controlled withautodiverging
and therc['cmap.autodiverging']
setting. It is also disabled when a cmap is explicitly passed (unless it is a known diverging cmap).Add
robust
keyword argument andrc['cmap.robust']
=False
setting to ignore outliers when selecting auto colormap ranges (GH#6382cf91). It can take the valueTrue
, a percentile range, or a 2-tuple percentile interval.Improve matplotlib-proplot colormap translation by converting
matplotlib.colors.ListedColormap
toproplot.colors.DiscreteColormap
only if it has fewer thanrc['cmap.listedthresh']
levels (@ade787f9). This is critical in case users import cmaps from other projects.Permit constructing property cycles with
Cycle
by passingcolor
as keyword argument (@86a50eb2). This is matplotlib-like workflow.Permit disabling property cycling with e.g.
cycle=False
,cycle='none'
, orcycle=()
, and re-enabling the default withcycle=True
(@86a50eb2).Override
set_prop_cycle
to pass the input arguments throughCycle
(@86a50eb2). Features are a superset and this also lets me cache the cycler for comparison with on-the-fly inputs.Add shorthands
rc['grid.width']
,rc['grid.style']
,rc['gridminor.width']
, andrc['gridminor.style']
for the respectivelinewidth
andlinestyle
settings (@a50d5264)Permit “registering stuff” by passing files or objects to
register_cmaps
,register_cycles
,register_colors
, andregister_fonts
rather than forcing users to use the.proplot
folder (@ad999e95).Support case insensitivity when calling matplotlib’s
unregister_cmap
by improvingColormapDatabase
so it derives from aMutableMapping
rather thandict
(@ade787f9).Make
Configurator
aMutableMapping
subclass and change iteration behavior to loop over keys, not item pairs (@5626bc88).Rename
get
tofind
(@e8559f3d). Confusing sinceget
didn’t accept a “fallback” second positional argument. Nowget
is the “dictionary-like” inherited method.Add public
changed
property to display a dictionary of settings changed from proplot defaults (@41b5e400).Add public
user_file
anduser_folder
static methods for displaying folder locations (@b11d744a).Support XDG directories for proplot config files on Linux (GH#204, @5e6367dc). Also accept the file
~/.proplotrc
and the folder~/.proplot
on all systems and raise a warning if duplicate valid files or folders are found.Make
rc_proplot
andrc_matplotlib
containers of proplot/matplotlib settings part of the public API (@a50d5264).Allow conversion of numeric inputs with
units
using e.g.pplt.units(num, 'in', 'cm')
(@88f3dc88).Add more intuitive
rc['grid.labelpad']
andrc['tick.labelpad']
as aliases forrc['grid.pad']
andrc['tick.pad']
(@a50d5264).Add
line
andlinex
command aliases forplot
andplotx
(@6382cf91). This is more intuitive.Add
stepx
andstemx
commands analogous toplotx
, and addhisth
,boxploth
(shorthandboxh
), andviolinploth
(shorthandviolinh
) commands analogous tobarh
(@6382cf91).Exclude out-of-bounds data when determining automatic y (x) axis limits when x (y) limits have been explicitly set for
plot
andscatter
plots (@6382cf91). Controlled by therc['axes.inbounds']
property, analogous torc['cmap.inbounds']
used for cmap scaling. This feature leverages proplot’s input standardization.Let 1D plotting commands iterate over columns of 2D x and y coordinate arrays instead of only 2D y coordinate arrays (@6382cf91.)
Only modify
heatmap
major and minor tick locations if the default tickers are active (GH#6382cf91).Support more artist synonyms throughout plotting overrides, e.g.
ec
foredgecolor
,lw
forlinewidth
,fc
andfillcolor
forfacecolor
(@6382cf91). This expands matplotlib synonyms.Support passing positional fifth-argument colors to
barbs
andquiver
, just likescatter
(@6382cf91). This was previously not possible.Use default luminance of
90
rather than100
for auto-colormaps generated for barb, scatter, and streamline plots (@6382cf91).Support automatic labels for
tricontour
andtripcolor
plots alongside the more commoncontour
andpcolor
. (@6382cf91).Add
rasterize
keyword tocolorbar
so that colorbar solids rasterization can be turned on (proplot turns off by default) (@6382cf91).Add
edgefix
keyword tocolorbar
to control colorbar-solid edges and use shared_fix_edges
function (@6382cf91).Add
location
keyword as alternative toloc
for legend and colorbar funcs (@5cb839fd).Add
alphabetize
keyword tolegend
to optionally alphabetize handles by their labels (@6382cf91).Apply auto-detected xarray and pandas legend/colorbar titles even if the legend/colorbar are not drawn on-the-fly (GH#6382cf91).
Add
rc['colorbar.facecolor']
andrc['colorbar.edgecolor']
properties analogous to legend properties for controlling frame (@6382cf91).Treat singleton lists and tuple
legend
input same as scalar handle input, i.e. never triggers “centered row” specification (@6382cf91).Support auto-detection of tuple-grouped
legend
handle labels when labels not passed explicitly (@6382cf91).Automatically pull out grouped tuples of artists passed to
legend
if they have differing labels (@6382cf91). This is useful for passing error shading tolegend
.Silently ignore non-artist and non-container
legend
input – e.g., ignore the bins and values returned byhist
(@6382cf91).Allow mappable
legend
input by retrievingContourSet.legend_elements
andCollection.legend_elements
handles (@6382cf91).Allow list-of-list “centered row”
legend
specification with e.g.[h, [h1, h2, h3]]
(i.e., mixed list and non-list input) (@6382cf91).Permit partial specification of
legend
labels, e.g.[h1, h2]
paired with['label', None]
overrides the artist label forh1
but uses the artist label forh2
(@6382cf91).Interpret all native matplotlib
legend
spacing arguments (e.g.,borderpad
andcolumnspacing
) withunits
(@6382cf91).Make
proplot.axes.Axes.colorbar
capture matplotlib-nativeformat
keyword as alias forformatter
andticklabels
(GH#262).Support list-of-string parametric coordinates and format on-the-fly colorbar ticks with those string labels (@02fbda45). This may be a common use case for parametric plots.
Add
ignore
keyword to omit specificshow_cmaps
,show_cycles
, andshow_colors
categories from the tables (GH#c45d5fa1).Allow case-insensitive specification of
show_cmaps
,show_cycles
, andshow_colors
categories and never ignore input colormaps even if they match an ignored name like'jet'
(GH#c45d5fa1).Support restricting cartopy bounds in cartopy 0.19 by leveraging the
ylim
Gridliner
property (@e190b66c).Add
xlabelpad
,ylabelpad
,xticklabelpad
,yticklabelpad
keywords toformat
and read and apply changedrc['axes.labelpad']
(@e7d86b8f).Add support for “minor” radial and azimuthal gridlines in
proplot.axes.PolarAxes.format
(@59c85f0e).Add
thetagrid
,rgrid
,thetagridminor
, andrgridminor
keys toproplot.axes.PolarAxes.format
to toggle gridlines, and read and apply changed toggles from rc settings – consistent with Cartesian axes (@59c85f0e).Add
title_kw
,suptitle_kw
,leftlabels_kw
,rightlabels_kw
,toplabels_kw
, andbottomlabels_kw
toproplot.axes.Axes.format
for arbitrarily modifying label text objects – consistent withxlabel_kw
andylabel_kw
used forproplot.axes.CartesianAxes.format
(@6382cf91).
Bug fixes¶
Fix issue with unpacking iterables inside return statements in python < 3.8 (GH#268) by Eli Knaap.
Fix issue where auto layout algorithm recurses in popup backends (@51967ce3).
Fix issue where auto layout algorithm blows up in mpl 3.4+ (@51967ce3).
Fix issue where tight layout is effectively deactivated in mpl >= 3.4 due to
set_position
automatically callingset_in_layout(False)
(@20502345).Fix issue where thin pyplot-function wrappers e.g.
isinteractive
do not return results (@e62e3655).Fix issue where
proplot.config.Configurator.save
preserves the'#'
in HEX strings, resulting in values that cannot be read back in withproplot.config.Configurator.load
(@41b5e400).Fix issue where deprecated
aspect
subplots
argument is ignored (@70a8b87d).Fix issue where explicit user-input
width
is ignored when creating colorbars or panels and gridspec slot already exists (@51967ce3).Fix bug where the default space selection failed to use the figure-wide share setting (@51967ce3).
Fix bug where the reference subplot aspect ratio not preserved in presence of complex geometry with panels (@51967ce3).
Fix issue where a-b-c labels are removed in presence of
'top'
panels withtitleabove=True
(@7873d5e0).Fix issue where ‘aligned’ labels fail in recent matplotlib versions due to private matplotlib API change (@51967ce3).
Fix issue where
cmap.reverse()
returns strange monochrome colormaps when channel values are specified by functions (e.g.,cubehelix
) due to loop scope overwriting a non-local lambda function variable (GH#ade787f9).Fix issue where
_restrict_inbounds
fails for reversed/descending axis limits (@6382cf91).Fix issues where cartopy minor gridlines are toggled on when map bounds are changed and basemap map boundary props cannot be modified (@c1f1a7de).
Turn off
_restrict_inbounds
for geographic projections to prevent issue where lon/lat coordinates are compared to map coordinates (@6382cf91). In-bounds colormap scaling for geographic projections may be added in a future version.Fix issue where error indications do not ignore masked values in masked numpy arrays (@6382cf91).
Fix issue where error shading objects are grouped into lists rather than tuples and are not combined into single handle when passed to
legend
(GH#260).Fix issue where
parametric
ignoresinterp
when selectingDiscreteNorm
colormap levels (@152a3a81).Fix issue where tight layout padding is not respected for panels created from twin axes by ensuring panel parent is always the main axes (@e7d86b8f).
Fix obscure bug where axis labels in presence of mixed panels and non-panels are improperly shared (@06666296).
Stop overwriting user-input
spineloc
when combined with user-input spinebounds
(@e7d86b8f).Include children of
key
when triggering complex synced settings (e.g., now we trigger application ofrc['tick.widthratio']
when eitherrc['tick.width']
orrc['meta.width']
are changed) (@5626bc88).
Internals¶
Convert all plotting wrappers to dedicated overrides of individual functions in
PlotAxes
class (@6382cf91). This massively simplifies the internals and makes learning and adopting proplot much easier for users.Implement interpretation of physical units and “panel” accounting directly on the
GridSpec
instead of cumbersome hidden methods inFigure
(@20502345).Validate all setting assignments to
Configurator
using a newrc_proplot
dictionary, analogous torcParams
(GH#109, @5626bc88). This helps prevent bugs.Move
text
,legend
, andcolorbar
overrides to baseAxes
class separate fromPlotAxes
(@6382cf91).Automatically redirect all internal plotting calls to native matplotlib methods (@6382cf91). This significantly improves stability.
Move
register_colors
internals fromconfig.py
tocolors.py
by breaking up into smaller functions (@ad999e95).Move
_version
to a separatedependencies.py
file and allow more versatile comparison operations (@8806631d).Efficiently impose
GeoAxes
defaultslatlon=True
andtransform=PlateCarree()
in 90% fewer lines by looping over funcs.
Documentation¶
Move all plotting wrapper documentation to dedicated methods and remove references to wrappers in User Guide and Getting Started.
Embed
proplot.figure.Figure
documentation insideproplot.ui.subplots
instead of just referencing it.Embed
proplot.axes.Axes.format
documentation insideformat
documentation for subclasses instead of just referencing it.Document the relative font size scalings with a table in
text
(@6382cf91).
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
remain available.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
keywordsshade
,fade
toluminance
,saturation
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¶
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¶
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¶
Features¶
Internals¶
ProPlot v0.4.2 (2020-01-09)¶
Features¶
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¶
Bug fixes¶
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¶
Documentation¶
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¶
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.6 (2019-12-08)¶
Bug fixes¶
Fix issue where twin axes are drawn twice (@56145122).
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¶
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¶
Documentation¶
Various RTD bugfixes (e.g. @37633a4c).
ProPlot v0.0.0 (2019-11-27)¶
The first version released on PyPi.