This page lists the API changes with each version. 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.
Important
Please note that when classes, functions, keywords, or settings are deprecated, they are not removed – using the old syntax will result in a warning rather than an error and preserve the original functionality. Since proplot adheres to semantic versioning, we will not consider removing the deprecated syntax until the first major release (i.e., version 1.0.0).
Version 1.0.0 (####-##-##)¶This will be published when more comprehensive testing is completed and stability is improved.
Version 0.10.0 (2022-##-##)¶ Deprecated¶Remove the obscure proplot.figure.Figure.format
keyword mathtext_fallback
, so that rc['mathtext.fallback']
can only be changed globally (@5ce23a59).
Rename rasterize
and rc['colorbar.rasterize']
to rasterized
, consistent with the existing matplotlib rasterized
property (@31efafea).
Rename basemap
and rc.basemap
to backend
and rc['geo.backend']
, which can take either of the values 'cartopy'
or 'basemap'
, and auto-translate and emit warning when basemap
is used (@613ab0ea, @eb77cbca).
Rename rc['cartopy.autoextent']
, rc['cartopy.circular']
to rc['geo.extent']
, rc['geo.round']
, with rc['geo.extent']
taking either of the values 'globe'
or 'auto'
(cartopy.autoextent
is translated when used) (@c4b93c9d).
Improve the GridSpec
“panel” obfuscation by renaming get_subplot_geometry
to get_geometry
, get_geometry
to get_total_geometry
(@52f57094).
Improve the GridSpec
“panel” obfuscation by having the public GridSpec
properties gs.nrows
, gs.ncols
, gs.wratios
, gs.hratios
, gs.wspace
, gs.hspace
, gs.wpad
, and gs.hpad
refer to the reduced non-panel geometry (@52f57094).
Deprecate maxn
and maxn_minor
passed to colorbar
and recommend the alternative locator_kw={'nbins': n}
(@b94a9b1e). The new default locator DiscreteLocator
means that these settings should not need to be used as much (see below).
Constructor funcs Locator
, Formatter
, Scale
, and Norm
now return a copy.copy
when an instance of the relevant class is passed (@521351a2). This helps prevent unexpected and hard-to-debug behavior caused by reusing mutable instances.
Disable automatic reversal of dependent variable coordinates when the axis limits were previously fixed, and add documentation for this feature (GH#300).
Automatically disable minor colorbar and axis ticks when applying non-numeric major tick labels with a FixedFormatter
(@c747ae44).
Use DiscreteLocator
for major/minor discrete colorbar ticks instead of FixedLocator
and auto-update the tick selection whenever the axes is drawn (@b94a9b1e, @92bb937e, @302c239e).
Disable matplotlib’s auto-removal of gridlines in presence of pcolor
plots in all versions and silence the matplotlib 3.5 deprecation warning (@ba405ac0). Now gridlines appear on top of pcolor meshes by default, just like filled contours.
Apply the rc['geo.round']
setting (formerly rc['cartopy.circular']
) when instantiating polar basemap projections (@5f1c67cc). Previously this setting was only used for cartopy projections.
Put outer legends or colorbars on the same panel axes if their align
values differ and (for colorbars only) their length
s do not overlap (@91ac49b7). This permits e.g. aligned “bottom left” and “bottom right” outer legends.
Change the sample show_fonts
text with math
keyword to show math or non-math, sort fonts by input order or by their appearance in the rc
list, and permit FontProperties
or fontspec input and property keywords (@34d6ec14).
Change rc['mathtext.default']
from 'regular'
to 'it'
, and change 'sans'
appearing in the rc['mathtext.rm']
, rc['mathtext.sf']
, rc['mathtext.bf']
, and rc['mathtext.it']
settings to 'regular'
(@323). See below for details.
Change rc['grid.labelpad']
from 4.0
to 3.0
(@f95b828a). This makes cartopy grid labels and polar axes labels a bit more compact.
Change rc['legend.handleheight']
from 1.5
to 2.0
for less compressed Patch
handles (e.g. with error shading) (@2a5f6b48).
Support passing lists for the proplot.axes.Axes.format
keywords abc
and title
, in which case the label is picked by selecting the number
(minus 1) entry from the list (GH#294) by Pratiman Patel.
Permit disabling a-b-c labels for a particular subplot by passing e.g. number=None
instead of number=False
(@f7308cbe). None
is a bit more intuitive.
Add the modifiable proplot.figure.Figure.tight
property to retrieve and optionally toggle the tight layout setting (@46f46c26).
Add a top-level subplot
command that returns a figure and a single subplot, analogous to subplots
(@8459c24c).
Improve performance of the “tight layout” algorithm in cartopy axes by skipping artists clipped by the axes background patch boundary (@f891e4f0).
Improve default appearance of figures with top/right panels and colorbars and with the tight layout algorithm disabled (@c4a3babb).
Allow passing wequal
, hequal
, and equal
to Figure
along with other scalar gridspec parameters (@d9e62c54).
Add the rc['subplots.equalspace']
and rc['subplots.groupspace']
settings to control tight layout default values for equal
and group
(@b4bf072d).
Add the wgroup
, hgroup
, and group
keywords (analogous to wequal
, etc.) to optionally disable tight layout behavior of comparing adjacent subplot “groups” rather than all subplots in the row or column (@b4bf072d).
Permit passing GridSpec
instances to add_subplots
to quickly draw a subplot inside each gridspec slot in row or column-major order (@a9ad7429).
Add copy
method to re-use the same gridspec geometry for multiple figures (re-using an existing gridspec is otherwise not possible) (@8dc7fe3e, @be410341, @a82a512c).
Permit adding additional outer panels or colorbars (or panels) by calling methods from the panel rather than the main subplot (@cfaeb177).
Permit adding “filled” colorbars to non-subplots and length
greater than one by implementing with a non-subplot child axes and inset locator (@9fc94d21).
Allow using the Proj
keyword latlim
as Mercator projection limits and lon0
, lat0
aliases for lon_0
, lat_0
(@5f1c67cc).
Add the GeoAxes
labels
side options 'neither'
, 'both'
, and 'all'
, analogous to Cartesian axes tickloc
options (@0f4e03d2).
Add the proplot.axes.GeoAxes.gridlines_major
, proplot.axes.GeoAxes.gridlines_minor
properties for additional customization or debugging issues (@869f300f).
Move the extent
and round
keywords (formerly autoextent
and circular
– see above) from __init__
to proplot.axes.GeoAxes.format
, supporting toggling and passage to e.g. subplots
(@5f1c67cc).
Add rc['grid.geolabels']
setting that auto-includes cartopy 'geo'
location when toggling labels with e.g. lonlabels='left'
or labels=True
, and support passing it explicitly with e.g. labels='geo'
(@9040cde0).
Add the rc['grid.checkoverlap']
setting to optionally disable the auto-removal of overlapping cartopy grid labels (only works in cartopy >= 0.20) (@3ff02a38).
Add the public proplot class proplot.ticker.IndexFormatter
, since the matplotlib version was entirely removed in version 3.5 (@c2dd8b2e).
Replace matplotlib.ticker.IndexLocator
with proplot.ticker.IndexLocator
, consistent with IndexFormatter
, and remove the limitation requiring data to be plotted on the axis (@c2dd8b2e).
Permit picking the NullFormatter
, AutoFormatter
NullLocator
, and AutoLocator
by passing True
or False
to the corresponding constructor functions (@92ae0575).
Add proplot.ticker.DiscreteLocator
analogous to FixedLocator
that ticks from a subset of fixed values, and add a discrete
keyword and register as 'discrete'
in proplot.constructor.Locator
(@b94a9b1e).
Support specifying transform
plotting command arguments as registered cartopy projections rather than CRS
instances (@c7a9fc95).
Permit passing vmin
and vmax
to proplot.axes.Axes.colorbar
, as quick alternative to using norm_kw
(@eb9565bd).
Permit discretizing continuous colormaps passed to colorbar
using values
, instead of ignoring values
when colormaps are passed (@503af4be).
Ensure the default ticks are aligned with levels when passing discrete colormap instances to colorbar
(@503af4be).
Emit warning when both a scalar mappable and vmin
, vmax
, norm
, or values
are passed to colorbar
(@503af4be).
Support TeX modifiers rc['mathtext.it']
, rc['mathtext.bf']
, etc. that act on the “regular” font 'regular'
rather than a global font family like 'sans'
when rc['mathtext.fontset']
is 'custom'
(GH#323).
Automatically load from “local” folders named proplot_cmaps
, proplot_cycles
, proplot_colors
, and proplot_fonts
in current or parent directories, consistent with “local” proplotrc
files (@a3a7bb33).
Add the proplot.config.Configurator.local_folders
function, analogous to local_files
, and add a local
keyword to each register
function (@a3a7bb33).
Fix matplotlib >= 3.5 issue preventing basic application of “shared” axes with share
, sharex
, sharey
(GH#305).
Fix matplotlib >= 3.5 issue preventing basic usage of proplot.colors.DiscreteNorm
and colorbars scaled by proplot.colors.DiscreteNorm
(GH#302).
Fix matplotlib >= 3.5 issue where date axes are not correctly detected due to a new default date converter (@63deee21).
Fix matplotlib >= 3.4 issue with fixed-aspect log-log axes due to deprecation of get_data_ratio_log
(@29ed6cce).
Fix matplotlib >= 3.4 issue where position of child axes in presence of subfigures is incorrect (@9246835f).
Fix matplotlib >= 3.4 issue where alternate axes are drawn twice due to adding them as child axes and failing to remove from the fig._localaxes
stack (GH#303).
Fix matplotlib < 3.2.0 annoying rc['examples.directory']
deprecation warning message (GH#196).
Fix matplotlib < 3.2.0 issue where rc['axes.inbounds']
feature fails due to private API invocation (@e3e739e4).
Fix basic matplotlib < 3.1.2 usage issue due to missing validate_fontweight
validator (@1d2d05b7).
Fix cartopy >= 0.20 issue where added projections like 'wintri'
fail due to an ImportError (GH#324).
Fix cartopy >= 0.20 issue where inline longitude and latitude gridline labels can no longer be turned on (GH#307).
Fix cartopy >= 0.20 issue where user-specified longitude/latitude gridline label sides ignored due to using booleans instead of 'x'
, 'y'
(@2ac40715).
Fix cartopy >= 0.18 issue where longitude gridlines and labels 360 degrees east of gridlines on the left edge of the map are unnecessarily removed (@bcf4fde3).
Fix cartopy < 0.18 issue where longitude gridlines and labels east of dateline are not drawn, and remove outdated gridliner monkey patches (@aa51512b).
Fix issue where tight layout algorithm can fail when labels from another subplot span over an empty gridspec slot (GH#313).
Fix issue where tight layout algorithm fails in the presence of subplots with overlapping or identical subplotspecs (@87f098b6).
Fix issue where super label settings (e.g. size) cannot be updated after they are initially created (@2cd72fd3).
Fix issue where proplot.axes.CartesianAxes.format
keyword arguments cannot be passed to panel_axes
(@1b3d0d48).
Fix issue where outer colorbars are drawn twice due to adding them as both figure-wide axes and child axes (GH#304).
Fix issue where silently-deprecated aspect
parameter passed to proplot.ui.subplots
is not translated to refaspect
(@2406a2ae).
Fix issue where proplot.gridspec.GridSpec.figure
is allowed to change – instead raise error that recommends copy
(@d8898f5f).
Fix issue where proplot.gridspec.GridSpec.update
cannot be called on gridspecs without companion Figure
s (@e69fd041).
Fix issues passing pandas datetime coordinates and object-type coordinate arrays to plotting methods (GH#320).
Fix issue where hatching passed to bar
does nothing unless edgecolor
is explicitly passed (GH#389).
Fix issue where boxpctiles
is not recognized by e.g. bar
but boxpctile
is due to typo (GH#382).
Fix issue where list-of-string colors passed to scatter
are interpreted as data values (GH#316).
Fix issue where step
where
parameter is ignored due to drawstyle
conversion (GH#359).
Fix issue where x and y axis limits are reversed when passing to hexbin
and hist2d
(GH#334).
Fix regression where x or y axis limits are reversed when passing to hist
and histh
(GH#334).
Fix issue where settings passed to colorbar
after calling e.g. pcolor
with colorbar_kw
are ignored (GH#314).
Fix issues where passing the colorbar orientation
without a loc
, or using a non- standard orientation
for a given loc
, triggers tickloc error (GH#314).
Fix issue where background properties like color
and linewidth
cannot be passed to Axes
instantiation commands (@b67b046c).
Fix issue where manual data aspect ratio passed with format
or set_aspect
is inverted (@7cda3b23).
Fix issue where continuous normalizer vmin
and vmax
are not set to min and max of levels
when passed to DiscreteNorm
(@e9ed16c1).
Fix issue where unevenly-spaced levels
combined with DiscreteColormap
incorrectly samples the color list (GH#299).
Fix issue where legend
ignores the user-input fontsize
(GH#331).
Fix issue where legend
ignores the user-input facecolor
but not the shorthand fc
(GH#402).
Fix issue where passing invalid rc setting to .format
results in persistent invalid rc
state requiring restarting the session/configurator (GH#348).
Fix issue where proplotrc
settings are ignored if a subsequent line contains an overlapping meta-setting (GH#333).
Fix issue where setting rc['legend.facecolor']
or rc['legend.edgecolor']
to 'inherit'
(or passing as keyword argument) raises error (GH#298).
Fix issue where settings rc['grid.pad']
and rc['grid.labelpad']
and settings rc['tick.pad']
and rc['tick.labelpad']
are not synced (@2b96eb0d).
Fix issue where the unchanged rc['figure.figsize']
setting is incorrectly included in the changed
dictionary (@d862395b).
Indicate default values in type-specification rather than parameter descriptions (@50546dee).
Improve website style: lighter headers, wider text, and no more clumsy boxes around code literals (@450ede53).
Improve colorbar and legend documentation, expound added features more carefully (@43631840).
Apply positive=True
, negative=True
, and symmetric=True
by modifying vmin
and vmax
rather than levels (@fbca1063). This permits using these keywords even when discrete=False
and fixes too-few-levels issues when discrete=True
.
Improve default string representation of axes generated with altx
, alty
, or inset_axes
(@a570fca7).
Fix issue where “auto-diverging” application fails when colormap is not explicitly specified (@9ce6c61c).
Fix issue where “auto-diverging” application is not disabled when qualitative colormaps are specified with colors
(@44322db2).
Fix issue where sequential=True
, cyclic=True
, or qualitative=True
are ignored when “auto-diverging” is applied (@cb4910fa).
Fix issues where version 7.0 cyclic/diverging “scientific colour maps” are not internally recognized as cyclic/diverging (@df11445a).
Fix issue where rc['cmap.discrete']
set to False
is used even for contour plots rather than ignored (@a527cc52).
Fix issue where “cyclic” colormaps are allowed to have extend
other than 'neither'
when specified with cyclic=True
rather than passing a cyclic cmap
(@e91d9bf3).
Fix issue where “qualitative” colormaps are allowed to have discrete
set to False
when specified with qualitative=True
rather than passing a discrete cmap
(@789f224b).
Fix issue where SegmentedNorm
cannot be specified with norm='segmented'
and norm_kw={'levels': level}
when discrete
is also disabled (@a4f6e838).
Fix issue where more than one of mutually-exclusive sequential
, diverging
, cyclic
, and qualitative
keywords can be set to True
and others are silently ignored without warning (@f14aa263).
Permit passing arbitrary format
arguments to multi-axes creation commands like subplots
(@0b801442).
Permit passing format
arguments for different projections during the same proplot.gridspec.SubplotGrid.format
or proplot.figure.Figure.format
call (@f5e25598). Invalid projection-specific keywords are ignored.
Update Scientific Colour maps to version 7.0 (adds 'bam'
, 'bamO'
, 'batlowK'
, 'batlowW'
, 'bukavu'
, 'fes'
, and 'vanimo'
) (@c172a74b).
Add [xy]labelsize
, [xy]labelweight
, [xy]ticklabelsize
, [xy]ticklabelweight
keywords to proplot.axes.CartesianAxes.format
(@975025df).
Add labelsize
and labelweight
keywords to proplot.axes.PolarAxes.format
, proplot.axes.GeoAxes.format
(@975025df).
Automatically set xpineloc
and yspineloc
to 'bottom'
and 'left'
when xbounds
or ybounds
are passed to proplot.axes.CartesianAxes.format
only if both spines are currently visible (@a2396afe).
Automatically use the top/right spine rather than the bottom/left spine when setting xspineloc
or yspineloc
to the position ('axes', coord)
or ('data', coord)
when coord
is more than halfway across the axis (@a2396afe).
Passing [loninline|latinline|inlinelabels]=True
to format
now implies [lonlabels|latlabels|labels]=True
unless specified otherwise (@ed372d64). This fixes annoying redundancy when calling format
.
Improve default reversed
and shifted
colormap names (@a4218e09).
Fix issue where arguments can only be passed to altx
and alty
, but not twinx
and twiny
(@223b55a6).
Fix issue where xbounds
, ybounds
, and fixticks
fail due to errors in tick restriction algorithm (@a2396afe).
Fix issue where passing fontsize
to format
fails to update fontsize-relative title and a-b-c label sizes (@64406726).
Fix issue where lonlim
, latlim
, and latbounds
cannot be passed to e.g. add_subplot
during GeoAxes
initialization (@d9d3c91a)
Fix issue where vmin
and vmax
are ignored when making plots with discrete levels (GH#276).
Fix issue where autodiverging
is disabled even when known diverging colormaps are passed to PlotAxes
commands (@2eca2198).
Fix issue where colormaps made with Colormap
with unspecified name
cannot be assigned as rc
defaults (@0e93b7fa).
Fix issue where registered colormaps with trailing _r
or _s
cannot be retrieved due to automatic reversing/shifting feature (@345680c9).
Populate docs with examples of passing format
arguments to figure and axes instantiation commands (e.g. pplt.figure
, fig.subplot
) (@803a889f).
Improve website colormap and cycle table rendering time by rasterizing colorbar data and add rasterize
as optional keyword arg (@1a875fc2).
Stop changing default background of figure when ThreeAxes
is present – instead just set the default axes background to transparent (@e933614d).
Permit passing background patch-related format
keywords like facecolor
on axes instantiation (@f863afd8).
Add rc['land.alpha']
, rc['ocean.alpha']
, rc['coast.alpha']
, rc['rivers.alpha']
, rc['lakes.alpha']
, rc['borders.alpha']
, and rc['innerborders.alpha']
settings to change opacity of geographic features (@8bb49a02). Also add missing rc['coast.zorder']
.
Add xtickcolor
, ytickcolor
, xticklabelcolor
, and yticklabelcolor
format
keywords to control tick mark and label colors (@68cba1af). Also add documentation for xlabelcolor
and ylabelcolor
.
Add xticklenratio
and yticklenratio
format
keywords to scale minor tick lengths (@26fdadf6).
Add xtickwidth
, ytickwidth
, xtickwidthratio
, and ytickwidthratio
keywords to format
to scale tick widths (@30a250f0).
Set default gridlabelcolor
to color
when latter is passed to polar or geo axes format
methods, consistent with proplot.axes.CartesianAxes
color
.
Add ticklen
, ticklenratio
, tickwidth
, tickwidthratio
keywords to colorbar
to manage colorbar ticks (@08498abf).
Add labelloc
keyword to colorbar
to change the colorbar label location separately from tickloc
(@32069370).
Permit specifying linewidth
and markersize
keywords (and aliases) with arbitrary physical units for format/colorbar/plotting commands (@c1ffbc8c).
Add absolute_size
key to scatter
(analogous to absolute_width
used with bar
) to bypass auto-scaling of array input (@b4701411).
Add more intuitive bars
, boxes
, shade
, fade
keywords as alternatives to barstds
, boxstds
, shadestds
, and fadestds
(@15812cd4).
Ignore masked and invalid values in datasets passed to boxplot
and violinplot
(@daa666e2).
Convert showextrema=True
passed to violinplot
to barpctiles=True
(i.e., show 0–100 percentile range) (@42f613d6).
Add borderstyle
text
keyword to change the joinstyle
used for the path effects border (@25e21c76).
Fix issue with plotting in ThreeAxes
by inheriting from from Axes
instead of PlotAxes
(@64623d92).
Fix issue where format
ignores margin
rather than using it for both xmargin
and ymargin
(@ba32fd1a).
Fix issue where color
passed to format
triggers deprecation warning even though it is a valid background patch property (@a50eab0e).
Fix issue where calling violinplot
always emits warning due to masked array input (@daa666e2).
Fix issue where calling pcolorfast
with image output emits warning (@5d081306).
Fix issue where passing tickwidth=0
to format
changes the tick length persistently outside of context block (@4966c8ab).
Fix issue where tickratio
and lenratio
applied in successive calls to format
fails to update properly (@26fdadf6).
Fix issue with default scatter
smin
and smax
(used to convert array-like input sizes s
from data units to points ** 2
) by switching defaults to 1
and rc['lines.markersize']
rather than the data minimum and maximum (@b4701411).
Change stylized name “ProPlot” to simply lowercase “proplot”, consistent with matplotlib, cartopy, numpy, etc. (@b876b214).
Permit passing includepanels
and mathtext_fallback
as proplot.figure.Figure.format
keywords instead of just __init__
keywords (@33bff576).
Permit passing loc
proplot.axes.CartesianAxes.format
keyword argument(s) to alt[xy]
(@eaab8658). For example ax.alty(loc='left')
changes the spine, tick mark, tick label, axis label, and offset label sides to the opposite of the default: left for the new alternate axes, right for the original axes.
Improve documentation for loc
proplot.axes.CartesianAxes.format
keywords (@1fa90f87, @48dc346d). Inheritance order is loc
or spineloc
–> tickloc
–> ticklabelloc
–> labelloc
and offsetloc
, e.g. xloc='bottom'
implies xtickloc='bottom'
unless specified otherwise.
Do not inherit tickloc
from spineloc
if it is invalid (e.g., 'zero'
), do not propagate spineloc
and tickloc
to other settings if they are inferred from updated rc settings, and issue error message if tickloc
or ticklabelloc
are invalid (@616d81fa, @219e4b21, @bc5a692c).
Add documentation for previously-hidden xticklabelloc
, yticklabelloc
, xlabelloc
, and ylabelloc
proplot.axes.CartesianAxes.format
keywords (@1fa90f87).
Add xoffsetloc
, yoffsetloc
keywords to control position of order-of-magnitude indicator location for x and y axes (with large numbers) (@96a37e53).
Add xlabelcolor
and ylabelcolor
keywords as alternatives to xcolor
and ycolor
to change just the label color and nothing else (@d2f20970).
Add base
keyword to SigFigFormatter
to optionally round to multiples other than factors of 10 (@3b00e8a0).
Pass [major|minor]_[locator|formatter]
FuncScale
arguments through the constructor functions (@e238d4db).
Support single-color parametric plots with e.g. ax.parametric(x, y, color='red')
as quick alternative to plot
without “sticky edges” (@98504b86).
Support legend entries for parametric lines by interpreting label
and value
separately from labels
and values
(@14a0cfdc).
Increase zorder
of title/a-b-c text from 3
to 3.5
so it overlies e.g. text contour labels (@77fa01da).
Ensure contour labels
appear on top of inner titles/a-b-c labels by decreasing default zorder
from cntr_zorder + 2
to cntr_zorder + 1
(@59222164).
Implement “descending level” support directly inside DiscreteNorm
rather than cmap parser in PlotAxes
commands, and auto-reverse descending levels passed to SegmentedNorm
(@46d8bedc).
Improve show_cmaps
and show_cycles
: Stop passing arguments through constructor functions, preserve case for user colormap labels, and avoid showing leading _
and trailing _copy
in labels (@c41db8d8).
Fix accidental commit of debugging print statement (@259a263b).
Fix issue where includepanels
is not applied for spanning axis labels in presence of panels but only one spanning subplot (@b8bc55ec).
Fix issue where default outer legend axes-relative loc
does not take into account the underlying “panel” side (@2446acc1).
Fix issue where axis label color is overwritten during __init__
call to proplot.axes.CartesianAxes.format
(@b454a513).
Fix issue where setting xspineloc
or yspineloc
to invalid tickloc
(e.g., 'zero'
or 'center'
) also disables the ticks (@616d81fa).
Fix issue where setting axis label color without specifying label text erases the old label text (@7a7852f9).
Fix issue where axis label settings are overridden by settings from invisible x/y axis on alternate axes (@c6db292b).
Fix AutoFormatter
issue where orderOfMagnitude
is not taken into account when correcting small tick values truncated to zero on (usually logarithmic) axis scales (@54fbef0b).
Fix issue where proplot.utils.arange
is not endpoint-inclusive for negative (descending) step size (@ec1f8410).
Fix confusing behavior where explicitly passed vmin
and vmax
are ignored if norm
was passed as an already-instantiated class (@1ee79d36).
Fix issue where segment data of matplotlib.cm
colormap instances is overwritten during conversion to proplot subclasses (GH#283).
Fix issue where color of contour labels
cannot be changed with labels_kw
(@d101575d).
Fix keyword conflict where sizes
are interpreted as Collection
marker sizes when passed to barb
(GH#287).
Fix issue where “sticky edges” fail for datetime data (@33fa9654).
Revert back to original color names for 'cyan'
, 'magenta'
, and 'yellow'
rather than overwriting with 'c'
, 'm'
, and 'y'
(GH#280).
Treat 'ochre'
and 'ocher'
as synonyms (consistent with existing 'grey'
and 'gray'
synonyms) (@c949e505).
Permit passing format
keywords when instantiating figures and axes (@ae98378d). For example: pplt.figure(suptitle='Super title')
or fig.add_subplot(111, xcolor='gray', xticks=10)
.
Add back color
as a valid proplot.axes.CartesianAxes.format
keyword arg for consistency with xcolor
and ycolor
(@ecb6fa3f).
Fix issue where single-level single-color contour plots do not draw the contour (GH#281).
Fix issue with dictionaries passed to proj
when calling add_subplots
(@21b165df).
Fix issue with includepanels
disabling spanning axis labels in the presence of panels (@332ba702).
Remove useless “unexpected version” warning when cartopy is not installed (@6dbab1bc).
Improve backwards compatibility with matplotlib.figure.Figure.colorbar
by permitting positional cax
and ax
args (@5003f9a8).
Try to auto-disable relative bar widths for seaborn plots that use the bar
and barh
commands (@b79b9c60).
Fix documentation compiling issue due to Natural Earth server change (@d1d47911).
Rename rc['cmap.edgefix']
to rc.edgefix
(@515f5132). It now applies to bar and area plot elements, not just scalar mappables (see below).
Deprecate passing lists of colors to boxplot
and violinplot
in favor of using the property cycler instead (see below) (@67d95349).
The violinplot
functions now return PolyCollection
of violin bodies or tuples of (bodies, error bars) instead of a singleton dictionary containing just the 'bodies'
entry (@45774536).
Deprecate recently-introduced proplot.gridspec.SubplotGrid.legend
and proplot.gridspec.SubplotGrid.colorbar
methods (@d21a61a3). Idea was this could be used to add an auto-legend to each subplot with axs.legend()
or identical colorbars with axs.colorbar(m)
, but in the future want to instead use these methods to add colorbars and legends along the edge of arbitrary subplots with e.g. axs[0, :2].colorbar(m, loc='bottom')
.
Deprecate recently-introduced proplot.gridspec.SubplotGrid.text
(@80deb71a). Idea was this could be used to add identical text to each subplot but that is pretty niche, does not need a dedicated command.
Fix issue where CSS/XKCD colors overwrite “base” color definitions, resulting in e.g. 'yellow'
different from 'y'
(@01db1223, @b90bee8c).
Make default label rotation for colorbar-of-artist string labels 0
, consistent with string tick labels applied with autoformat=True
(@3f191f3b).
Use default discrete=False
for hist2d
plots, consistent with hexbin
(@267dd161). Now “discrete” levels are only enabled for pcolor/contour plots by default.
Trigger adjust_grays
hue adjustments for gray-like color names passed to from_list
that aren’t technically pure gray, including 'charcoal'
, 'light gray'
/'light grey'
, and 'gray[0-9]'
/'grey[0-9]'
(@6cf42896, @49bb9370).
Implement “edgefix” and add edgefix
keyword for bar
, hist
, area
, and pie
to fix the “white-lines-between-patches” issue with saved vector graphics, just like pcolor
and contourf
(@cc602349, @b291b2be).
Revert back to matplotlib default behavior of edgecolor='none'
for bar
and pie
plots (@cc602349, @b291b2be). Previously this behavior often resulted in “white lines” issue but now edgefix
is applied to these plots.
Skip “edgefix” option when patch/collection alpha
is less than 1
to prevent appearance of overlapping edges (@5bf9b1cc). Previously this was only skipped if ScalarMappable
colormap included transparency. Also remove manual blending of colorbar solids (no longer needed) (@4d059a31).
The boxplot
and violinplot
functions now iterate through the property cycler for each box/violin by default (similar to seaborn) (@67d95349). The cycle can be changed with cycle
and cycle_kw
arguments.
Add align
keyword with options 'bottom'
, 'top'
, 'left'
, 'right'
, or 'center'
(with optional single-char shorthands) to change alignment for outer legends/colorbars (@4a50b4b2). Previously they had to be centered.
Add transpose
keyword as alternative to order
for 2D PlotAxes
commands (GH#72). transpose=True
is equivalent to order='F'
.
Return homogeneous groupings of matplotlib artists in silent_list
objects to simplify repr (@d59f9c40, @667cc068, @240f0b31, @0a6d74b7).
Use built-in matplotlib logic for plotting multiple hist
columns, with support for stack
as alias of stacked
and width
as alias of rwidth
(consistent with bar
keywords) (@734329a5). By default, histograms for successive columns are now grouped side-by-side instead of overlaid.
Add fill
and filled
keywords to hist
, analogous to stack
and stacked
, and make passage of these keywords set the corresponding default histtype
(@4a85773b). Also add filled
alias of fill
to boxplot
for consistency (@b5caf550).
Always copy colormaps returned by Colormap
to avoid subsequently changing global colormap properties with e.g. set_alpha
(@7a3c3f64).
Add leading underscore to all default colormap names (_name_r
for reversed, _name_s
for shifted, _name1_name2
for merged, and _name_copy
for all other modifications) and never register colormaps returned by Colormap
that begin with underscore (@a6fab19f, @1f6e6188). This is analogous to legend
ignoring labels with leading underscore.
Control colorbar frame properties using same syntax as legend frame properties – edgewidth
, edgecolor
, and optional rounded box with fancybox=True
(@58ce2c95). Colorbar outline is now controlled with linewidth
and color
. Previously these settings had to be in sync.
Auto-expand components of silent_list
and Collection
passed to legend
that have valid labels, similar to tuple group expansion (GH#277)
Add handle_kw
to legend
to optionally control handle settings that conflict with frame settings (@58ce2c95). Example: handle_kw={'edgecolor': 'k'}
.
Interpret 'grey'
as a synonym of 'gray'
by translating substrings in color database (@6cf42896, @04538bad). Permits e.g. color='grey1'
.
Permit loading color names from files without .txt
extension (@55481a9c). This restriction was unnecessary.
Set default=True
automatically if users pass margin
or space
to register_colors
to permit quickly/succinctly experimenting with XKCD color filtering algorithm (@cfc3cef6).
Add cartopy-based LongitudeLocator
, LatitudeLocator
, DegreeLocator
, LongitudeFormatter
, LatitudeFormatter
, DegreeFormatter
to public API for consistency with other “registered” tickers (@76e45c0c).
Fix issue where tuple rc
values are truncated to first scalar value when saving a proplotrc
(@e731c709).
Fix issue where channel-setting and scaling functions like scale_luminance
drop the opacity channel (@58ce2c95).
Fix issue where line plot coordinates get unnecessarily offset by 360
by removing unnecessary _geo_monotonic
standardization (GH#274).
Fix regression where vmin
is ignored without explicitly specifying vmax
and vice versa (GH#276).
Fix issue where scatter
ignores facecolors
input by treating it the same as other color aliases (GH#275).
Fix issue where calling legend()
without arguments generates duplicate labels for histograms (GH#277).
Fix issue where list-of-list style input to legend
fails to trigger centered legend (@e598b470).
Fix issue where alpha
passed to contour/pcolor/vlines/hlines commands was ignored due to translating as alphas
rather than alpha
(@e5faf4d6).
Fix unexpected behavior where PlotAxes
tries to make list-of-artist style colorbars from successive calls to 2D plotting commands rather than making individual colorbars (@20ce93a1).
Fix issue where diverging=True
is applied for datasets with both discrete=False
and vmin
or vmax
equivalent to 0
(@84b9f86e).
Fix issue where scatter
does not accept N x 3 or N x 4 RGB[A] style arrays (@13df1841).
Fix issue where importing seaborn issues 100 warnings due to overwriting seaborn colormaps added by proplot (@006aef5f).
Fix issue where inbounds
passed to scatter
applies only to axis-limit scaling, not cmap normalization scaling (@3d7636f2).
Fix issue with color-parsing due to _plot_errorshading
coming after _parse_cycle
rather than before (@acf545e2).
Fix issue where violin plots cannot be drawn without adding error bars (e.g., with means=True
) or an error is raised (@c0d04835).
Fix issue where explicitly specifying bar[stds|pctiles]
for violinplot
turns off the boxes if they were not specified (and vice versa for box[stds|pctiles]
) (@0edfff4e)
Add helpful warning message when legend
detects invalid inputs rather than silently ignoring them (@b75ca185).
Improve warning message when users pass both colors
and cmap
by recommending they use edgecolor
to set edges (@1067eddf).
Improve universal “rebuilding font cache” warning message when new users import proplot for the first time (@9abc894e).
Remove unused, mostly undocumented rc['axes.titleabove']
setting (@9d9d0db7). Users should be using rc['title.above']
instead.
Move SubplotGrid
from figure.py
to gridspec.py
(@7b688fc8). Makes more sense there.
Improve organization of internal functions, add data.py
, context.py
, and text.py
to internals
and rename and re-sort related PlotAxes
parsing utilities (@58ce2c95).
Hide the “registered” axes names (i.e., name
attributes) from public API (@ece1102b). Users do not interact with the native matplotlib projection registration system.
Add from_list
adjust_grays
option (enabled by default) to help make diverging colormaps with an intermediate hueless white, gray, or black color (@2e8cb495).
Add the axis sharing level 4
or 'all'
to share the limits, scales, and tick labels between axes not in the same row/column (@73f355a2).
Allow adding contours to legend
by interpreting label
keyword and using central handle from ContourSet.legend_elements
(@26bc77a4).
Extend mixed auto-manual legend label input (e.g. labels=[None, 'override']
) to case where legend handles are automatically retrieved from the axes rather than manually passed to legend()
(@26bc77a4).
Add inlinelabels
option to format
to set both loninline=True
and latinline=True
at once, and change the rc['grid.loninline']
and rc['grid.latinline']
settings to the single rc['grid.inlinelabels']
(consistent with rc['grid.rotatelabels']
and rc['grid.dmslabels']
) (@560ed978).
Fix regression where dimension reduction with e.g. barstds
or barptiles
no longer ignores NaN values (GH#257, @d1906fce).
Fix regression where legend()
cannot be called without the input handles (GH#188, @fdd53a6c).
Fix issue where edge colors of area plots with negpos=True
cannot be changed (@bb50dea4).
Fix issue where legend
order
keyword arg is ignored and default is changed back to 'F'
(@06666296).
Fix issues where setup_matplotlib
is not called for pint quantity input and column iteration of 2D input to 1D funcs fails (@e57d238e).
Fix issue where pint quantity x and y coordinates fail when passing as pcolor centers or when rc['cmap.inbounds']
enabled (@fd76af3a).
Fix issue where pint quantity z data do not have units stripped unless in xarray dataarray (@aadc65f9).
Fix issue where making single-color contour plots creates just one contour by making default levels
count independent from colors
(@63eaf10e).
Fix issue where common legend handle properties cannot be overridden due to searching for collection
props rather than line
props (@26bc77a4).
Fix issue where title/abc padding is overwritten in the presence of top panels and make title deflection to top panels generally more robust (@d27d05cf).
Fix issues with the %qt
backend using forward=False
during subplot additions (GH#244, @ac12bbc2)
Fix issue where %matpolotlib notebook
and %matplotlib widget
display unusable/cutoff figure previews by fixing the figure size at creation time and issuing one-time warning if size was not fixed explicitly (@88fc2868).
Make docstring utils explicitly private and convert _snippets
dictionary to callable dictionary-like _SnippetsManager
instance (@b73fe9e3). This helps prevent bug where assigned snippets have unfilled %(snippet)s
markers.
Numbers passed to pad
, wpad
, hpad
, space
, wspace
, hspace
, left
, right
, top
, and bottom
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.
Interpret sharex/sharey=True
as 3
(i.e., “turn all sharing on”) instead of 1
(integer conversion of True
) (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 simpler SubplotGrid
and move definition to figure.py
(@51967ce3).
Deprecate arbitrary __getattr__
override for SubplotGrid
(@51967ce3). Instead have dedicated format
, colorbar
, legend
, [alt|dual|twin][xy]
, panel[_axes]
, and inset[_axes]
methods.
Rename setting rc['abc.style']
to rc.abc
(@a50d5264). Setting this to False
still “turns off” labels, setting to True
“turns on” labels with the default style 'a'
, and setting to a string “turns on” labels with this style.
Rename image
category settings to rc['cmap.inbounds']
, rc['cmap.discrete']
, rc['cmap.edgefix']
, rc['cmap.levels']
, and rc['cmap.lut']
(@a50d5264).
Rename confusing rc['text.labelsize']
and rc['text.titlesize']
settings to clearer rc['font.smallsize']
and rc['font.largesize']
with shorthands rc['font.small']
and rc['font.large']
(analogous to rc['font.size']
) (@a50d5264). Previous names were bad because “label size” applies to more than just axis or tick labels and “title size” applies to more than just axes titles.
Rename rc['tick.ratio']
to rc['tick.widthratio']
and add missing rc['tick.width']
setting (@a50d5264).
Rename vague shorthands rc.alpha
and rc.facecolor
back to native rc['axes.alpha']
and rc['axes.facecolor']
and rename rc.linewidth
and rc.color
to rc['meta.width']
and rc['meta.color']
(@41b5e400). Axes can still be updated by passing alpha
, linewidth
, facecolor
, and edgecolor
to format
, and now format
supports arbitrary patch artist settings and aliases like lw
, ec
, fc
, hatch
, etc.
Change Configurator
iteration behavior to loop over keys, not item pairs, and make it a MutableMapping
(@5626bc88).
Rename proplot.config.Configurator.load_file
to proplot.config.Configurator.load
in order to match save
(@1769d349).
Change the default Configurator
save location from the home directory to the current directory and change the default filename to proplotrc
(without the leading dot) (@41b5e400).
Rename get
to find
(@e8559f3d). Confusing since get
didn’t accept a “fallback” second positional argument. Now get
is the “dictionary-like” inherited method.
Rename obscure LinearSegmentedColormap
, PerceptuallyUniformColormap
, and ListedColormap
to more intuitive/succinct ContinuousColormap
, PerceptualColormap
, and DiscreteColormap
(@ade787f9). Important due to the “qualitative colormap” behaviors triggered when a DiscreteColormap
is passed to plot commands (see features).
Following above change, rename LinearSegmentedNorm
to simpler SegmentedNorm
, rename Colormap
argument to_listed
to discrete
, change listmode
options from 'listed'
, 'linear'
to 'discrete'
, 'continuous'
, and add filemode
option (@ade787f9, @5ccd6c01).
Deprecate boxes
and violins
shorthands in favor of singular box
and violin
(@6382cf91). This feel analogous to existing bar
and barh
.
Rename the confusingly-capitalized Colors
to get_colors
and move to utils.py
(@51d480da). This is not a “class constructor” – it just returns lists of colors.
Rename the show
function keyword categories
to include
, consistent with the new ignore
keyword (@c45d5fa1).
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.
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).
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 over s
and c
columns.
Exclude out-of-bounds data when determining automatic y (x) axis limits when x (y) limits have been explicitly set for plot
and scatter
plots (@6382cf91). Controlled by the rc['axes.inbounds']
property, analogous to rc['cmap.inbounds']
used for cmap scaling. This feature leverages proplot’s input standardization.
Capture colors
passed to commands like contour
and pcolor
and use it to build qualitative DiscreteColormap
maps (@6382cf91). This matches the behavior of xarray plotting utilities. No longer use color
to change “edge color” of filled contours/grid boxes.
Add special qualitative cmap handling when colors=colors
, qualitative=True
, or cmap=pcolors.DiscreteColormap(...)
– always apply DiscreteNorm
(ignore and warn if user passed discrete=False
), truncate or wrap colors if there are too many/not enough for the levels, and add default extremes with set_under
or set_over
depending on user extend
(@6382cf91).
Select rc['cmap.diverging']
and apply DivergingNorm
automatically based on input data, similar to xarray and seaborn (@6382cf91). This is controlled with autodiverging
and the rc['cmap.autodiverging']
setting. It is also disabled when a cmap is explicitly passed (unless it is a known diverging cmap).
Set default linewidth to 0.3 when adding “edges” to filled contours (@6382cf91). This matches matplotlib behavior when passing edgecolor to a pcolor
command.
Only modify heatmap
major and minor tick locations if the default tickers are active (@6382cf91). Do not override user tickers.
Use default luminance of 90
rather than 100
for auto-colormaps generated for barb, scatter, and streamline plots (@6382cf91).
Sync 3D axes figure background color with axes background to avoid weird misaligned white square behind axes (@30a112bd).
Treat rc['tick.label']
and rc['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 allow rc['tick.labelpad']
and rc['grid.labelpad']
to be distinct.
Change default rc['legend.facecolor']
to white instead of inheriting from axes background (@6382cf91). Also set default rc['legend.edgecolor']
to rc['meta.color']
(black by default) and have legend
read from rc settings rather than setting default legend
input arguments.
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
or pplt.LogNorm
are allowed.
Allow creating subplots with figure
and either (1) subsequently calling subplots
or (2) passing integers or subplot specs generated by GridSpec
to add_subplot
(@51967ce3). This is convenient for complex grids or mixed proj types.
Add consistent/intuitive aliases subplot
and add_subplots
for native matplotlib commands add_subplot
and subplots
(@51967ce3).
Add subplotgrid
property to access a SubplotGrid
after drawing subplots one-by-one (@fb83384f).
Implement physical-units left
, right
, top
, bottom
, wspace
, and hspace
spaces directly on the GridSpec
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 to Figure
(@20502345). When a gridspec is added to the figure the arguments are passed to the gridspec. This replaces matplotlib’s subplotpars
and subplots_adjust
.
Allow variable tight layout padding between subplot panels using wpad
and hpad
, analogous to wspace
and hspace
(@20502345). Previously this was fixed at rc['subplots.innerpad']
.
Add pad
keyword to legend
, colorbar
, and panel
that controls local tight layout padding, analogous to space
(@20502345). Previously this was fixed at rc['subplots.panelpad']
.
Ensure wequal
and hequal
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 a SubplotGrid
available (@20502345). Also move internal implementation of figure-wide settings there. Figure-wide settings like suptitle
can still be updated from Axes.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 of SubplotGrid
with complex geometry would just return a wrong result.
Issue warning message when users try fig.subplots_adjust()
or pplt.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, @6382cf91).
Set default location for new axes panels to 'right'
, allowing for empty ax.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-applying setup_matplotlib
with the quantity’s unit registry when a quantity is passed (@6382cf91).
Support pint.Quantity
input for z coordinates (e.g., to ax.contourf
) by stripping the units to prevent warning (@6382cf91).
Support xarray.DataArray
arguments containing pint.Quantity
arrays by accessing data
rather than accessing .values
(@6382cf91).
Apply pint.Quantity
default unit labels to plots by formatting the units with the new rc.unitformat
setting (@6382cf91).
Add rc['cmap.sequential']
= 'Fire'
, rc['cmap.diverging']
= 'BuRd'
, rc['cmap.cyclic']
= 'twilight'
, and rc['cmap.qualitative']
= 'colorblind10'
settings to control the default sequential, diverging, cyclic, and qualitative cmaps, and add boolean sequential
, diverging
, cyclic
, and qualitative
keywords to select corresponding default cmaps (@6382cf91).
Add robust
keyword argument and rc['cmap.robust']
= False
setting to ignore outliers when selecting auto colormap ranges (GH#6382cf91). It can take the value True
, a percentile range, or a 2-tuple percentile interval.
Add rc['colorbar.rasterize']
= False
setting to control whether default colorbar solids are rasterized (@a50d5264).
Allow omitting the colormap name when instantiating colormap classes or using class methods like from_list
(@ade787f9). This is more intuitive.
Improve matplotlib-proplot colormap translation by converting matplotlib.colors.ListedColormap
to proplot.colors.DiscreteColormap
only if it has fewer than rc['cmap.listedthresh']
levels (@ade787f9). This is critical in case users import cmaps from other projects.
Permit constructing property cycles with Cycle
by passing color
as keyword argument (@86a50eb2). This is matplotlib-like workflow.
Permit disabling property cycling with e.g. cycle=False
, cycle='none'
, or cycle=()
, and re-enabling the default with cycle=True
(@86a50eb2).
Override set_prop_cycle
to pass the input arguments through Cycle
(@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']
, and rc['gridminor.style']
for the respective linewidth
and linestyle
settings (@a50d5264)
Permit “registering stuff” by passing files or objects to register_cmaps
, register_cycles
, register_colors
, and register_fonts
rather than forcing users to use the .proplot
folder (@ad999e95).
Support case insensitivity when calling matplotlib’s unregister_cmap
by improving ColormapDatabase
so it derives from a MutableMapping
rather than dict
(@ade787f9).
Add public changed
property to display a dictionary of settings changed from proplot defaults (@41b5e400).
Add public user_file
and user_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
and rc_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']
and rc['tick.labelpad']
as aliases for rc['grid.pad']
and rc['tick.pad']
(@a50d5264).
Add line
and linex
command aliases for plot
and plotx
(@6382cf91). This is more intuitive.
Add stepx
and stemx
commands analogous to plotx
, and add histh
, boxploth
(shorthand boxh
), and violinploth
(shorthand violinh
) commands analogous to barh
(@6382cf91).
Let 1D PlotAxes
commands iterate over columns of 2D x and y coordinate arrays instead of only 2D y coordinate arrays (@6382cf91.)
Support expanded and consistent artist synonyms throughout plotting overrides, e.g. ec
for edgecolor
, lw
for linewidth
, fc
and fillcolor
for facecolor
(@6382cf91). This is a superset of matplotlib.
Support passing positional fifth-argument colors to barbs
and quiver
, just like scatter
(@6382cf91). This was previously not possible.
Support automatic labels for tricontour
and tripcolor
plots alongside the more common contour
and pcolor
. (@6382cf91).
Add rasterize
keyword to colorbar
so that colorbar solids rasterization can be turned on (proplot turns off by default) (@6382cf91).
Add edgefix
keyword to colorbar
to control colorbar-solid edges and use shared _fix_edges
function (@6382cf91).
Add location
keyword as alternative to loc
for legend and colorbar funcs (@5cb839fd).
Add alphabetize
keyword to legend
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']
and rc['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 shade groups.
Silently ignore non-artist and non-container legend
input – e.g., ignore the bins and values returned by hist
(@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 for h1
but uses the artist label for h2
(@6382cf91).
Interpret all native matplotlib legend
spacing arguments (e.g., borderpad
and columnspacing
) with units
(@6382cf91).
Control edge width for legend frames with ew
or edgewidth
rather than lw
and linewidth
to avoid conflict with feature that permits modifying legend handle properties (@6382cf91).
Make proplot.axes.Axes.colorbar
capture matplotlib-native format
keyword as alias for formatter
and ticklabels
(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 specific show_cmaps
, show_cycles
, and show_colors
categories from the tables (@c45d5fa1).
Allow case-insensitive specification of show_cmaps
, show_cycles
, and show_colors
categories and never ignore input colormaps even if they match an ignored name like 'jet'
(@c45d5fa1).
Support restricting cartopy bounds in cartopy 0.19 by leveraging the ylim
Gridliner
property (@e190b66c).
Add xlabelpad
, ylabelpad
, xticklabelpad
, yticklabelpad
keywords to format
and read and apply changed rc['axes.labelpad']
(@e7d86b8f).
Add support for “minor” radial and azimuthal gridlines in proplot.axes.PolarAxes.format
, controlled with keywords like rminorlocator
, and thetaminorlocator
(@59c85f0e).
Add thetagrid
, rgrid
, thetagridminor
, and rgridminor
keys to proplot.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
, and bottomlabels_kw
to proplot.axes.Axes.format
for arbitrarily modifying label text objects – consistent with xlabel_kw
and ylabel_kw
used for proplot.axes.CartesianAxes.format
(@6382cf91).
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 calling set_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 with proplot.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 with titleabove=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 (@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
ignores interp
when selecting DiscreteNorm
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 spine bounds
(@e7d86b8f).
Include children of key
when triggering complex synced settings (e.g., now we trigger application of rc['tick.widthratio']
when either rc['tick.width']
or rc['meta.width']
are changed) (@5626bc88).
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 “panel” tracking and translation of physical spacing units directly on the GridSpec
instead of cumbersome hidden methods in Figure
(@20502345).
Validate all setting assignments to Configurator
using a new rc_proplot
dictionary, analogous to rcParams
(GH#109, @5626bc88). This helps avoid mysterious delayed bugs.
Move text
, legend
, and colorbar
overrides to base Axes
class separate from PlotAxes
(@6382cf91).
Automatically redirect all internal plotting calls to native matplotlib methods (@6382cf91). This significantly improves stability.
Move register_colors
internals from config.py
to colors.py
by breaking up into smaller functions (@ad999e95).
Move _version
to a separate dependencies.py
file and allow more versatile comparison operations (@8806631d).
Efficiently impose GeoAxes
defaults latlon=True
and transform=PlateCarree()
in 90% fewer lines by looping over funcs.
Move all plotting wrapper documentation to dedicated methods and remove references to wrappers in User Guide and Getting Started.
Embed proplot.figure.Figure
documentation inside proplot.ui.subplots
instead of just referencing it.
Embed proplot.axes.Axes.format
documentation inside format
documentation for subclasses instead of just referencing it.
Document the relative font size scalings with a table in text
(@6382cf91).
Deprecate scattershot Figure
immutable/documented properties (@51967ce3). These properties were just for documentation.
Remove ancient deprecated getters and setters for sharex
, spanx
, etc. once used with figure objects (@51967ce3). These properties were just for introspection, did not add any functionality.
Rename RcConfigurator
to Configurator
(@5626bc88). Previous name was redundant and needlessly verbose (the c
in rc
already stands for “configuration”…). This class is public just for documentation – was not directly used by users.
Rename Axes3D
to ThreeAxes
so that class name fits more nicely amongst other class names (@30a112bd).
Make CartopyAxes
and BasemapAxes
private and remove the documentation (@25e759b0). These classes are just for internal implementation of different cartographic “backends” – behavior of public methods is the same for both. Instead just document proplot.axes.GeoAxes
.
Rename SciVisColor colormaps from Blue1
, Blue2
, etc. to plurals Blues1
, 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 like Blues
, Reds
, etc.
Shuffle various SciVisColor colormap names to make them consistent/succinct. Make Browns1
the most colorful/vibrant one, just like Greens1
and Blues1
; split up the RedPurple
maps into Reds
and Purples
; and add the Yellows
category from the Oranges
maps (@8be0473f). Requesting the old names (case-sensitive) redirects to the new names (@3f0794d0).
Add rc['image.discrete']
options and discrete
keyword for toggling DiscreteNorm
application, and disable by default for imshow
, matshow
, spy
, hexbin
, and hist2d
plots (GH#233, @5a7e05e4). Also make hexbin
and hist2d
behavior with discrete=True
more sane by using maximum possible counts for autoscaling, and change DiscreteNorm
argument extend
to more intuitive name unique
.
Rename rc['subplots.pad']
and rc['subplots.axpad']
to more intuitive rc['subplots.outerpad']
and rc['subplots.innerpad']
(@3c7a33a8). Also rename Figure
keywords.
Rename width
and height
subplots
keyword args to figwidth
and figheight
to avoid confusion with refwidth
/refheight
(@12d01996). Will accept old keyword args without warning since they are used heavily.
Rename aspect
, axwidth
, and axheight
keyword args to more intuitive refaspect
, refwidth
, and refheight
(@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 to rc['title.above']
(@9ceacb7b). Example usage: ax.format(title='Title', titleabove=True)
.
Rename the proplot.colors.PerceptuallyUniformColormap.from_color
keywords shade
, fade
to luminance
, saturation
keyword (@3d8e7dd0). These can also be passed to Colormap
when it is called with positional arguments.
Rename seldom-used Figure
argument fallback_to_cm
to more understandable mathtext_fallback
(GH#251).
legend_extras
no longer returns the background patch generated for centered-row legends (GH#254). This is consistent with colorbar_extras
not returning background patches generated for inset colorbars. Until proplot adds new subclasses, it makes more sense if these functions only return Legend
and Colorbar
instances.
Use proplot TeX Gyre fonts with use_style
styles unless specified otherwise (@6d7444fe). Styles build on matplotlib defaults rather than proplot defaults for all other settings.
Change default rc['savefig.transparent']
back to False
(GH#252). Dubious justification for True
in the first place, and makes default PNG proplot figures unreadable wherever “dark mode” is enabled.
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)
When using medians=True
or means=True
with indicate_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).
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 and rc['image.inbounds']
setting to control this.
Use Artist
labels for the default list-of-artist colorbar tick labels if values
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.
Use “sticky” edges in x-direction for lines drawn with plot()
and in y-direction for lines drawn with plotx()
(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 to fill_between
(GH#166).
If available, use rc['pcolormesh.snap']
to repair overlap in transparent colorbar solids rather than manual-blending workaround (@c9f59e49).
Add the remaining commonly-used backend-related pyplot
functions ion
, ioff
, isinteractive
, and switch_backend
to the top-level proplot
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
, and equal
options to still use automatic spacing but force the tight layout algorithm to make spacings equal (GH#215, GH#64) by Zachary Moon.
Allow calling proplot.colors.PerceptuallyUniformColormap.from_hsl
by passing hue
, saturation
, or luminance
to Colormap
without any positional arguments (@3d8e7dd0).
Allow passing alpha
, luminance
, saturation
to Colormap
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
for luminance
, 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 to scale_saturation
and scale_luminance
(@67488bb1).
Add the to_hex
function and make all color-manipulation funcs return HEX strings by default (@67488bb1). Otherwise scatter
throws warnings.
Use 90
as the default luminance
when creating monochromatic colormaps with to_listed
set to True
(as when Cycle
calls Colormap
; @3d8e7dd0).
Add plotx
and scatterx
commands that interpret plotting args as (y, x)
rather than (x, y)
, analogous to areax
(GH#258).
Add support for indicate_error
horizontal error bars and shading for horizontal plotting commands barh
, plotx
, and scatterx
(GH#258).
Add support for ax.plot_command('x_key', 'y_key', data=dataset)
for virtually all plotting commands using standardize_1d
and standardize_2d
(GH#258). This was an existing plot
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 to bar_extras
to make width
argument absolute (GH#258). Remains False
by default.
Add support for “stacked” plots to vlines
and hlines
(GH#258).
Add stack
as alternative to stacked
for bar and area plots (@4e30f415). Imperative keywords are better.
Allow passing e.g. barstds=3
or barpctiles=90
to request error bars denoting +/-3 standard deviations and 5-95 percentile range (@4e30f415).
Add singular indicate_error
keywords barstd
, barpctile
, etc. as alternatives to barstds
, barpctiles
, etc. (@81151a58). Also prefer them in the documentation.
Permit different colors for boxplot
and violinplot
using color lists (GH#217, GH#218) by Mickaël Lalande. Also allow passing other args as lists (@4e30f415).
Allow passing means=True
to boxplot
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) to boxplot_wrapper
(@4e30f415).
Allow updating vlines
and hlines
styling with singular color
and linestyle
and all of their aliases (GH#258).
Allow updating axes fonts that use scalings like 'small'
and 'large'
by passing fontsize=N
to format
(GH#212).
Add titlebbox
and abcbbox
as alternatives to titleborder
and abcborder
for “inner” titles and a-b-c labels (GH#240) by Pratiman Patel. Borders are still used by default.
Allow putting title
and abc
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 param rc['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 to format
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. in Cycle
calls (@3d8e7dd0).
Add queue
keyword to colorbar
and legend
to support workflow where users successively add handles to location (GH#254).
Add nozero
keyword arg to apply_cmap
to remove the zero contour from automatically generated levels (@10e0f13b). Example usage: ax.contour(x, y, z, nozero=True)
.
Add positive
and negative
keyword args to apply_cmap
for requesting automatically-generated all-positive or all-negative levels (@335d58f4). Example usage: ax.contourf(x, y, z, positive=True)
.
Add rotation
keyword to colorbar_wrapper
for rotating colorbar tick labels, like xrotation
and yrotation
(@2d835f20).
Add tickdir
and tickdirection
keywords to colorbar_wrapper
for controlling tick style, like xtickdir
and ytickdir
(@f377f090).
Allow specifying labels for auto-generated legends using a 'labels'
key in a legend_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).
Add suffix '_copy'
to colormaps converted with to_listed
and to_linear_segmented
to avoid accidental overwriting (@91998e93).
Add xmin
, xmax
, ymin
, and ymax
keyword args to format
as alternatives to xlim
and ylim
(@ae0719b7). Example usage: ax.format(xmin=0)
as opposed to ax.format(xlim=(0, None))
.
Allow passing full “side” names to lonlabels
and latlabels
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 calling matplotlib.axes.Axes.fill
on CartopyAxes
(GH#193). This is more consistent with rest of package.
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 to colorbar()
(@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
and quiver
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'
for scatter
colorbars (GH#206).
Fix issue where hexbin
ignores vmin
and vmax
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 pass color
rather than facecolor
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
with xarray.DataArray
or pandas.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 in show_cycles
(@94ffc1dc, @4a7a3c79).
Fix issue where proplot ignores set_under
and set_over
values when translating matplotlib colormap classes to proplot subclasses (GH#190).
Fix issue where DiscreteNorm
does not account for set_under
and set_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 with legend=True
fail (GH#254, GH#198).
Fix unnecessary restriction where users can only draw <2 “alt” axes and clean up the alt[xy]
and dual[xy]
internals (GH#226).
Fix matplotlib bug where altx
and alty
reset the minor locator of the shared axis to AutoMinorLocator
even if the axis scale is 'log'
(@2f64361d).
Fix issue where axis coordinates are incorrect when violinplot
or boxplot
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 where numpy.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. Otherwise ax.format()
calls inside context blocks can be overwritten with the default rc values in subsequent ax.format()
calls (@8005fcc1).
Refactor massive standardize_(1d|2d)
and (cmap|cycle)_changer
wrappers to break things into manageable chunks (GH#258, @6af22567, @d3352720).
Refactor colorbar
and legend
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.
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”.
Remove v0.6.0 renamed classes (e.g. ProjAxes
) from top-level namespace (@442e6aa6). These classes were public just for documentation.
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’s makeMappingArray
(@66ae574b).
Rename public/documented funcs cmap_changer
and cycle_changer
to apply_cmap
and apply_cycle
(@86f7699a).
Change autoformat
from a Figure
keyword argument into the rc.autoformat
rc setting (@3a7e5a7c).
Combine shading and lines when drawing on-the-fly legends with indicate_error
shading using tuple of fill_between
, plot
handles, and have shadelabel
and fadelabel
instead create separate entries only when passed (GH#187).
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 set rc['patch.linewidth']
to 0.6
to match proplot’s default line width for lines, axes edges, and hatches (GH#186).
Fix issue where proplot import fails if cartopy is not installed (@e29d49e8).
Add autoformat
as standardize_1d
and standardize_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 to altx
and alty
, including [x|y]lim
(@734f5940).
Pass string dual[x|y]
arguments like 'inverse'
through the Scale
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 up rc['title.pad']
for “inner” titles (@7de1c1f4).
Make custom formatters like SciFormatter
classes rather than functions returning FuncFormatter
(@7591f474).
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 when autoformat=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 to bar(..., width=width)
now being relative to the x step size (@e32ed0bc).
Fix bug where savefig
receives Path
instead of string (GH#176).
Various improvements the API docstrings.
Improve overall website style (@89d6f5bd).
Make website “dark mode” darker (@979c8188).
Prevent website from flashing light mode when changing pages (@75e4d6a1).
Add documentation for proplot.figure.Figure.save
method (@da25266a).
Remove Figure
setters like set_sharex
, replace with read-only properties (@7b455008). The getters were only for object introspection. The setters never worked properly/were unused in examples.
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).
Remove the geoaxes
and geogrid
rc settings (GH#168). Gridline settings are now controlled with grid
.
Remove the lonstep
and latstep
settings – we now use LongitudeLocator
and LatitudeLocator
to select “nice” gridline locations even when zoomed in (GH#168)
Rename the cartopy.global
rc setting to cartopy.autoextent
(@7c0f118a) and add an autoextent
keyword (@23db0498).
Rename several “error indication” keyword arguments and rename add_errorbars
wrapper to indicate_error
(GH#166, @d8c50a8d).
Remove 'rgbcycle'
setting (GH#166, @6653b7f0). This was complicated to implement/did not add critical functionality.
Deprecate support for “parametric” plots inside plot
, instead use parametric
(@64210bce).
Change units
units
keyword argument to more natural dest
(@62903b48).
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).
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 to MonoCycle
to more accurately reflect colormap design origins (GH#149, @d67e45bf).
Rename MidpointNorm
to more intuitive DivergingNorm
, and make “fair” color scaling the default behavior (@2f549c9).
Rename BinNorm
to DiscreteNorm
and fix issues with diverging norm color scaling (GH#149, @98a976f1).
Rename concatenate
to append
, updated
to copy
, truncated
to truncate
, and punched
to cut
(GH#149, @e1a08930). The old method names remain with a deprecation warning.
Increase default rc['savefig.dpi']
to 1200, matching recommendations from academic journals (GH#167, @c00e7314). Also add detailed discussion to user guide.
Stop reversing the 'Spectral'
colormap when proplot is imported (GH#149, @ce4ef6a0).
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).
Make default areax
and areay
bounds “sticky”, similar to histograms and barplots (GH#166). Also make vlines
and hlines
perpendicular bounds sticky if either the min/max coordinates are scalar.
Hide bad colormaps like 'jet'
from the show_cmaps
table instead of deleting them outright, just like CSS4 colors (GH#149, @ce4ef6a0).
Permit drawing “outer” axes and figure legends without explicitly passing handles (GH#149, @a69b48eb). Figure legends use the handles from all axes.
Use _LonAxis
and _LatAxis
dummy axes with custom LongitudeLocator
and LatitudeLocator
to control geographic gridlines (GH#168). This improves accuracy of automatic gridline generation.
Add 'dmslat'
and 'dmslon'
as formatters for cartopy projections, along with dms
format
keyword argument. This labels points with degrees/minutes/seconds when appropriate (GH#168).
Support “minor” geographic gridlines with the gridminor
keyword arg and existing gridminor
settings (GH#168). Default locator used for minor gridlines is AutoMinorLocator
.
Add loninline
, latinline
, and rotatelabels
keywords for controlling cartopy gridliner behavior (GH#168).
Support cartopy 0.18 locators, formatters, deprecations, and new labelling features (GH#158).
Add rc['geogrid.labelpad']
and rc['geogrid.rotatelabels']
settings for cartopy gridline labels (GH#158).
Add SigFigFormatter
(GH#149, @da6105d2) and SciFormatter
(GH#175, @c43f7f91) axis formatters.
Support more AutoFormatter
features on SimpleFormatter
(GH#152, @6decf962).
Enable passing callables to Formatter
to create a FuncFormatter
instance.
Add proplot.config.RcConfigurator.save
and proplot.config.RcConfigurator.from_file
methods (GH#167, @e6dd8314).
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
and to_xyza
, plus set_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
and show_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 ensure indicate_error
preserves metadata.
Wrap pcolorfast
just like pcolor
and pcolormesh
are wrapped (GH#166, @50a262dd).
Add negpos
feature to bar_wrapper
and new rc.negcolor
and rc.poscolor
rc keyword arguments (GH#166, @ab4d6746).
Support vlines
and hlines
flexible arguments and add negpos
feature (GH#166, @1c53e947, @e42ee913).
Support building a colormap and DiscreteNorm
inside scatter
, just like contourf
and pcolormesh
(GH#162).
Permit special colormap normalization and level scaling for colormap-colored contour plots, just like contourf (GH#149, @054cceb5).
Support drawing colorbars with descending levels when input levels
/values
are monotonically descending lists (GH#149, @10763146)
Add support for matplotlib stylesheets with use_style
function and style
rc param (GH#149, @edc6f3c9).
Make 'Grays'
and 'Greys'
synonyms for the same ColorBrewer colormap (GH#149, @da4ccb08).
Add to_listed
and to_linear_segmented
methods for handling conversions (GH#149, @e1a08930).
Permit merging mixed colormap types LinearSegmentedColormap
with PerceptuallyUniformColormap
(@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).
Support sampling LinearSegmentedColormap
into ListedColormap
inside of Colormap
rather than Cycle
(GH#84, @972956b1).
Add categories
keyword arg to show_cmaps
and show_cycles
(GH#149, @79be642d).
Draw show_colors
table as single figure with category labels, similar to show_cmaps
(GH#149, @c8ca2909).
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).
Publicly support “filling” axes with colorbars using loc='fill'
(GH#149, @057c9895).
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
to subplots
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).
Fix issue where Scientific colour maps not interpreted as cyclic, so end colors not standardized properly (@e10a3109).
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).
Call figure objects fig
instead of f
.
Major clean up of notebook examples (@f86542b5).
Major clean up wrappers
documentation (@9648c18f)
Fix dead “See Also” links (@d32c6506).
Use “Other parameters” tables more often (@d32c6506).
Remove the public objects normalizers
, locators
, formatters
, cartopy_projs
, basemap_kwargs
, cmaps
, colors
, and fonts
(GH#149). These objects were public just for introspection/documentation.
Rename rc_configurator
and subplot_grid
to RcConfigurator
and SubplotsContainer
to match capitalized class naming convention (GH#149). These classes are public just for documentation.
Rename XYAxes
to CartesianAxes
, GeoAxes
to CartopyAxes
, and ProjAxes
to GeoAxes
(GH#149, @4a6a0e34). These classes are public just for documentation.
Rename ColorDict
to ColorDatabase
, CmapDict
to ColormapDatabase
(GH#149, @9d7fd3e0). These classes are public just for documentation.
Rename abc.linewidth
and title.linewidth
to borderwidth
(@54eb4bee).
Rename text_wrapper
linewidth
and invert
to borderwidth
and borderinvert
(@54eb4bee).
Add back Fabio Crameri’s scientific colour maps (GH#116).
Permit both e.g. locator
and xlocator
as keyword arguments to altx
, etc. (@57fab860).
Permit descending BinNorm
and LinearSegmentedNorm
levels (GH#119).
Permit overriding the font weight, style, and stretch in the show_fonts
table (@e8b9ee38).
Permit hiding “unknown” colormaps and color cycles in the show_cmaps
and show_cycles
tables (@cb206f19).
Fix issue where show_cmaps
and show_cycles
colormap names were messed up (@13045599)
Fix issue where show_cmaps
and show_cycles
did not return figure instance (@98209e87).
Fix issue where user values
passed to colorbar_wrapper
were sometimes ignored (@fd4f8d5f).
Permit passing lists of colors to manually shade line contours and filled contours in cmap_changer
.
Prevent formatting rightmost meridian label as 1e-10
on cartopy map projections (@37fdd1eb).
Support CF-time axes by fixing bug in standardize_1d
and standardize_2d
(GH#103, GH#121).
Redirect to the “default” location when using legend=True
and colorbar=True
to generate on-the-fly legends and colorbars (@c2c5c58d). This feature was accidentally removed.
Let colorbar_wrapper
accept lists of colors (@e5f11591). This feature was accidentally removed.
Remove various unused keyword arguments (@33654a42).
Major improvements to the API controlling axes titles and a-b-c labels (@1ef7e65e).
Always use full names left
, right
, top
, and bottom
instead of l
, r
, b
, and t
, for clarity (@1ef7e65e).
Improve GrayCycle
colormap, is now much shorter and built from reflected Fabio GrayC
colormaps (@5b2c7eb7).
Permit comments at the head of colormap and color files (@0ffc1d15).
Make parametric
match plot
autoscaling behavior (@ecdcba82).
Use colorbar
instead of imshow
for show_cmaps
and show_cycles
displays (GH#107).
Remove ipython_autoreload
, ipython_autosave
, and ipython_matplotlib
(GH#112, GH#113). Move inline backend configuration to a hidden method that gets called whenever the rc_configurator
is initalized.
Add family
keyword arg to show_fonts
(GH#106).
Package the TeX Gyre font series with proplot (GH#106). Remove a couple other fonts.
Put the TeX Gyre fonts at the head of the serif, sans-serif, monospace, cursive, and fantasy rcParams
font family lists (GH#104, GH#106).
Fix issues with Fira Math weights unrecognized by matplotlib (GH#106).
Comments (lines starting with #
) are now permitted in all RGB and HEX style colormap and cycle files (GH#100).
Break down show_cycles
bars into categories, just like show_cmaps
(GH#100).
Fix issue where show_cmaps
and show_cycles
draw empty axes (GH#100).
Add back the default .proplorc file section to docs (GH#101). To do this, conf.py
auto-generates a file in _static
.
Add geogrid.color/linewidth/etc
and gridminor.color/linewidth/etc
props as children of grid.color/linewidth/etc
(GH#101).
Change the default .proplotrc
format from YAML to the .matplotlibrc
syntax (GH#101).
Various rc_configurator
improvements, remove outdated global variables (GH#101).
Better error handling when loading colormap/cycle files, and calls to Colormap
and Cycle
now raise errors while calls to register_cmaps
and register_cycles
still issue warnings (GH#100).
Rename basemap_defaults
to basemap_kwargs
and cartopy_projs
to cartopy_names
(@431a06ce).
Remove subplots.innerspace
, subplots.titlespace
, subplots.xlabspace
, and subplots.ylabspace
spacing arguments, automatically calculate default non-tight spacing using _get_space
based on current tick lengths, label sizes, etc.
Remove redundant use_fonts
, use rcParams['sans-serif']
precedence instead (GH#95).
dualx
and dualy
no longer accept “scale-spec” arguments. Must be a function, two functions, or an axis scale instance (GH#96).
Remove Axes
share[x|y]
, span[x|y]
, and align[x|y]
kwargs (GH#99). These settings are now always figure-wide.
Rename Cycle
samples
to N
, rename show_colors
nbreak
to nhues
(GH#98).
Add from_file
static methods (GH#98). You can now load files by passing a name to Colormap
.
Add TeX Gyre Heros as open source Helvetica-alternative; this is the new default font. Add Fira Math as DejaVu Sans-alternative; has complete set of math characters (GH#95).
Add xlinewidth
, ylinewidth
, xgridcolor
, ygridcolor
keyword args to format
(GH#95).
Add getters and setters for various Figure
settings like share[x|y]
, span[x|y]
, and align[x|y]
(GH#99).
Let twinx
, twiny
, altx
, and alty
accept format
keyword args just like dualx
and dualy
(GH#99).
Add Figure
fallback_to_cm
kwarg. This is used by show_fonts
to show dummy glyphs to clearly illustrate when fonts are missing characters, but preserve graceful fallback for user.
Improve Proj
constructor function. It now accepts Projection
and Basemap
instances, just like other constructor functions, and returns only the projection instance (GH#92).
rc
__getitem__
always returns the setting. To get context block-restricted settings, you must explicitly pass context=True
to get
, fill
, or category
(GH#91).
Fix issues with dualx
and dualy
with non-linear parent scales (GH#96).
Ignore TTC fonts because they cannot be saved in EPS/PDF figures (GH#94 and GH#95).
Do not try to use Helvetica Neue because “thin” font style is read as regular (GH#94 and GH#95).
Use the imperative mood for docstring summaries (GH#92).
Fix show_cycles
bug (GH#90) and show cycles using colorbars rather than lines (GH#98).
Define rc
default values with inline dictionaries rather than with a default .proplotrc
file, change the auto-generated user .proplotrc
(GH#91).
Remove useless panel_kw
keyword arg from legend_wrapper
and colorbar_wrapper
(GH#91). Remove wflush
, hflush
, and flush
keyword args from subplots
that should have been removed long ago.
Fix issue where custom fonts were not synced (@a1b47b4c).
Fix issue with latest versions of matplotlib where %matplotlib inline
fails silently so the backend is not instantiated (@cc39dc56).
Remove 'Moisture'
colormap (@cf8952b1).
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).
Add brute force workaround for saving colormaps with callable segmentdata (@8201a806).
Fix issue with latest versions of matplotlib where %matplotlib inline
fails silently so the backend is not instantiated (@cc39dc56).
Fix shifted
when shift
is not 180
(@e2e2b2c7).
Save the cyclic
and gamma
attributes in JSON files too (@8201a806).
Cleanup notebooks, especially the colormaps demo (e.g. @952d4cb3).
Fix issue where AutoFormatter
logarithmic scale points are incorrect (@9b164733).
Remove prefix
, suffix
, and negpos
keyword args from SimpleFormatter
, remove precision
keyword arg from AutoFormatter
(@8520e363).
Make 'deglat'
, 'deglon'
, 'lat'
, 'lon'
, and 'deg'
instances of AutoFormatter
instead of SimpleFormatter
(@8520e363). The latter should just be used for contours.
Fix issue where twin axes are drawn twice (@56145122).
Improve CutoffScale
algorithm, permit arbitrary cutoffs (GH#83).
Rename ColorCacheDict
to ColorDict
(@aee7d1be).
Rename lower-case colors
to Colors
(@aee7d1be)
Remove fonts_system
and fonts_proplot
, rename colordict
to colors
, make top-level variables more robust (@861583f8).
Add params table for show_fonts
(@861583f8).
Improve register_colors
internals.
Fix issue with overlapping gridlines using monkey patches on gridliner instances (@8960ebdc).
Fix issue where auto colorbar labels are not applied when globe=True
(@ecb3c899).
More sensible zorder for gridlines (@90d94e55).
Fix issue where customized super title settings are overridden when new axes are created (@35cb21f2).
Organize ipython notebook documentation (@35cb21f2).
Major cleanup of the colorbar_wrapper
source code, handle minor ticks using the builtin matplotlib API just like major ticks (@b9976220).
Rename axes_grid
to subplot_grid
(@ac14e9dd).
Fix shared x and y axis bugs (@ac14e9dd).
Make notebook examples PEP8 compliant (@97f5ffd4). Much more readable now.
Rename autoreload_setup
, autosave_setup
, and matplotlib_setup
to ipython_autoreload
, ipython_autosave
, and ipython_matplotlib
, respectively (@84e80c1e).
Remove the nbsetup
rc setting in favor of separate autosave
, autoreload
, and matplotlib
settings for triggering the respective %
magic commands. (@3a622887; nbsetup
is still accepted but no longer documented).
Rename the format
rc setting in favor of the inlinefmt
setting (@3a622887; format
is still accepted but no longer documented).
Rename FlexibleGridSpec
and FlexibleSubplotSpec
to GridSpec
and SubplotSpec
(@3a622887; until GH#110 is merged it is impossible to use these manually, so this won’t bother anyone).
Support manual resizing for all backends, including osx
and qt
(@3a622887).
Disable automatic resizing for the nbAgg
interactive inline backend. Found no suitable workaround (@3a622887).
Organize the rc
documentation and the default .proplotrc
file (@3a622887).
Rename rcParamsCustom
to rcParamsLong
(@3a622887; this is inaccessible to the user).
When calling fig.canvas.print_figure()
on a stale figure, call fig.canvas.draw()
first. May be overkill for savefig
but critical for correctly displaying already-drawn notebook figures.
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.
The first version released on PyPi.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4