What’s new?¶
The following lists past and future (where dates are replaced with ##) changes to
ProPlot. Authors are shown next to each change. Where not indicated, Luke Davis was
the author.
See the author page for a list of contributors, and see the contribution guide if you are interested in submitting your own changes.
ProPlot v1.0.0 (2022-##-##)¶
This will be published when some major refactoring tasks are completed, and deprecation warnings will be removed. See GH#89, GH#109, GH#110, and GH#111.
ProPlot v0.8.0 (2021-##-##)¶
Deprecated
Features
All
formatfeatures are now implemented with individual setters, like in matplotlib, but we still encourage using the bulksetmethod through documentation examples and by populating thesetdocstring (so valid arguments are no longer implicit).Users can now use
figurewithadd_subplotas an alternative to the recommendedsubplotsworkflow (GH#110). This is a major improvement!GridSpecnow accepts physical units, rather than havingsubplotshandle the units (GH#110).Allow “hanging” twin x and y axes as members of the
EdgeStackcontainer. Arbitrarily many siblings are now permitted.Use
GeometrySolverfor calculating various automatic layout stuff instead of having 1000 hiddenFiguremethods (GH#110).Use
EdgeStackclass for handling stacks of colorbars, legends, and text (GH#110).
Internals
Add comprehensive unit tests and migrate from Travis CI to Github Actions.
Validate assignments to
RcConfiguratorand turn the configurator into a monkey patch ofrcParams(GH#109).Implement and document plotting wrappers (e.g.
standardize_1d) on the individual methods themselves (e.g.plot; GH#111). This is much easier for users.Handle all projection keyword arguments in
add_subplotinstead ofsubplots(GH#110).Panels, colorbars, and legends are now members of
EdgeStackstacks rather than getting inserted directly into the mainGridSpec(GH#110).
ProPlot v0.7.0 (2021-07-11)¶
Deprecated
Remove v0.6.0 renamed classes (e.g.
ProjAxes) from top-level namespace (@442e6aa6). These were kept available just for documentation. The renamed functionsshade,saturate, andinline_backend_fmtwill be available until v0.8.Change default
rc[‘savefig.transparent’]back toFalse(GH#252). Dubious justification forTruein the first place, and makes default PNG proplot figures unreadable wherever “dark mode” is enabled.Rename SciVisColor colormaps from
Blue1,Blue2, etc. to pluralsBlues1,Blues2, etc. to avoid name conflict with open-color colors (@8be0473f). Requesting the old names (case-sensitive) redirects to the new names (@3f0794d0). This permits making monochromatic open-color maps with e.g.plot.Colormap('blue9')and feels more consistent with ColorBrewer convention of using plurals likeBlues,Reds, etc.Shuffle various SciVisColor colormap names to make them consistent/succinct. Make
Browns1the most colorful/vibrant one, just likeGreens1andBlues1; split up theRedPurplemaps intoRedsandPurples; and add theYellowscategory from theOrangesmaps (@8be0473f). Requesting the old names (case-sensitive) redirects to the new names (@3f0794d0).Add
rc[‘image.discrete’]options anddiscretekeyword for togglingDiscreteNormapplication, and disable by default forimshow,matshow,spy,hexbin, andhist2dplots (GH#233, @5a7e05e4). Also makehexbinandhist2dbehavior withdiscrete=Truemore sane by using maximum possible counts for autoscaling, and changeDiscreteNormargumentextendto more intuitive nameunique.Rename
rc[‘subplots.pad’]andrc[‘subplots.axpad’]to more intuitiverc[‘subplots.outerpad’]andrc[‘subplots.innerpad’](@3c7a33a8). Also renameFigurekeywords.Rename
widthandheightsubplotskeyword args tofigwidthandfigheightto avoid confusion withrefwidth/refheight(@12d01996). Will accept old keyword args without warning since they are used heavily.Rename
aspect,axwidth, andaxheightkeyword args to more intuitiverefaspect,refwidth, andrefheight(@12d01996). Will accept old keyword args without warning since they are used heavily.Rename
abovetopkeyword for moving title/abc labels above top panels, colorbars, and legends torc[‘title.above’](@9ceacb7b). Example usage:ax.format(title='Title', titleabove=True).Rename the
proplot.colors.PerceptuallyUniformColormap.from_colorkeywordshadetoluminance, and add thesaturationkeyword (@3d8e7dd0). These can also be passed toColormapwhen it is called with positional arguments.Rename seldom-used
Figureargumentfallback_to_cmto more understandablemathtext_fallback(GH#251).Reduce default
rc[‘savefig.dpi’]to 1000 (@bfda9c98). Nature recommends 1000, Science recommends “more than 300”, PNAS recommends 1000–1200. So 1000 is fine.Increase default
rc[‘colorbar.insetpad’]to avoid recurring issue where ticklabels run close to the background patch (@f5435976)Use proplot TeX Gyre fonts with
use_stylestyles unless specified otherwise (@6d7444fe). Styles otherwise build on matplotlib defaults.When using
medians=Trueormeans=Truewithindicate_errorplot simple error bars by default instead of bars and “boxes” (@4e30f415). Only plot “boxes” with central “markers” by default for violin plots (@13b45ccd).legend_extrasno longer returns the background patch generated for centered-row legends (GH#254). This is consistent withcolorbar_extrasnot returning background patches generated for inset colorbars. Until proplot adds new subclasses, it makes more sense if these functions only returnLegendandColorbarinstances.
Features
Add the remaining commonly-used backend-related
pyplotfunctionsion,ioff,isinteractive, andswitch_backendto the top-levelproplotnamespace (@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
proplotrcfiles in addition to “hidden”.proplotrcfiles with leading dot (@8a989aca).Add minimal support for “3D”
Axes3Daxes (GH#249). Example usage:fig.subplots(proj='3d').Add
wequal,hequal, andequaloptions to still use automatic spacing but force the tight layout algorithm to make spacings equal (GH#215, GH#64) by Zachary Moon.Determine colormap levels using only in-bounds data if the x or y axis limits were explicitly set (GH#209). Add
inboundsapply_cmapkeyword andrc[‘image.inbounds’]setting to control this.Allow calling
proplot.colors.PerceptuallyUniformColormap.from_hslby passinghue,saturation, orluminancetoColormapwithout any positional arguments (@3d8e7dd0).Allow passing
alpha,luminance,saturationtoColormapas lists to be applied to each component cmap (@3d8e7dd0).Add convenient shorthands for channel references throughout colormap functions – e.g.
hfor hue,lforluminance, etc. (@3d8e7dd0).Add the
'Flare'and'Crest'seaborn colormaps (@14bc16c9). These are seaborn’s color cycle-friendly alternatives to existing maps.Add the
shift_huefunction analogous toscale_saturationandscale_luminance(@67488bb1).Add the
to_hexfunction and make all color-manipulation funcs return HEX strings by default (@67488bb1). Otherwisescatterthrows warnings.Use
90as the defaultluminancewhen creating monochromatic colormaps withto_listedset toTrue(as whenCyclecallsColormap; @3d8e7dd0).Add
plotxandscatterxcommands that interpret plotting args as(y, x)rather than(x, y), analogous toareax(GH#258).Add support for
indicate_errorhorizontal error bars and shading for horizontal plotting commandsbarh,plotx, andscatterx(GH#258).Add support for
ax.plot_command('x_key', 'y_key', data=dataset)for virtually all plotting commands usingstandardize_1dandstandardize_2d(GH#258). This was an existingplotfeature.Add support for the plotting style
ax.plot(x1, y1, fmt1, x2, y2, fmt2, ...)as allowed by matplotlib (GH#258).Add
absolute_widthkeyword tobar_extrasto makewidthargument absolute (GH#258). RemainsFalseby default.Use “sticky” edges in x-direction for lines drawn with
plot()and in y-direction for lines drawn withplotx()(GH#258). This eliminates padding along the “dependent” axis when limits are not specified, similar to histograms and barplots and matching a feature we previously added tofill_between(GH#166).Add support for “stacked” plots to
vlinesandhlines(GH#258).Add
stackas alternative tostackedfor bar and area plots (@4e30f415). Imperative keywords are better.Allow passing e.g.
barstds=3orbarpctiles=90to request error bars denoting +/-3 standard deviations and 5-95 percentile range (@4e30f415).Add singular
indicate_errorkeywordsbarstd,barpctile, etc. as alternatives tobarstds,barpctiles, etc. (@81151a58). Also prefer them in the documentation.Permit different colors for
boxplotandviolinplotusing color lists (GH#217, GH#218) by Mickaël Lalande. Also allow passing other args as lists (@4e30f415).Allow passing
means=Truetoboxplotto toggle mean line (@4e30f415).Allow setting the mean and median boxplot linestyle with
(mean|median)(ls|linestyle)keywords (@4e30f415).Automatically set
fill=Truewhen passing a fill color or color(s) toboxplot_wrapper(@4e30f415).Allow updating
vlinesandhlinesstyling with singularcolorandlinestyleand all of their aliases (GH#258).Allow updating axes fonts that use scalings like
'small'and'large'by passingfontsize=Ntoformat(GH#212).Add
titlebboxandabcbboxas alternatives totitleborderandabcborderfor “inner” titles and a-b-c labels (GH#240) by Pratiman Patel. Borders are still used by default.Allow putting
titleandabcin the same location – the title and label are simply offset away from ech other (GH#402214f9). Padding between them is controlled by the new paramrc[‘abc.titlepad’].Add new
rc[‘suptitle.pad’],rc[‘leftlabel.pad’],rc[‘toplabel.pad’],rc[‘bottomlabel.pad’],rc[‘rightlabel.pad’]settings to control padding used when aligning super labels (@402214f9). These can also be passed toformatand 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.borderpadwith'em'as default units rather than'pt'(@6d98fd44).Add
rc.basemapsetting 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. inCyclecalls (@3d8e7dd0).Add
queuekeyword tocolorbarandlegendto support workflow where users successively add handles to location (GH#254).Add
nozerokeyword arg toapply_cmapto remove the zero contour from automatically generated levels (@10e0f13b). Example usage:ax.contour(x, y, z, nozero=True).Add
positiveandnegativekeyword args toapply_cmapfor requesting automatically-generated all-positive or all-negative levels (@335d58f4). Example usage:ax.contourf(x, y, z, positive=True).Add
rotationkeyword tocolorbar_wrapperfor rotating colorbar tick labels, likexrotationandyrotation(@2d835f20).Add
tickdirandtickdirectionkeywords tocolorbar_wrapperfor controlling tick style, likextickdirandytickdir(@f377f090).Allow specifying labels for auto-generated legends using a
'labels'key in alegend_kwkeyword argument (@a11d1813).Replace legends drawn in the same location by default rather than drawing two legends on top of each other (GH#254).
Use
Artistlabels for the default list-of-artist colorbar tick labels ifvalueswas not passed – and if labels are non-numeric, rotate them 90 degrees for horizontal colorbars by default (@ed8e1314). Makes the choice between “traditional” legends and “colorbar-style” legends more seamless.Use same default-level generation algorithm for contour plots without colormaps as for all other colormap plots (@10e0f13b). Makes automatically-generated solid-color contours and colormap-style contours identical.
Add suffix
'_copy'to colormaps converted withto_listedandto_linear_segmentedto avoid accidental overwriting (@91998e93).If available, use
rc[‘pcolormesh.snap’]to repair overlap in transparent colorbar solids rather than manual-blending workaround (@c9f59e49).Add
xmin,xmax,ymin, andymaxkeyword args toformatas alternatives toxlimandylim(@ae0719b7). Example usage:ax.format(xmin=0)as opposed toax.format(xlim=(0, None)).Allow passing full “side” names to
lonlabelsandlatlabelsrather than abbreviations, e.g.'left'instead of'l'(@a5060f67). This is more consistent with rest of package.Set default transform to
ccrs.PlateCarreewhen callingmatplotlib.axes.Axes.fillonCartopyAxes(GH#193). This is more consistent with rest of package.
Bug fixes
Fix 3 fatal issues preventing proplot import and basic usage in matplotlib >= 3.4 (GH#251).
Fix deprecation warnings associated with matplotlib 3.4 refactoring of subplot classes (GH#251).
Fix deprecated reference to
rc.fallback_to_cmin matplotlib >= 3.3 (GH#251).Fix
IndexFormatterdeprecation warning in matplotlib >= 3.3 by replacing with proplot-local copy (GH#251).Fix deprecation warning in matplotlib >= 3.3 – add
extendas mappable attribute rather than passing it tocolorbar()(@a23e7043).Fix issue where figures with fixed-aspect axes don’t scale properly in matplotlib >= 3.3 (GH#210, GH#235).
Fix issue where “twin” (“alternate”) axes content always hidden beneath “parent” content due to adding as children (GH#223).
Fix issue where default layout in complex subplot grids with non-adjacent edges is incorrect (GH#221).
Fix issue where
apply_cyclefails to merge mean-uncertainty legend handles due to presence of placeholder labels (@4e30f415).Fix issue where
standardize_1dinappropriately infers legend entries from y-coordinate metadata rather than column metadata (@4e30f415).Fix issue where
barbandquivercannot accept 1D data arrays (GH#255).Fix issue where cannot set
rc.style = 'default'(GH#240) by Pratiman Patel.Fix issue where
get_legendreturns None even with legends present (GH#224).Fix issue where new child axes reset row/col label settings (@f32d9703).
Fix issue where
DataArraystring coordinates are not extracted from container before applying as tick labels (GH#214).Fix issue where cannot set
extendother than'neither'forscattercolorbars (GH#206).Fix issue where
hexbinignoresvminandvmaxkeywords (GH#250).Fix issue where parametric plot x axis is reversed (@3bde6c47).
Fix issue where e.g.
ax.area(x, 0, y2, negpos=Truehas positive colors below x-axis and negative above x-axis (GH#258).Fix issue where “negpos” plots ignore
edgecolorbecause they passcolorrather thanfacecolorto plotting commands.Fix issue where cannot have datetime labels on
areaplots (GH#255).Fix issue where default orientation of
barhvertical axis is reversed (@258).Fix issue where
histwithxarray.DataArrayorpandas.Dataframeinput 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=1is 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
heatmaperrors rather than warns (GH#238).Fix issue where
labels=Truewith no contours causes error (GH#238).Fix issue where
Cyclefails to register new names and fails to display inshow_cycles(@94ffc1dc, @4a7a3c79).Fix issue where proplot ignores
set_underandset_overvalues when translating matplotlib colormap classes to proplot subclasses (GH#190).Fix issue where
DiscreteNormdoes not account forset_underandset_overcolors 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.plotcalls withlegend=Truefail (GH#254, GH#198).Fix unnecessary restriction where users can only draw <2 “alt” axes and clean up the
alt[xy]anddual[xy]internals (GH#226).Fix matplotlib bug where
altxandaltyreset the minor locator of the shared axis toAutoMinorLocatoreven if the axis scale is'log'(@2f64361d).Fix issue where axis coordinates are incorrect when
violinplotorboxplotreceive non-DataFrame input (@b5c3ec4c).Fix issue where
indicate_errorcannot accept 1D error bounds (@ef2d72cd).Fix issue where
show_cmapscannot display reversed colormaps (@2dd51177).Fix issue where
'grays_r'translated to'greys'(@074c6aef).First reverse, then shift
cmap_r_scolormaps (@e5156294).Fix obscure
parametricbug wherenumpy.stacktries to make nested ragged arrays from parametric coords (@b16d56a8).Fix issue where where
SubplotSpec.get_active_rows_columnsreturned incorrect number of “active” rows and columns (@5cf20b84).For rc lookup with
context=True, use most restrictive search mode rather than least. Otherwiseax.format()calls inside context blocks can be overwritten with the default rc values in subsequentax.format()calls (@8005fcc1).
Internals
Refactor massive
standardize_(1d|2d)and(cmap|cycle)_changerwrappers to break things into manageable chunks (GH#258, @6af22567, @d3352720).Refactor
colorbarandlegendmethods 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_aliasprocessing.
Documentation
Finally use
ppltas the recommended abbreviation:import proplot as pplt.Major clean up of “Why ProPlot?” page and user guide pages.
Fix incomplete
cmap.from_filedocstrings (@54f1bc7c).Rename “Changelog” to “What’s New?” and list all contributors in “About the Authors”.
Rename public/documented funcs ending in
_wrapperto ending in_extrasto avoid implication they are the only funcs wrapping those commands (@d1e1e85b).Rename public/documented func
make_mapping_arrayto private function, following lead of matplotlib’smakeMappingArray(@66ae574b).Rename public/documented funcs
cmap_changerandcycle_changertoapply_cmapandapply_cycle(@86f7699a).
ProPlot v0.6.4 (2020-06-13)¶
Features
Change
autoformatfrom aFigurekeyword argument into therc.autoformatrc setting (@3a7e5a7c).Combine shading and lines when drawing on-the-fly legends with
indicate_errorshading using tuple offill_between,plothandles, and haveshadelabelandfadelabelinstead create separate entries only when passed (GH#187).
Bug fixes
Fix major issue where calling
legend()without any handles triggers error rather than using default handles (GH#188).Fix issue where on-the-fly colorbar labels were ignored (@a642eeed).
Stop overwriting existing axis labels when
autoformat=Trueand DataArrays or DataFrames passed to plotting command (@76c7c586).Support single-level contours with colormap colors (GH#182).
Support changing line width, line style, and color properties for barb, quiver, streamplot, matshow, spy, and hist2d plots (GH#177).
Use
rc[‘patch.linewidth’]for default bar edge width, stop setting default histogram plot linewidth to zero, and setrc[‘patch.linewidth’]to0.6to match proplot’s default line width for lines, axes edges, and hatches (GH#186).
ProPlot v0.6.3 (2020-06-02)¶
Bug fixes
Fix issue where proplot import fails if cartopy is not installed (@e29d49e8).
ProPlot v0.6.2 (2020-06-02)¶
Deprecated
Remove
Figuresetters likeset_sharex, replace with read-only properties (@7b455008). These did not work and did not add critical functionality.
Features
Add
autoformatasstandardize_1dandstandardize_2dkeyword 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
cutto expand the neutral zone of a diverging cmap (@94548d09).Add valid
formatarguments toaltxandalty, including[x|y]lim(@734f5940).Pass string
dual[x|y]arguments like'inverse'through theScaleconstructor (@413e1781).Add
'dms'locator and formatter, for degree-minute-second labels without cardinal direction indicators (@1b180cd2).Add “tau” formatter (@fc6a9752).
Restore default
rc[‘title.pad’]to matplotlib value, stop artificially bumping uprc[‘title.pad’]for “inner” titles (@7de1c1f4).Make custom formatters like
SciFormatterclasses rather than functions returningFuncFormatter(@7591f474).
Bug fixes
Various improvements to auto-figure sizing with Qt backend and when calling
print_figure(@db4e48d5, @82457347, @744d7d37).Suppress warning when
matplotlibrccontains non-style param (@4a0c7f10).Fix fatal
standardize_2derror whenautoformat=False(GH#181)Fix issue where
Colormap(..., alpha=alpha)made persistent changes to the original registered colormap (@cb24ea51).Prevent matplotlib deprecation warning by removing
set_smart_boundsdependency 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
histbug due tobar(..., width=width)now being relative to the x step size (@e32ed0bc).Fix bug where
savefigreceivesPathinstead of string (GH#176).
Documentation
Various improvements to website and API docstrings.
Document
proplot.figure.Figure.savemethod (@da25266a).Darker “dark mode” (@979c8188).
Prevent website from flashing light mode when changing pages (@75e4d6a1).
ProPlot v0.6.1 (2020-05-20)¶
Bug fixes
Fix issue where cartopy version checking fails if cartopy is not installed (@86cd50b8).
Fix issue where “tight” layout of geographic plots was broken in pre-v0.18 cartopy (@72cb93c6).
Fix issue where gridline coverage was incomplete in some zoomed-in projections (@458c6d7c).
Fix issue where basemap minor gridlines did not update when major gridlines were updated (@427326a7).
ProPlot v0.6.0 (2020-05-20)¶
Deprecated
Remove the
geoaxesandgeogridrc settings (GH#168). Gridline settings are now controlled withgrid.Remove the
lonstepandlatstepsettings – we now useLongitudeLocatorandLatitudeLocatorto select “nice” gridline locations even when zoomed in (GH#168)Change default rc settings closer to matplotlib, including margins and line width (GH#166, @f801852b). Many were changed for no good reason.
Change default line style for geographic gridlines from
':'to'-'and match style from primary gridlines (GH#166, @f801852b).Rename
add_errorbarstoindicate_errorand rename various keyword args (GH#166, @d8c50a8d).Deprecate support for “parametric” plots inside
plot, instead useparametric(@64210bce).Change
unitsunitskeyword argument to more naturaldest(@62903b48).Remove the public objects
normalizers,locators,formatters,cartopy_projs,basemap_kwargs,cmaps,colors, andfonts(GH#149).Drop support for
.xrgband.xrgbafiles (@4fa72b0c). Not sure if any online sources produce these kinds of files.Drop support for
.rgbafiles, but optionally read 4th opacity column from.rgband.txtfiles (@4fa72b0c).Stop reversing the
'Spectral'colormap when ProPlot is imported (GH#149, @ce4ef6a0).Remove
'Blue0'SciVisColor colormap (GH#149, @7cb4ce0f). It was odd man out in the table, and not even really perceptually uniform.Remove custom ProPlot cycles – these should be thought out much more carefully (@43f65d17).
Remove “crayola” colors and clean up the
register_colorsalgorithm (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
GrayCyclecolormap toMonoCycleto more accurately reflect colormap design origins (GH#149, @d67e45bf).Rename
rc_configuratorandsubplot_gridtoRcConfiguratorandSubplotsContainerto match capitalized class naming convention (GH#149).Rename
MidpointNormto more intuitiveDivergingNorm, and make “fair” color scaling the default behavior (@2f549c9).Rename
XYAxestoCartesianAxes,GeoAxestoCartopyAxes, andProjAxestoGeoAxes(GH#149, @4a6a0e34).Rename
BinNormtoDiscreteNormand fix issues with diverging norm color scaling (GH#149, @98a976f1).Rename
ColorDicttoColorDatabase,CmapDicttoColormapDatabase(GH#149, @9d7fd3e0).Rename
concatenatetoappend,updatedtocopy,truncatedtotruncate, andpunchedtocut(GH#149, @e1a08930). The old method names remain with a deprecation warning.
Features
Add
SigFigFormatter(GH#149, @da6105d2) andSciFormatter(GH#175, @c43f7f91) axis formatters.Make default
areaxandareaybounds “sticky”, similar to histograms and barplots (GH#166).Use
_LonAxisand_LatAxisdummy axes with customLongitudeLocatorandLatitudeLocatorto control geographic gridlines (GH#168).Add
'dmslat'and'dmslon'as formatters for cartopy projections, along withdmsformatkeyword argument. This labels points with degrees/minutes/seconds when appropriate (GH#168).Support “minor” geographic gridlines with the
gridminorkeyword arg and existinggridminorsettings (GH#168). Default locator used for minor gridlines isAutoMinorLocator.Add
loninline,latinline, androtatelabelskeywords for controlling cartopy gridliner behavior (GH#168).Add
proplot.config.RcConfigurator.saveandproplot.config.RcConfigurator.from_filemethods (GH#167, @e6dd8314).Increase default
rc[‘savefig.dpi’]to 1200, matching recommendations from academic journals (GH#167, @c00e7314). Also add detailed discussion to user guide.No longer distinguish between “quick” settings and proplot’s “added” settings (GH#167, @e6dd8314). Quick settings, added settings, and matplotlib settings can all have “children” so the distinction no longer makes sense.
Add opacity-preserving functions
to_rgbaandto_xyza, plusset_alphafor changing alpha channel of arbitrary color (GH#171, @81c647da).Add to
set_alphathe 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_cmapsandshow_cycles(GH#171, @7f8ca59f).Add options to
indicate_errorfor adding shading to arbitrary plots (GH#166, @d8c50a8d). Also support automatic legend entries for shading and ensureindicate_errorpreserves metadata.Wrap
pcolorfastjust likepcolorandpcolormeshare wrapped (GH#166, @50a262dd).Add
negposfeature tobar_wrapperand newrc.negcolorandrc.poscolorrc keyword arguments (GH#166, @ab4d6746).Support
vlinesandhlinesflexible arguments and addnegposfeature (GH#166, @1c53e947, @e42ee913).Support cartopy 0.18 locators, formatters, deprecations, and new labelling features (GH#158).
Support building a colormap and
DiscreteNorminsidescatter, just likecontourfandpcolormesh(GH#162).Add
rc[‘geogrid.labelpad’]andrc[‘geogrid.rotatelabels’]settings for cartopy gridline labels (GH#158).Support more
AutoFormatterfeatures onSimpleFormatter(GH#152, @6decf962).Support drawing colorbars with descending levels (GH#149, @10763146)
Add support for matplotlib stylesheets with
use_stylefunction andstylerc param (GH#149, @edc6f3c9).Add
categorieskeyword arg toshow_cmapsandshow_cycles(GH#149, @79be642d).Hide bad colormaps like
'jet'from theshow_cmapstable instead of deleting them outright, just like CSS4 colors (GH#149, @ce4ef6a0).Draw
show_colorstable as single figure with category labels, similar toshow_cmaps(GH#149, @c8ca2909).Make
'Grays'and'Greys'synonyms for the same ColorBrewer colormap (GH#149, @da4ccb08).Permit drawing “outer” axes and figure legends without explicitly passing handles (GH#149, @a69b48eb). Figure legends use the handles from all axes.
Add
to_listedandto_linear_segmentedmethods for handling conversions (GH#149, @e1a08930).Permit merging mixed colormap types
LinearSegmentedColormapwithPerceptuallyUniformColormap(@972956b1).Include the
alphachannel when saving colormaps and cycles by default (GH#149, @117e05f2).Permit 8-character hex strings with alpha channels when loading colormaps and color cycles from hex files (GH#149, @381a84d4).
Publicly support “filling” axes with colorbars using
loc='fill'(GH#149, @057c9895).Return both figure and axes in
show_functions; this gives users access to the axes and prevents drawing them twice in notebooks (GH#149, @2f600bc9).Enable passing callables to
Formatterto create aFuncFormatterinstance.Support sampling
LinearSegmentedColormapintoListedColormapsinside ofColormaprather thanCycle(GH#84, @972956b1).
Bug fixes
Fix various issues with axis label sharing and axis sharing for twinned axes and panel axes (GH#164).
Permit modifying existing cartopy geographic features with successive calls to
format(GH#168).Fix issue drawing bar plots with datetime x axes (GH#156).
Fix issue where
AutoFormattertools were not locale-aware, i.e. use comma as decimal point sometimes (GH#152, @c7636296).Fix issue where
AutoFormatternonzero-value correction algorithm was right for wrong reasons and could be wrong in rare circumstances (GH#152, @c7636296).Fix issue where
matplotlib.style.useresets 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_din matplotlib >=3.2.0 (GH#149, @a69c16da).Fix issues with string font sizes (GH#149, @6121de03). Add hidden
_get_font_sizemethod to translate font size to numeric.Fix issue where passing actual projection instances generated with
Projtosubplotscould incorrectly pair cartopy projections with basemap axes and vice versa (GH#149).Fix issue where could not draw colorbar from list of single-color
PathCollections, 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
AutoFormatterbug with values close to zero (GH#124, @9b7f89fd)Fix
AutoFormatterbug with small negative numbers (GH#117).Label cyclic Scientific colour maps as cyclic (@e10a3109).
Permit special colormap normalization and level scaling for colormap-colored contour plots, just like contourf (GH#149, @054cceb5).
Internals
Major internal change: Move functions into smaller separate files to mimic how matplotlib library is divided up (GH#149).
Add
internalsfolder 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
_notNonefunction to_not_noneand change to more sensible behavior.Turn some private
configfunctions into static methods (@6121de03).Remove “smart bounds” feature from
FuncScale(GH#166, @9ac149ea).
Documentation
ProPlot v0.5.0 (2020-02-10)¶
Deprecated
Rename
abc.linewidthandtitle.linewidthtoborderwidth(@54eb4bee).Rename
text_wrapperlinewidthandinverttoborderwidthandborderinvert(@54eb4bee).
Features
Add back Fabio Crameri’s scientific colour maps (GH#116).
Permit both e.g.
locatorandxlocatoras keyword arguments toaltx, etc. (@57fab860).Permit descending
BinNormandLinearSegmentedNormlevels (GH#119).Permit overriding the font weight, style, and stretch in the
show_fontstable (@e8b9ee38).Permit hiding “unknown” colormaps and color cycles in the
show_cmapsandshow_cyclestables (@cb206f19).
Bug fixes
Fix issue where
show_cmapsandshow_cyclescolormap names were messed up (@13045599)Fix issue where
show_cmapsandshow_cyclesdid not return figure instance (@98209e87).Fix issue where user
valuespassed tocolorbar_wrapperwere 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-10on cartopy map projections (@37fdd1eb).Support CF-time axes by fixing bug in
standardize_1dandstandardize_2d(GH#103, GH#121).Redirect to the “default” location when using
legend=Trueandcolorbar=Trueto generate on-the-fly legends and colorbars (@c2c5c58d). This feature was accidentally removed.Let
colorbar_wrapperaccept lists of colors (@e5f11591). This feature was accidentally removed.
Internals
Remove various unused keyword arguments (@33654a42).
Major improvements to the API controlling axes titles and a-b-c labels (@1ef7e65e).
Always use full names
left,right,top, andbottominstead ofl,r,b, andt, for clarity (@1ef7e65e).Improve
GrayCyclecolormap, is now much shorter and built from reflected FabioGrayCcolormaps (@5b2c7eb7).
ProPlot v0.4.3 (2020-01-21)¶
Deprecated
Remove
ipython_autoreload,ipython_autosave, andipython_matplotlib(GH#112, GH#113). Move inline backend configuration to a hidden method that gets called whenever therc_configuratoris initalized.
Features
Permit comments at the head of colormap and color files (@0ffc1d15).
Make
parametricmatchplotautoscaling behavior (@ecdcba82).
Internals
ProPlot v0.4.2 (2020-01-09)¶
Features
Add
familykeyword arg toshow_fonts(GH#106).Package the TeX Gyre font series with ProPlot (GH#106). Remove a couple other fonts.
Put the TeX Gyre fonts at the head of the serif, sans-serif, monospace, cursive, and fantasy
rcParamsfont family lists (GH#104, GH#106).
Bug fixes
Fix issues with Fira Math weights unrecognized by matplotlib (GH#106).
ProPlot v0.4.1 (2020-01-08)¶
Deprecation
Change the default
.proplotrcformat from YAML to the.matplotlibrcsyntax (GH#101).
Features
Comments (lines starting with
#) are now permitted in all RGB and HEX style colormap and cycle files (GH#100).Break down
show_cyclesbars into categories, just likeshow_cmaps(GH#100).
Bug fixes
Fix issue where
show_cmapsandshow_cyclesdraw empty axes (GH#100).Add back the default .proplorc file to docs (GH#101). To do this,
conf.pyauto-generates a file in_static.
Internals
Add
geogrid.color/linewidth/etcandgridminor.color/linewidth/etcprops as children ofgrid.color/linewidth/etc(GH#101).Various
rc_configuratorimprovements, remove outdated global variables (GH#101).Better error handling when loading colormap/cycle files, and calls to
ColormapandCyclenow raise errors while calls toregister_cmapsandregister_cyclesstill issue warnings (GH#100).
ProPlot v0.4.0 (2020-01-07)¶
Deprecated
Rename
basemap_defaultstobasemap_kwargsandcartopy_projstocartopy_names(@431a06ce).Remove
subplots.innerspace,subplots.titlespace,subplots.xlabspace, andsubplots.ylabspacespacing arguments, automatically calculate default non-tight spacing using_get_spacebased on current tick lengths, label sizes, etc.Remove redundant
use_fonts, usercParams['sans-serif']precedence instead (GH#95).dualxanddualyno longer accept “scale-spec” arguments. Must be a function, two functions, or an axis scale instance (GH#96).Remove
Axesshare[x|y],span[x|y], andalign[x|y]kwargs (GH#99). These settings are now always figure-wide.Rename
CyclesamplestoN, renameshow_colorsnbreaktonhues(GH#98).
Features
Add
from_filestatic methods (GH#98). You can now load files by passing a name toColormap.Add TeX Gyre Heros as open source Helvetica-alternative; this is the new default font. Add Fira Math as DejaVu Sans-alternative; has complete set of math characters (GH#95).
Add
xlinewidth,ylinewidth,xgridcolor,ygridcolorkeyword args toformat(GH#95).Add getters and setters for various
Figuresettings likeshare[x|y],span[x|y], andalign[x|y](GH#99).Let
twinx,twiny,altx, andaltyacceptformatkeyword args just likedualxanddualy(GH#99).Add
Figurefallback_to_cmkwarg. This is used byshow_fontsto show dummy glyphs to clearly illustrate when fonts are missing characters, but preserve graceful fallback for end user.Improve
Projconstructor function. It now acceptsProjectionandBasemapinstances, just like other constructor functions, and returns only the projection instance (GH#92).rc__getitem__always returns the setting. To get context block-restricted settings, you must explicitly passcontext=Truetoget,fill, orcategory(GH#91).
Bug fixes
Fix issues with
dualxanddualywith non-linear parent scales (GH#96).Ignore TTC fonts because they cannot be saved in EPS/PDF figures (GH#94 and GH#95).
Do not try to use Helvetica Neue because “thin” font style is read as regular (GH#94 and GH#95).
Documentation
Use the imperative mood for docstring summaries (GH#92).
Fix
show_cyclesbug (GH#90) and show cycles using colorbars rather than lines (GH#98).
Internals
Define
rcdefault values with inline dictionaries rather than with a default.proplotrcfile, change the auto-generated user.proplotrc(GH#91).Remove useless
panel_kwkeyword arg fromlegend_wrapperandcolorbar_wrapper(GH#91). Removewflush,hflush, andflushkeyword args fromsubplotsthat should have been removed long ago.
ProPlot v0.3.1 (2019-12-16)¶
Bug fixes
ProPlot v0.3.0 (2019-12-15)¶
Deprecated
Remove
'Moisture'colormap (@cf8952b1).
Features
Add
use_font, only sync Google Fonts fonts (GH#87).New
'DryWet'colormap is colorblind friendly (@0280e266).Permit shifting arbitrary colormaps by
180degrees by appending the name with'_shifted', just like'_r'(@e2e2b2c7).
Bug fixes
Add brute force workaround for saving colormaps with callable segmentdata (@8201a806).
Fix issue with latest versions of matplotlib where
%matplotlib inlinefails silently so the backend is not instantiated (@cc39dc56).Fix
shiftedwhenshiftis not180(@e2e2b2c7).Save the
cyclicandgammaattributes in JSON files too (@8201a806).
Documentation
Cleanup notebooks, especially the colormaps demo (e.g. @952d4cb3).
Internals
Change
clocktoperf_counter(GH#86).
ProPlot v0.2.7 (2019-12-09)¶
Bug fixes
Fix issue where
AutoFormatterlogarithmic scale points are incorrect (@9b164733).
Documentation
Improve Configuring ProPlot documentation (@9d50719b).
Internals
ProPlot v0.2.5 (2019-12-07)¶
Features
Much better
CutoffScalealgorithm, permit arbitrary cutoffs (GH#83).
ProPlot v0.2.4 (2019-12-07)¶
Deprecated
Rename
ColorCacheDicttoColorDict(@aee7d1be).Rename
colorstoColors(@aee7d1be)Remove
fonts_systemandfonts_proplot, renamecolordicttocolors, make top-level variables more robust (@861583f8).
Documentation
Params table for
show_fonts(@861583f8).
Internals
Improvements to
register_colors.
ProPlot v0.2.3 (2019-12-05)¶
Bug fixes
Fix issue with overlapping gridlines using monkey patches on gridliner instances (@8960ebdc).
Fix issue where auto colorbar labels are not applied when
globe=True(@ecb3c899).More sensible zorder for gridlines (@90d94e55).
Fix issue where customized super title settings are overridden when new axes are created (@35cb21f2).
Documentation
Organize ipython notebook documentation (@35cb21f2).
Internals
Major cleanup of the
colorbar_wrappersource code, handle minor ticks using the builtin matplotlib API just like major ticks (@b9976220).
ProPlot v0.2.2 (2019-12-04)¶
Deprecated
Rename
axes_gridtosubplot_grid(@ac14e9dd).
Bug fixes
Fix shared x and y axis bugs (@ac14e9dd).
Documentation
Make notebook examples PEP8 compliant (@97f5ffd4). Much more readable now.
ProPlot v0.2.1 (2019-12-02)¶
Deprecated
Rename
autoreload_setup,autosave_setup, andmatplotlib_setuptoipython_autoreload,ipython_autosave, andipython_matplotlib, respectively (@84e80c1e).
ProPlot v0.2.0 (2019-12-02)¶
Deprecated
Remove the
nbsetuprc setting in favor of separateautosave,autoreload, andmatplotlibsettings for triggering the respective%magic commands. (@3a622887;nbsetupis still accepted but no longer documented).Rename the
formatrc setting in favor of theinlinefmtsetting (@3a622887;formatis still accepted but no longer documented).Rename
FlexibleGridSpecandFlexibleSubplotSpectoGridSpecandSubplotSpec(@3a622887; until GH#110 is merged it is impossible to use these manually, so this won’t bother anyone).
Features
Support manual resizing for all backends, including
osxandqt(@3a622887).
Bug fixes
Disable automatic resizing for the
nbAgginteractive inline backend. Found no suitable workaround (@3a622887).
Internals
Organize the
rcdocumentation and the default.proplotrcfile (@3a622887).Rename
rcParamsCustomtorcParamsLong(@3a622887; this is inaccessible to the user).When calling
fig.canvas.print_figure()on a stale figure, callfig.canvas.draw()first. May be overkill forsavefigbut critical for correctly displaying already-drawn notebook figures.
ProPlot v0.1.0 (2019-12-01)¶
Internals
Include
flake8in Travis CI testing (@8743b857).Enforce source code PEP8 compliance (@78da51a7).
Use pre-commit for all future commits (@e14f6809).
Implement tight layout stuff with canvas monkey patches (@67221d10). ProPlot now works for arbitrary backends, not just inline and qt.
Documentation
Various RTD bugfixes (e.g. @37633a4c).