Recent Releases of seaborn
seaborn - v0.13.2 (January 2024)
This is a minor release containing internal changes that adapt to upcoming deprecations in pandas. All users are encouraged to update.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 2 years ago
seaborn - v0.13.1 (December 2023)
This is a minor release with some bug fixes and a couple new features. All users are encouraged to update.
|Feature| Added support for weighted mean estimation (with boostrap CIs) in
lineplot,barplot,pointplot, andobjects.Est(#3580, #3586).|Feature| Added the
extentoption inobjects.Plot.layout(#3552).|Fix| Fixed a regression in v0.13.0 that triggered an exception when working with non-numpy data types (#3516).
|Fix| Fixed a bug in
objects.Plotso that tick labels are shown for wrapped axes that aren't in the bottom-most row (#3600).|Fix| Fixed a bug in
catplotwhere a blank legend would be added whenhuewas redundantly assigned (#3540).|Fix| Fixed a bug in
catplotwhere theedgecolorparameter was ignored withkind="bar"(#3547).|Fix| Fixed a bug in
boxplotwhere an exception was raised when using the matplotlibbootstrapoption (#3562).|Fix| Fixed a bug in
lineplotwhere an exception was raised whenhuewas assigned with an empty dataframe (#3569).|Fix| Fixed a bug in multiple categorical plots that raised with
hue=Noneanddodge=True; this is now has no effect (#3605).
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 2 years ago
seaborn - v0.13.0 (September 2023)
See the online docs for an annotated version of these notes with working links.
This is a major release with a number of important new features and changes. The highlight is a major overhaul to seaborn's categorical plotting functions, providing them with many new capabilities and better aligning their API with the rest of the library. There is also provisional support for alternate dataframe libraries like polars, a new theme and display configuration system for objects.Plot, and many smaller bugfixes and enhancements.
Updating is recommended, but users are encouraged to carefully check the outputs of existing code that uses the categorical functions, and they should be aware of some deprecations and intentional changes to the default appearance of the resulting plots (see notes below with and tags).
Major enhancements to categorical plots
Seaborn's categorical functions <categorical_api> have been completely rewritten for this release. This provided the opportunity to address some longstanding quirks as well as to add a number of smaller but much-desired features and enhancements.
Support for numeric and datetime data
The categorical functions have historically treated all data as categorical, even when it has a numeric or datetime type. This can now be controlled with the new nativescale parameter. The default remains False to preserve existing behavior. But with nativescale=True, values will be treated as they would by other seaborn or matplotlib functions. Element widths will be derived from the minimum distance between two unique values on the categorical axis.
Additionally, while seaborn previously determined the mapping from categorical values to ordinal positions internally, this is now delegated to matplotlib. The change should mostly be transparent to the user, but categorical plots (even with native_scale=False) will better align with artists added by other seaborn or matplotlib functions in most cases, and matplotlib's interactive machinery will work better.
Changes to color defaults and specification
The categorical functions now act more like the rest of seaborn in that they will produce a plot with a single main color unless the hue variable is assigned. Previously, there would be an implicit redundant color mapping (e.g., each box in a boxplot would get a separate color from the default palette). To retain the previous behavior, explicitly assign a redundant hue variable (e.g., boxplot(data, x="x", y="y", hue="x")).
Two related idiosyncratic color specifications are deprecated, but they will continue to work (with a warning) for one release cycle:
- Passing a palette without explicitly assigning hue is no longer supported (add an explicitly redundant hue assignment instead).
- Passing a color while assigning hue to produce a gradient is no longer supported (use palette="dark:{color}" or palette="light:{color}" instead).
Finally, like other seaborn functions, the default palette now depends on the variable type, and a sequential palette will be used with numeric data. To retain the previous behavior, pass the name of a qualitative palette (e.g., palette="deep" for seaborn's default). Accordingly, the functions have gained a parameter to control numeric color mappings (hue_norm).
Other features, enhancements, and changes
The following updates apply to multiple categorical functions.
- All functions now accept a legend parameter, which can be a boolean (to suppress the legend) or one of {"auto", "brief", "full"} to control the amount of information shown in the legend for a numerical color mapping.
- All functions now accept a callable formatter parameter to control the string representation of the data.
- All functions that draw a solid patch now accept a boolean fill parameter, which when set to False will draw line-art elements.
- All functions that support dodging now have an additional gap parameter that can be set to a non-zero value to leave space between dodged elements.
- The
boxplot,boxenplot, andviolinplotfunctions now support a single linecolor parameter. - The default value for dodge has changed from True to "auto". With "auto", elements will dodge only when at least one set of elements would otherwise overlap.
- When the value axis of the plot has a non-linear scale, the statistical operations (e.g. an aggregation in
pointplotor the kernel density fit inviolinplot) are now applied in that scale space. - All functions now accept a logscale parameter. With a single argument, this will set the scale on the "value" axis (opposite the categorical axis). A tuple will set each axis directly (although setting a log scale categorical axis also requires nativescale=True).
- The orient parameter now accepts "x"/"y" to specify the categorical axis, matching the objects interface.
- The categorical functions are generally more deferential to the user's additional matplotlib keyword arguments.
- Using "gray" to select an automatic gray value that complements the main palette is now deprecated in favor of "auto".
The following updates are function-specific.
- In
pointplot, a singlematplotlib.lines.Line2Dartist is now used rather than adding separatematplotlib.collections.PathCollectionartist for the points. As a result, it is now possible to pass additional keyword arguments for complete customization the appearance of both the lines and markers; additionally, the legend representation is improved. Accordingly, parameters that previously allowed only partial customization (scale, join, and errwidth) are now deprecated. The old parameters will now trigger detailed warning messages with instructions for adapting existing code. - The bandwidth specification in
violinplotbetter aligns withkdeplot, as the bw parameter is now deprecated in favor of bwmethod and bwadjust. - In
boxenplot, the boxen are now drawn with separate patch artists in each tail. This may have consequences for code that works with the underlying artists, but it produces a better result for low-alpha / unfilled plots and enables proper area/density scaling. - In
barplot, the errcolor and errwidth parameters are now deprecated in favor of a more general err_kws` dictionary. The existing parameters will continue to work for two releases. - In
violinplot, the scale and scalehue parameters have been renamed to densitynorm and common_norm for clarity and to reflect the fact that common normalization is now applied over both hue and faceting variables incatplot. - In
boxenplot, the scale parameter has been renamed to width_method as part of a broader effort to de-confound the meaning of "scale" in seaborn parameters. - When passing a vector to the data parameter of
barplotorpointplot, a bar or point will be drawn for each entry in the vector rather than plotting a single aggregated value. To retain the previous behavior, assign the vector to the y variable. - In
boxplot, the default flier marker now follows the matplotlib rcparams so that it can be globally customized. - When using split=True and inner="box" in
violinplot, a separate mini-box is now drawn for each split violin. - In
boxenplot, all plots now use a consistent luminance ramp for the different box levels. This leads to a change in the appearance of existing plots, but reduces the chances of a misleading result. - The "area" scaling in
boxenplotnow approximates the density of the underlying observations, including for asymmetric distributions. This produces a substantial change in the appearance of plots with width_method="area", although the existing behavior was poorly defined. - In
countplot, the new stat parameter can be used to apply a normalization (e.g to show a "percent" or "proportion"). - The split parameter in
violinplotis now more general and can be set to True regardless of the number of hue variable levels (or even without hue). This is probably most useful for showing half violins. - In
violinplot, the new inner_kws parameter allows additional control over the interior artists. - It is no longer required to use a DataFrame in
catplot, as data vectors can now be passed directly. - In
boxplot, the artists that comprise each box plot are now packaged in a BoxPlotContainer for easier post-plotting access.
Support for alternate dataframe libraries
- Nearly all functions / objects now use the dataframe exchange protocol to accept DataFrame objects from libraries other than pandas (e.g. polars). Note that seaborn will still convert the data object to pandas internally, but this feature will simplify code for users of other dataframe libraries (
3369).
Improved configuration for the objects interface
- Added control over the default theme to
objects.Plot(3223) - Added control over the default notebook display to
objects.Plot(3225). - Added the concept of a "layer legend" in
objects.Plotvia the new label parameter inobjects.Plot.add(3456). - In
objects.Plot.scale,objects.Plot.limit, andobjects.Plot.labelthe x / y parameters can be used to set a common scale / limit / label for paired subplots (3458).
Other updates
- Improved the legend display for relational and categorical functions to better represent the user's additional keyword arguments (
3467). - In
ecdfplot, stat="percent" is now a valid option (3336). - Data values outside the scale transform domain (e.g. non-positive values with a log scale) are now dropped prior to any statistical operations (
3488). - In
histplot, infinite values are now ignored when choosing the default bin range (3488). - There is now generalized support for performing statistics in the appropriate space based on axes scales; previously support for this was spotty and at best worked only for log scales (
3440). - Updated
load_datasetto use an approach more compatible with pyiodide (3234). - Support for array-typed palettes is now deprecated. This was not previously documented as supported, but it worked by accident in a few places (
3452). - In
histplot, treatment of the binwidth parameter has changed such that the actual bin width will be only approximately equal to the requested width when that value does not evenly divide the bin range. This fixes an issue where the largest data value was sometimes dropped due to floating point error (3489). - Fixed
objects.Barandobjects.Barswidths when using a nonlinear scale (3217). - Worked around an issue in matplotlib that caused incorrect results in
move_legendwhen labels were provided (3454). - Fixed a bug introduced in v0.12.0 where
histplotadded a stray empty BarContainer (3246). - Fixed a bug where
objects.Plot.onwould override a figure's layout engine (3216). - Fixed a bug introduced in v0.12.0 where
lineplotwith a list of tuples for the keyword argument dashes caused a TypeError (3316). - Fixed a bug in
PairGridthat caused an exception when the input dataframe had a column multiindex (3407). - Improved a few edge cases when using pandas nullable dtypes (
3394).
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 2 years ago
seaborn - v0.13.0rc0 (September 2023)
This is a release candidate for seaborn v0.13.0, a major release with a complete overhaul of seaborn's categorical plotting functions.
Please test the release candidate, especially the categorical plots. The internals of these functions have been completely rewritten to provide new functionality and to better align with the rest of the library. There are some intentional changes to default behavior / deprecations, but also the potential for unintentional breakage. Please help surface any examples of the latter prior to final release.
See the Release Notes for more information about the new features and changes.
Please open a GitHub issue with a reproducible example demonstrating any problems that you encounter. The final release is targeted for the end of September.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 2 years ago
seaborn - v0.12.2 (December 2022)
v0.12.2 (December 2022)
This is an incremental release that is a recommended upgrade for all users. It is very likely the final release of the 0.12 series and the last version to support Python 3.7.
|Feature| Added the
objects.KDEstat (#3111).|Feature| Added the
objects.Booleanscale (#3205).|Enhancement| Improved user feedback for failures during plot compilation by catching exceptions and re-raising with a
PlotSpecErrorthat provides additional context. (#3203).|Fix| Improved calculation of automatic mark widths with unshared facet axes (#3119).
|Fix| Improved robustness to empty data in several components of the objects interface (#3202).
|Fix| Fixed a bug where legends for numeric variables with large values would be incorrectly shown (i.e. with a missing offset or exponent; #3187).
|Fix| Fixed a regression in v0.12.0 where manually-added labels could have duplicate legend entries (#3116).
|Fix| Fixed a bug in
histplotwithkde=Trueandlog_scale=Truewhere the curve was not scaled properly (#3173).|Fix| Fixed a bug in
relplotwhere inner axis labels would be shown when axis sharing was disabled (#3180).|Fix| Fixed a bug in
objects.Continuousto avoid an exception with boolean data (#3190).
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 3 years ago
seaborn - v0.12.1
This is an incremental release that is a recommended upgrade for all users. It addresses a handful of bugs / regressions in v0.12.0 and adds several features and enhancements to the new objects interface.
- Added the
objects.Textmark (#3051). - Added the
objects.Dashmark (#3074). - Added the
objects.Percstat (#3063). - Added the
objects.Countstat (#3086). - The
objects.Bandandobjects.Rangemarks will now cover the full extent of the data ifmin/maxvariables are not explicitly assigned or added in a transform (#3056). - The
objects.Jittermove now applies a small amount of jitter by default (#3066). - Axes with a
objects.Nominalscale now appear like categorical axes in classic seaborn, with fixed margins, no grid, and an inverted y axis (#3069). - The
objects.Continuous.labelmethod now acceptsbase=Noneto override the default formatter with a log transform (#3087). - Marks that sort along the orient axis (e.g.
objects.Line) now use a stable algorithm (#3064). - Added a
labelparameter topointplot, which addresses a regression in 0.12.0 whenpointplotis passed toFacetGrid(#3016). - Fixed a bug that caused an exception when more than two layers with
the same mappings were added to
objects.Plot(#3055). - Made
objects.PolyFitrobust to missing data (#3010). - Fixed a bug in
objects.Plotthat occurred when data assigned to the orient coordinate had zero variance (#3084). - Fixed a regression in
kdeplotwhere passingcmapfor an unfilled bivariate plot would raise an exception (#3065). - Addressed a performance regression in
lineplotwith a large number of unique x values (#3081). - Seaborn no longer contains doctest-style examples, simplifying the testing infrastructure (#3034).
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 3 years ago
seaborn - v0.12.0
Introduction of the objects interface
This release debuts the seaborn.objects interface, an entirely new approach to making plots with seaborn. It is the product of several years of design and 16 months of implementation work. The interface aims to provide a more declarative, composable, and extensible API for making statistical graphics. It is inspired by Wilkinson's grammar of graphics, offering a Pythonic API that is informed by the design of libraries such as ggplot2 and vega-lite along with lessons from the past 10 years of seaborn's development.
For more information and numerous examples, see the tutorial chapter and API reference.
This initial release should be considered "experimental". While it is stable enough for serious use, there are definitely some rough edges, and some key features remain to be implemented. It is possible that breaking changes may occur over the next few minor releases. Please be patient with any limitations that you encounter and help the development by reporting issues when you find behavior surprising.
Keyword-only arguments
Seaborn's plotting functions now require explicit keywords for most arguments, following the deprecation of positional arguments in v0.11.0. With this enforcement, most functions have also had their parameter lists rearranged so that data is the first and only positional argument. This adds consistency across the various functions in the library. It also means that calling func(data) will do something for nearly all functions (those that support wide-form data) and that pandas.DataFrame can be piped directly into a plot. It is possible that the signatures will be loosened a bit in future releases so that x and y can be positional, but minimal support for positional arguments after this change will reduce the chance of inadvertent mis-specification (2804).
Modernization of categorical scatterplots
This release begins the process of modernizing the categorical plots, beginning with stripplot and swarmplot. These functions are sporting some enhancements that alleviate a few long-running frustrations (2413, 2447):
- The new
native_scaleparameter allows numeric or datetime categories to be plotted with their original scale rather than converted to strings and plotted at fixed intervals. - The new
formatterparameter allows more control over the string representation of values on the categorical axis. There should also be improved defaults for some types, such as dates. - It is now possible to assign
huewhen using only one coordinate variable (i.e. onlyxory). - It is now possible to disable the legend.
The updates also harmonize behavior with functions that have been more recently introduced. This should be relatively non-disruptive, although a few defaults will change:
- The functions now hook into matplotlib's unit system for plotting categorical data. (Seaborn's categorical functions actually predate support for categorical data in matplotlib.) This should mostly be transparent to the user, but it may resolve a few edge cases. For example, matplotlib interactivity should work better (e.g., for showing the data value under the cursor).
- A color palette is no longer applied to levels of the categorical variable by default. It is now necessary to explicitly assign hue to see multiple colors (i.e., assign the same variable to x/y and hue). Passing palette without hue will continue to be honored for one release cycle.
- Numeric hue variables now receive a continuous mapping by default, using the same rules as
scatterplot. Pass palette="deep" to reproduce previous defaults. - The plots now follow the default property cycle; i.e. calling an axes-level function multiple times with the same active axes will produce different-colored artists.
- Currently, assigning hue and then passing a color will produce a gradient palette. This is now deprecated, as it is easy to request a gradient with, e.g. palette="light:blue".
Similar enhancements / updates should be expected to roll out to other categorical plotting functions in future releases. There are also several function-specific enhancements:
- In
stripplot, a "strip" with a single observation will be plotted without jitter (2413) - In
swarmplot, the points are now swarmed at draw time, meaning that the plot will adapt to further changes in axis scaling or tweaks to the plot layout (2443). - In
swarmplot, the proportion of points that must overlap before issuing a warning can now be controlled with the warn_thresh parameter (2447). - In
swarmplot, the order of the points in each swarm now matches the order in the original dataset; previously they were sorted. This affects only the underlying data stored in the matplotlib artist, not the visual representation (2443).
More flexible errorbars
Increased the flexibility of what can be shown by the internally-calculated errorbars for lineplot, barplot, and pointplot.
With the new errorbar parameter, it is now possible to select bootstrap confidence intervals, percentile / predictive intervals, or intervals formed by scaled standard deviations or standard errors. The parameter also accepts an arbitrary function that maps from a vector to an interval. There is a new user guide chapter demonstrating these options and explaining when you might want to use each one.
As a consequence of this change, the ci parameter has been deprecated. Note that regplot retains the previous API, but it will likely be updated in a future release (2407, 2866).
Other updates
- It is now possible to aggregate / sort a
lineplotalong the y axis using orient="y" (2854). - Made it easier to customize
FacetGrid/PairGrid/JointGridwith a fluent (method-chained) style by adding apply/ pipe methods. Additionally, fixed the tight_layout and refline methods so that they return self (2926). - Added
FacetGrid.tick_paramsandPairGrid.tick_paramsto customize the appearance of the ticks, tick labels, and gridlines of all subplots at once (2944). - Added a width parameter to
barplot(2860). - It is now possible to specify estimator as a string in
barplotandpointplot, in addition to a callable (2866). - Error bars in
regplotnow inherit the alpha value of the points they correspond to (2540). - When using
pairplotwith corner=True and diag_kind=None, the top left y axis label is no longer hidden (2850). - It is now possible to plot a discrete
histplotas a step function or polygon (2859). - It is now possible to customize the appearance of elements in a
boxenplotwith boxkws/linekws/flier_kws (2909). - Improved integration with the matplotlib color cycle in most axes-level functions (
2449). - Fixed a regression in 0.11.2 that caused some functions to stall indefinitely or raise when the input data had a duplicate index (
2776). - Fixed a bug in
histplotandkdeplotwhere weights were not factored into the normalization (2812). - Fixed two edgecases in
histplotwhen only binwidth was provided (2813). - Fixed a bug in
violinplotwhere inner boxes/points could be missing with unpaired split violins (2814). - Fixed a bug in
PairGridwhere an error would be raised when defining hue only in the mapping methods (2847). - Fixed a bug in
scatterplotwhere an error would be raised when hue_order was a subset of the hue levels (2848). - Fixed a bug in
histplotwhere dodged bars would have different widths on a log scale (2849). - In
lineplot, allowed the dashes keyword to set the style of a line without mapping a style variable (2449). - Improved support in
relplotfor "wide" data and for faceting variables passed as non-pandas objects (2846). - Subplot titles will no longer be reset when calling
FacetGrid.maporFacetGrid.map_dataframe(2705). - Added a workaround for a matplotlib issue that caused figure-level functions to freeze when plt.show was called (
2925). - Improved robustness to numerical errors in
kdeplot(2862). - Fixed a bug where
rugplotwas ignoring expand_margins=False (2953). - The patch.facecolor rc param is no longer set by
set_palette(orset_theme). This should have no general effect, because the matplotlib default is now "C0" (2906). - Made scipy an optional dependency and added pip install seaborn[stats] as a method for ensuring the availability of compatible scipy and statsmodels libraries at install time. This has a few minor implications for existing code, which are explained in the Github pull request (
2398). - Example datasets are now stored in an OS-specific cache location (as determined by appdirs) rather than in the user's home directory. Users should feel free to remove ~/seaborn-data if desired (
2773). - The unit test suite is no longer part of the source or wheel distribution. Seaborn has never had a runtime API for exercising the tests, so this should not have workflow implications (
2833). - Following NEP29, dropped support for Python 3.6 and bumped the minimally-supported versions of the library dependencies.
- Removed the previously-deprecated factorplot along with several previously-deprecated utility functions (iqr, percentiles, pmfhist, and sortdf).
- Removed the (previously-unused) option to pass additional keyword arguments to
pointplot.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 3 years ago
seaborn - v0.12.0rc0
This is the first release candidate for seaborn v0.12, a major update introducing an entirely new interface along with numerous features, enhancements, and fixes for existing functionality.
To install for testing, run
pip install seaborn==0.12.0rc0
There were several renamings and API changes from the final beta release. See the referenced PRs for more information on each change.
Mark renamings
Scatter->Dots(#2942)Ribbon->Band(#2945)Interval->Range(#2945)
Plot API changes
- The
stat=andmove=parameters were removed fromPlot.add, which now has the following signature:Plot.add(mark, *transforms, ...). (#2948) - The
Plot.configuremethod was renamed toPlot.layout, with thefigsizeparameter changed tosize. Theshare{x,y}parameters were removed fromPlot.layout, with that functionality now supported by the newPlot.sharemethod. (#2954)
Additionally, the install extra for including statistical packages was changed from seaborn[all] to seaborn[stats]. (#2939)
Scientific Software - Peer-reviewed
- Python
Published by mwaskom almost 4 years ago
seaborn - v0.12.0b3
This is the third and final beta release for seaborn v0.12, a major update introducing an entirely new interface along with numerous features, enhancements, and fixes for existing functionality.
To install for testing, run
pip install seaborn==0.12.0b3
Changes from the second beta release:
Objects interface
- Added
Eststat for aggregating with a flexible error bar interval (#2912) - Added
Intervalmark for drawing lines perpendicular to the orient axis (#2912) - Added
Plot.themefor basic control over figure appearance (#2929) - Expanded
Plot.labelto control plot titles (#2934) - Fixed
Plot.scaleso that it applies to variables added during the stat transform (#2915) - Fixed a bug where the
Plot.configurespec would not persist after further method calls (#2917) - Fixed a bug where dot marks ignored the
artist_kwsparameter (#2921)
Function interface
- Added
.applyand.pipemethods toFacetGrid/PairGrid/JointGridfor fluent customization (#2928) - Added a workaround for an issue in matplotlib that caused figure-level plots to freeze or close (#2925)
Scientific Software - Peer-reviewed
- Python
Published by mwaskom almost 4 years ago
seaborn - v0.12.0b2
This is the second beta release for seaborn v0.12, a major update introducing an entirely new interface along with numerous features, enhancements, and fixes for existing functionality.
To install for testing, run
pip install seaborn==0.12.0b2
Changes from the first beta release:
Objects interface
- Added
Plot.labelmethod for controlling axis labels/legend titles (#2902) - Added
Plot.limitmethod for controlling axis limits (#2898) - Added
Bars, a more efficient mark for histograms, and improved performance ofBarmark as well (#2893) - Improved the visual appearance of the
AreaandRibbonmarks used a simpler matplotlib artist class for them (#2896) - Improved the visual appearance of the
Barmark (#2889)
Scientific Software - Peer-reviewed
- Python
Published by mwaskom almost 4 years ago
seaborn - v0.12.0b1
This is the first beta release for seaborn v0.12, a major update introducing an entirely new interface along with numerous features, enhancements, and fixes for existing functionality.
To install for testing, run
pip install seaborn==0.12.0b1
Changes from the final alpha release:
Objects interface
- Improve tick label defaults and customization (#2877)
- Add
Scale.labelinterface for formatting tick labels - Fix a bug where unshared axes would use the same locator
- Default to scientific notation for log scale ticks
- Default to log-spaced ticks with symlog scale
- Shorten
transformparameter name totrans - Simplify internal type structure
- Add
- Allow suppression of legend for individual layers (#2834)
Function interface
- Add new
errorbarAPI topointplotandbarplot(#2866) - Add
widthparameter tobarplot(#2860) - Add
orientparameter tolineplot(#2854) - Allow
histplotto draw discrete histograms with step or poly marks (#2859) - Downgrade exception in relational plots with palette of incorrect length to a warning (#2856)
- Use alpha from point mark for error bars in
regplot(#2853) - Improve user-friendliness of
jointplot(#2863) - Preserve upper left y axis label in
pointplotwithcorner=Trueanddiag_kind=None(#2850) - Improve support for anonymous data objects in
relplot(#2846) - Fix
histplotdodged bar widths with log scale (#2849) - Fix
hue_orderas a subset inscatterplot(#2848) - Fix several bugs in the new categorical scatterplot features (#2845)
Scientific Software - Peer-reviewed
- Python
Published by mwaskom almost 4 years ago
seaborn - v0.12.0a1
This is the second alpha release for seaborn v0.12, a major release introducing an entirely new interface along with numerous enhancements and fixes to existing functionality.
To install for testing, run
pip install https://github.com/mwaskom/seaborn/archive/refs/tags/v0.12.0a1.tar.gz
Changes from the first alpha release:
Objects interface
- Add
Normmove, for divisive scaling after stat computation (#2827) - Complete
Linemark and add correspondingPath,Lines, andPathsmarks (#2822) - Fix inferred y orientation with computed x variable (#2818)
- Fix multiple moves while pairing (#2817)
- Improve missing data handling (#2816)
Categorical plots
- Revert change to 1D "wide" data handling introduced in v0.12.0a0 (#2829)
- Improve legend fore new features in categorical scatterplots (#2828)
- Fix inner boxes with unpaired split violins (#2814)
Distribution plots
- Fix some edgecases in
histplotwhen specifyingbinwidth(#2813) - Fix
histplot/kdeplotnormalization when usinghueandweights(#2812)
Scientific Software - Peer-reviewed
- Python
Published by mwaskom almost 4 years ago
seaborn - v0.12.0a0
This is the first alpha for seaborn v0.12.0, a major release that introduces an entirely new interface in the seaborn.objects namespace.
For more information about the new interface, see the development docs at http://seaborn.pydata.org/nextgen.
Please experiment with the alpha version and provide feedback on things that are confusing or don't work, but expect some rough edges and instability.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom about 4 years ago
seaborn - v0.11.2 (August 2021)
This is a minor release that addresses issues in the v0.11 series and adds a small number of targeted enhancements. It is a recommended upgrade for all users.
|Docs| A paper describing seaborn has been published in the Journal of Open Source Software. The paper serves as an introduction to the library and can be used to cite seaborn if it has been integral to a scientific publication.
|API| |Feature| In
lmplot, added a newfacet_kwsparameter and deprecated thesharex,sharey, andlegend_outparameters from the function signature; pass them in afacet_kwsdictionary instead (https://github.com/mwaskom/seaborn/pull/2576).|Feature| Added a
move_legendconvenience function for repositioning the legend on an existing axes or figure, along with updating its properties. This function should be preferred over callingax.legendwith no legend data, which does not reliably work across seaborn plot types (https://github.com/mwaskom/seaborn/pull/2643).|Feature| In
histplot, addedstat="percent"as an option for normalization such that bar heights sum to 100 andstat="proportion"as an alias for the existingstat="probability"(https://github.com/mwaskom/seaborn/pull/2461, https://github.com/mwaskom/seaborn/pull/2634).|Feature| Added
FacetGrid.reflineandJointGrid.reflinemethods for plotting horizontal and/or vertical reference lines on every subplot in one step (https://github.com/mwaskom/seaborn/pull/2620).|Feature| In
kdeplot, added awarn_singularparameter to silence the warning about data with zero variance (https://github.com/mwaskom/seaborn/pull/2566).|Enhancement| In
histplot, improved performance with large datasets and many groupings/facets (https://github.com/mwaskom/seaborn/pull/2559, https://github.com/mwaskom/seaborn/pull/2570).|Enhancement| The
FacetGrid,PairGrid, andJointGridobjects now reference the underlying matplotlib figure with a.figureattribute. The existing.figattribute still exists but is discouraged and may eventually be deprecated. The effect is that you can now callobj.figureon the return value from any seaborn function to access the matplotlib object (https://github.com/mwaskom/seaborn/pull/2639).|Enhancement| In
FacetGridand functions that use it, visibility of the interior axis labels is now disabled, and exterior axis labels are no longer erased when adding additional layers. This produces the same results for plots made by seaborn functions, but it may produce different (better, in most cases) results for customized facet plots (https://github.com/mwaskom/seaborn/pull/2583).|Enhancement| In
FacetGrid,PairGrid, and functions that use them, the matplotlibfigure.autolayoutparameter is disabled to avoid having the legend overlap the plot (https://github.com/mwaskom/seaborn/pull/2571).|Enhancement| The
load_datasethelper now produces a more informative error when fed a dataframe, easing a common beginner mistake (https://github.com/mwaskom/seaborn/pull/2604).|Fix| |Enhancement| Improved robustness to missing data, including some additional support for the
pd.NAtype (https://github.com/mwaskom/seaborn/pull/2417, https://github.com/mwaskom/seaborn/pull/2435).|Fix| In
ecdfplotandrugplot, fixed a bug where results were incorrect if the data axis had a log scale before plotting (https://github.com/mwaskom/seaborn/pull/2504).|Fix| In
histplot, fixed a bug where usingshrinkwith non-discrete bins shifted bar positions inaccurately (https://github.com/mwaskom/seaborn/pull/2477).|Fix| In
displot, fixed a bug wherecommon_norm=Falsewas ignored when faceting was used without assigninghue(https://github.com/mwaskom/seaborn/pull/2468).|Fix| In
histplot, fixed two bugs where automatically computed edge widths were too thick for log-scaled histograms and for categorical histograms on the y axis (https://github.com/mwaskom/seaborn/pull/2522).|Fix| In
histplotandkdeplot, fixed a bug where thealphaparameter was ignored whenfill=False(https://github.com/mwaskom/seaborn/pull/2460).|Fix| In
histplotandkdeplot, fixed a bug where themultipleparameter was ignored whenhuewas provided as a vector without a name (https://github.com/mwaskom/seaborn/pull/2462).|Fix| In
displot, the default alpha value now adjusts to a providedmultipleparameter even whenhueis not assigned (https://github.com/mwaskom/seaborn/pull/2462).|Fix| In
displot, fixed a bug that caused faceted 2D histograms to error out withcommon_bins=False(https://github.com/mwaskom/seaborn/pull/2640).|Fix| In
rugplot, fixed a bug that prevented the use of datetime data (https://github.com/mwaskom/seaborn/pull/2458).|Fix| In
relplotanddisplot, fixed a bug where the dataframe attached to the returnedFacetGridobject dropped columns that were not used in the plot (https://github.com/mwaskom/seaborn/pull/2623).|Fix| In
relplot, fixed an error that would be raised when one of the column names in the dataframe shared a name with one of the plot variables (https://github.com/mwaskom/seaborn/pull/2581).|Fix| In the relational plots, fixed a bug where legend entries for the
sizesemantic were incorrect whensize_normextrapolated beyond the range of the data (https://github.com/mwaskom/seaborn/pull/2580).|Fix| In
lmplotandregplot, fixed a bug where the x axis was clamped to the data limits withtruncate=True(https://github.com/mwaskom/seaborn/pull/2576).|Fix| In
lmplot, fixed a bug wheresharey=Falsedid not always work as expected (https://github.com/mwaskom/seaborn/pull/2576).|Fix| In
heatmap, fixed a bug where vertically-rotated y-axis tick labels would be misaligned with their rows (https://github.com/mwaskom/seaborn/pull/2574).|Fix| Fixed an issue that prevented Python from running in
-OOmode while using seaborn (https://github.com/mwaskom/seaborn/pull/2473).|Docs| Improved the API documentation for theme-related functions (https://github.com/mwaskom/seaborn/pull/2573).
|Docs| Added docstring pages for all methods on documented classes (https://github.com/mwaskom/seaborn/pull/2644).
Scientific Software - Peer-reviewed
- Python
Published by mwaskom almost 5 years ago
seaborn - v0.11.2.rc0
This is the first release candidate for seaborn v0.11.2, a backwards-compatible release with bug fixes and targeted enhancements.
Please test and report any bugs or changed behavior though GitHub issues.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom almost 5 years ago
seaborn - seaborn: statistical data visualization
This is a duplicate tag for seaborn v0.11.1.
It is being created so that Zenodo will mint a DOI for the repository corresponding to seaborn's JOSS paper.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom about 5 years ago
seaborn - v0.11.1 (December 2020)
This a bug fix release and is a recommended upgrade for all users on v0.11.0.
Complete release notes are available on the seaborn website.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 5 years ago
seaborn - v0.11.0 (Sepetmber 2020)
This is a major release with important new features, enhancements to existing functions, and changes to the library. Highlights include an overhaul and modernization of the distributions plotting functions, more flexible data specification, new colormaps, and better narrative documentation.
Complete release notes are available on the seaborn website.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 5 years ago
seaborn -
This is the first release candidate for v0.11.0, a major release with several important new features and changes to the library.
Highlights of the new version include:
- A modernization of the distributions module, with the introduction of
displot,histplot, andecdfplot, a complete rewrite ofkdeplot, and substantial enhancements tojointplotandpairplot - Centralized input data processing allowing for both standardization and increased flexibility of long- and wide-form variable specification
- Substantial internal refactoring to support the new distributions functions and planned improvements in other modules
- Warning-based enforcement of keyword-only parameters in most functions
- New perceptually uniform colormaps and better tools for creating custom numeric color palettes
- Improvements to the narrative documentation, including user guide chapters on function types and data structures, along with better cross-linking within the seaborn docs and between the seaborn and matplotlib docs
- Numerous other targeted enhancements and bug fixes
Please test the release by installing from here or with python -m pip install --upgrade --pre seaborn
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 5 years ago
seaborn - v0.10.1 (April 2020)
This is minor release with bug fixes for issues identified since 0.10.0.
- Fixed a bug that appeared within the bootstrapping algorithm on 32-bit systems.
- Fixed a bug where
regplotwould crash on singleton inputs. Now a crash is avoided and regression estimation/plotting is skipped. - Fixed a bug where
heatmapwould ignore user-specified under/over/bad values when recentering a colormap. - Fixed a bug where
heatmapwould use values from masked cells when computing default colormap limits. - Fixed a bug where
despinewould cause an error when trying to trim spines on a matplotlib categorical axis. - Adapted to a change in matplotlib that caused problems with single swarm plots.
- Added the
showfliersparameter toboxenplotto suppress plotting of outlier data points, matching the API ofboxplot. - Avoided seeing an error from statmodels when data with an IQR of 0
is passed to
kdeplot. - Added the
legend.title_fontsizeto theplotting_contextdefinition. - Deprecated several utility functions that are no longer used
internally (
percentiles,sig_stars,pmf_hist, andsort_df).
Scientific Software - Peer-reviewed
- Python
Published by mwaskom about 6 years ago
seaborn - v0.10.0 (January 2020)
This is a major update that is being released simultaneously with version 0.9.1. It has all of the same features (and bugs!) as 0.9.1, but there are important changes to the dependencies.
Most notably, all support for Python 2 has now been dropped. Support for Python 3.5 has also been dropped. Seaborn is now strictly compatible with Python 3.6+.
Minimally supported versions of the dependent PyData libraries have also been increased, in some cases substantially. While seaborn has tended to be very conservative about maintaining compatibility with older dependencies, this was causing increasing pain during development. At the same time, these libraries are now much easier to install. Going forward, seaborn will likely stay close to the Numpy community guidelines for version support.
This release also removes a few previously-deprecated features:
- The
tsplotfunction andseaborn.timeseriesmodule have been removed. Recall thattsplotwas replaced withlineplot. - The
seaborn.apionlyentry-point has been removed. - The
seaborn.linearmodelsmodule (previously renamed toseaborn.regression) has been removed.
Looking forward
Now that seaborn is a Python 3 library, it can take advantage of keyword-only arguments. It is likely that future versions will introduce this syntax, potentially in a breaking way. For guidance, most seaborn functions have a signature that looks like
func(x, y, ..., data=None, **kwargs)
where the **kwargs are specified in the function. Going forward it will likely be necessary to specify data and all subsequent arguments with an explicit key=value mapping. This style has long been used throughout the documentation, and the formal requirement will not be introduced until at least the next major release. Adding this feature will make it possible to enhance some older functions with more modern capabilities (e.g., adding a native hue semantic within functions like jointplot and regplot).
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 6 years ago
seaborn - v0.9.1 (January 2020)
This is a minor release with a number of bug fixes and adaptations to changes in seaborn's dependencies. There are also several new features.
This is the final version of seaborn that will support Python 2.7 or 3.5.
New features
- Added more control over the arrangement of the elements drawn by
clustermapwith the{dendrogram,colors}_ratioandcbar_posparameters. Additionally, the default organization and scaling with different figure sizes has been improved. - Added the
corneroption toPairGridandpairplotto make a grid without the upper triangle of bivariate axes. - Added the ability to seed the random number generator for the bootstrap used to define error bars in several plots. Relevant functions now have a
seedparameter, which can take either fixed seed (typically anint) or a numpy random number generator object (either the newernumpy.random.Generatoror the oldernumpy.random.mtrand.RandomState). - Generalized the idea of "diagonal" axes in
PairGridto any axes that share an x and y variable. - In
PairGrid, thehuevariable is now excluded from the default list of variables that make up the rows and columns of the grid. - Exposed the
layout_padparameter inPairGridand set a smaller default than what matptlotlib sets for more efficient use of space in dense grids. - It is now possible to force a categorical interpretation of the
huevaraible in a relational plot by passing the name of a categorical palette (e.g."deep", or"Set2"). This complements the (previously supported) option of passig a list/dict of colors. - Added the
tree_kwsparameter toclustermapto control the properties of the lines in the dendrogram. - Added the ability to pass hierarchical label names to the
FacetGridlegend, which also fixes a bug inrelplotwhen the same label appeared in diffent semantics. - Improved support for grouping observations based on pandas index information in categorical plots.
Bug fixes and adaptations
- Avoided an error when singular data is passed to
kdeplot, issuing a warning instead. This makespairplotmore robust. - Fixed the behavior of
dropnainPairGridto properly exclude null datapoints from each plot when set toTrue. - Fixed an issue where
regplotcould interfere with other axes in a multi-plot matplotlib figure. - Semantic variables with a
categorydata type will always be treated as categorical in relational plots. - Avoided a warning about color specifications that arose from
boxenploton newer matplotlibs. - Adapted to a change in how matplotlib scales axis margins, which caused multiple calls to
regplotwithtruncate=Falseto progressively expand the x axis limits. Because there are currently limitations on how autoscaling works in matplotlib, the default value fortruncatein seaborn has also been changed toTrue. - Relational plots no longer error when hue/size data are inferred to be numeric but stored with a string datatype.
- Relational plots now consider semantics with only a single value that can be interpreted as boolean (0 or 1) to be categorical, not numeric.
- Relational plots now handle list or dict specifications for
sizescorrectly. - Fixed an issue in
pointplotwhere missing levels of a hue variable would cause an exception after a recent update in matplotlib. - Fixed a bug when setting the rotation of x tick labels on a
FacetGrid. - Fixed a bug where values would be excluded from categorical plots when only one variable was a pandas
Serieswith a non-default index. - Fixed a bug when using
Seriesobjects as arguments forx_partialory_partialinregplot. - Fixed a bug when passing a
normobject and using color annotations inclustermap. - Fixed a bug where annotations were not rearranged to match the clustering in
clustermap. - Fixed a bug when trying to call
setwhile specifying a list of colors for the palette. - Fixed a bug when resetting the color code short-hands to the matplotlib default.
- Avoided errors from stricter type checking in upcoming
numpychanges. - Avoided error/warning in
lineplotwhen plotting categoricals with empty levels. - Allowed
colorsto be passed through to a bivariatekdeplot. - Standardized the output format of custom color palette functions.
- Fixed a bug where legends for numerical variables in a relational plot could show a surprisingly large number of decimal places.
- Improved robustness to missing values in distribution plots.
- Made it possible to specify the location of the
FacetGridlegend using matplotlib keyword arguments.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 6 years ago
seaborn - v0.10.0.rc0
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 6 years ago
seaborn - v0.9.1.rc0
First release candidate for v0.9.1
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 6 years ago
seaborn - v0.9.0 (July 2018)
v0.9.0 (July 2018)
Note: a version of these release notes with working links appears in the online documentation.
This is a major release with several substantial and long-desired new features. There are also updates/modifications to the themes and color palettes that give better consistency with matplotlib 2.0 and some notable API changes.
New relational plots
Three completely new plotting functions have been added: catplot, scatterplot, and lineplot. The first is a figure-level interface to the latter two that combines them with a FacetGrid. The functions bring the high-level, dataset-oriented API of the seaborn categorical plotting functions to more general plots (scatter plots and line plots).
These functions can visualize a relationship between two numeric variables while mapping up to three additional variables by modifying hue, size, and/or style semantics. The common high-level API is implemented differently in the two functions. For example, the size semantic in scatterplot scales the area of scatter plot points, but in lineplot it scales width of the line plot lines. The API is dataset-oriented, meaning that in both cases you pass the variable in your dataset rather than directly specifying the matplotlib parameters to use for point area or line width.
Another way the relational functions differ from existing seaborn functionality is that they have better support for using numeric variables for hue and size semantics. This functionality may be propagated to other functions that can add a hue semantic in future versions; it has not been in this release.
The lineplot function also has support for statistical estimation and is replacing the older tsplot function, which still exists but is marked for removal in a future release. lineplot is better aligned with the API of the rest of the library and more flexible in showing relationships across additional variables by modifying the size and style semantics independently. It also has substantially improved support for date and time data, a major pain factor in tsplot. The cost is that some of the more esoteric options in tsplot for representing uncertainty (e.g. a colormapped KDE of the bootstrap distribution) have not been implemented in the new function.
There is quite a bit of new documentation that explains these new functions in more detail, including detailed examples of the various options in the API reference and a more verbose tutorial.
These functions should be considered in a "stable beta" state. They have been thoroughly tested, but some unknown corner cases may remain to be found. The main features are in place, but not all planned functionality has been implemented. There are planned improvements to some elements, particularly the default legend, that are a little rough around the edges in this release. Finally, some of the default behavior (e.g. the default range of point/line sizes) may change somewhat in future releases.
Updates to themes and palettes
Several changes have been made to the seaborn style themes, context scaling, and color palettes. In general the aim of these changes was to make the seaborn styles more consistent with the style updates in matplotlib 2.0 and to leverage some of the new style parameters for better implementation of some aspects of the seaborn styles. Here is a list of the changes:
- Reorganized and updated some axes_style/plotting_context parameters to take advantage of improvements in the matplotlib 2.0 update. The biggest change involves using several new parameterss in the "style" spec while moving parameters that used to implement the corresponding aesthetics to the "context" spec. For example, axes spines and ticks are now off instead of having their width/length zeroed out for the darkgrid style. That means the width/length of these elements can now be scaled in different contexts. The effect is a more cohesive appearance of the plots, especially in larger contexts. These changes include only minimal support for the 1.x matplotlib series. Users who are stuck on matplotlib 1.5 but wish to use seaborn styling may want to use the seaborn parameters that can be accessed through the matplotlib stylesheet interface.
- Updated the seaborn palettes ("deep", "muted", "colorblind", etc.) to correspond with the new 10-color matplotlib default. The legacy palettes are now available at "deep6", "muted6", "colorblind6", etc. Additionally, a few individual colors were tweaked for better consistency, aesthetics, and accessibility.
- Calling color_palette (or set_palette) with a named qualitative palettes (i.e. one of the seaborn palettes, the colorbrewer qualitative palettes, or the matplotlib matplotlib tableau-derived palettes) and no specified number of colors will return all of the colors in the palette. This means that for some palettes, the returned list will have a different length than it did in previous versions.
- Enhanced color_palette to accept a parameterized specification of a cubehelix palette in in a string, prefixed with
"ch:"(e.g."ch:-.1,.2,l=.7"). Note that keyword arguments can be spelled out or referenced using only their first letter. Reversing the palette is accomplished by appending"_r", as with other matplotlib colormaps. This specification will be accepted by any seaborn function with apalette=parameter. - Slightly increased the base font sizes in plotting_context and increased the scaling factors for
"talk"and"poster"contexts. - Calling set will now call set_color_codes to re-assign the single letter color codes by default
API changes
A few functions have been renamed or have had changes to their default parameters.
- The
factorplotfunction has been renamed to catplot. The new name ditches the original R-inflected terminology to use a name that is more consistent with terminology in pandas and in seaborn itself. This change should hopefully make catplot easier to discover, and it should make more clear what its role is.factorplotstill exists and will pass its arguments through to catplot with a warning. It may be removed eventually, but the transition will be as gradual as possible. - The other reason that the
factorplotname was changed was to ease another alteration which is that the defaultkindin catplot is now"strip"(corresponding to stripplot). This plots a categorical scatter plot which is usually a much better place to start and is more consistent with the default in relplot. The old default style infactorplot("point", corresponding to pointplot) remains available if you want to show a statistical estimation. - The
lvplotfunction has been renamed to boxenplot. The "letter-value" terminology that was used to name the original kind of plot is obscure, and the abbreviation tolvdid not help anything. The new name should make the plot more discoverable by describing its format (it plots multiple boxes, also known as "boxen"). As withfactorplot, thelvplotfunction still exists to provide a relatively smooth transition. - Renamed the
sizeparameter toheightin multi-plot grid objects (FacetGrid, PairGrid, and JointGrid) along with functions that use them (factorplot, lmplot, pairplot, and jointplot) to avoid conflicts with thesizeparameter that is used inscatterplotandlineplot(necessary to make relplot work) and also makes the meaning of the parameter a bit more clear. - Changed the default diagonal plots in pairplot to use `func`:kdeplot` when a
"hue"dimension is used. - Deprecated the statistical annotation component of JointGrid. The method is still available but will be removed in a future version.
- Two older functions that were deprecated in earlier versions,
coefplotandinteractplot, have undergone final removal from the code base.
Documentation improvements
There has been some effort put into improving the documentation. The biggest change is that the introduction to the library has been completely rewritten to provide much more information and, critically, examples. In addition to the high-level motivation, the introduction also covers some important topics that are often sources of confusion, like the distinction between figure-level and axes-level functions, how datasets should be formatted for use in seaborn, and how to customize the appearance of the plots.
Other improvements have been made throughout, most notably a thorough re-write of the categorical tutorial categorical_tutorial.
Other small enhancements and bug fixes
- Changed rugplot to plot a matplotlib
LineCollectioninstead of manyLine2Dobjects, providing a big speedup for large arrays. - Changed the default off-diagonal plots to use scatterplot. (Note that the
"hue"currently draws three separate scatterplots instead of using the hue semantic of the scatterplot function). - Changed color handling when using kdeplot with two variables. The default colormap for the 2D density now follows the color cycle, and the function can use
colorandlabelkwargs, adding more flexibility and avoiding a warning when using with multi-plot grids. - Added the
subplot_kwsparameter to PairGrid for more flexibility. - Removed a special case in PairGrid that defaulted to drawing stacked histograms on the diagonal axes.
- Fixed jointplot/JointGrid and regplot so that they now accept list inputs.
- Fixed a bug in FacetGrid when using a single row/column level or using
col_wrap=1. - Fixed functions that set axis limits so that they preserve auto-scaling state on matplotlib 2.0.
- Avoided an error when using matplotlib backends that cannot render a canvas (e.g. PDF).
- Changed the install infrastructure to explicitly declare dependencies in a way that
pipis aware of. This means thatpip install seabornwill now work in an empty environment. Additionally, the dependencies are specified with strict minimal versions. - Updated the testing infrastructure to execute tests with pytest (although many individual tests still use nose assertion).
Scientific Software - Peer-reviewed
- Python
Published by mwaskom almost 8 years ago
seaborn - v0.8.1 (September 2017)
v0.8.1 (September 2017)
Added a warning in
FacetGridwhen passing a categorical plot function without specifyingorder(orhue_orderwhenhueis used), which is likely to produce a plot that is incorrect.Improved compatibility between
FacetGridorPairGridand interactive matplotlib backends so that the legend no longer remains inside the figure when usinglegend_out=True.Changed categorical plot functions with small plot elements to use
dark_paletteinstead oflight_palettewhen generating a sequential palette from a specified color.Improved robustness of
kdeplotanddistplotto data with fewer than two observations.Fixed a bug in
clustermapwhen usingyticklabels=False.Fixed a bug in
pointplotwhere colors were wrong if exactly three points were being drawn.Fixed a bug in
pointplotwhere legend entries for missing data appeared with empty markers.Fixed a bug in
clustermapwhere an error was raised when annotating the main heatmap and showing category colors.Fixed a bug in
clustermapwhere row labels were not being properly rotated when they overlapped.Fixed a bug in
kdeplotwhere the maximum limit on the density axes was not being updated when multiple densities were drawn.Improved compatibility with future versions of pandas.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 8 years ago
seaborn - v0.8.0 (July 2017)
The default style is no longer applied when seaborn is imported. It is now necessary to explicitly call
setor one or more ofset_style,set_context, andset_palette. Correspondingly, theseaborn.apionlymodule has been deprecated.Changed the behavior of
heatmap(and by extensionclustermap) when plotting divergent dataesets (i.e. when thecenterparameter is used). Instead of extending the lower and upper limits of the colormap to be symettrical around thecentervalue, the colormap is modified so that its middle color corresponds tocenter. This means that the full range of the colormap will not be used (unless the data or specifiedvminandvmaxare symettric), but the upper and lower limits of the colorbar will correspond to the range of the data. See the Github pull request (#1184) for examples of the behavior.Removed automatic detection of diverging data in
heatmap(and by extensionclustermap). If you want the colormap to be treated as diverging (see above), it is now necessary to specify thecentervalue. When no colormap is specified, specifyingcenterwill still change the default to be one that is more appropriate for displaying diverging data.Added four new colormaps, created using viscm for perceptual uniformity. The new colormaps include two sequential colormaps (
"rocket"and"mako") and two diverging colormaps ("icefire"and"vlag"). These colormaps are registered with matplotlib on seaborn input and the colormap objects can be accessed in theseaborn.cmnamespace.Changed the default
heatmapcolormaps to be"rocket"(in the case of sequential data) or"icefire"(in the case of diverging data). Note that this change reverses the direction of the luminance ramp from the previous defaults. While potentially confusing and disruptive, this change better aligns the seaborn defaults with the new matplotlib default colormap ("viridis") and arguably better aligns the semantics of a "heat" map with the appearance of the colormap.Added
"auto"as a (default) option for tick labels inheatmapandclustermap. This will try to estimate how many ticks can be labeled without the text objects overlapping, which should improve performance for larger matrices.Added the
dodgeparameter to boxplot, violinplot, and barplot to allow use ofhuewithout changing the position or width of the plot elements, as when thehuevarible is not nested within the main categorical variable.Correspondingly, the
splitparameter for stripplot and swarmplot has been renamed tododgefor consistency with the other categorical functions (and for differentiation from the meaning ofsplitin violinplot).Added the ability to draw a colorbar for a bivariate kdeplot with the
cbarparameter (and relatedcbar_axandcbar_kwsparameters).Added the ability to use error bars to show standard deviations rather than bootstrap confidence intervals in most statistical functions by putting
ci="sd".Allow side-specific offsets in
despine.Figure size is no longer part of the seaborn plotting context parameters.
Put a cap on the number of bins used in
jointplotfortype=="hex"to avoid hanging when the reference rule prescribes too many.Turn off dendrogram axes in
clustermaprather than setting the background color to white.New matplotlib qualitative palettes (e.g.
"tab10") are now handled correctly.Some modules and functions have been internally reorganized; there should be no effect on code that uses the
seabornnamespace.Added a deprecation warning to
tsplotfunction to indicate that it will be removed or replaced with a substantially altered version in a future release.The
interactplotandcoefplotfunctions are officially deprecated and will be removed in a future release.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom almost 9 years ago
seaborn - v0.7.1 (June 2016)
- Added the ability to put "caps" on the error bars that are drawn by
barplotorpointplot(and, by extension,factorplot). Additionally, the line width of the error bars can now be controlled. These changes involve the new parameterscapsizeanderrwidth. See the github pull request for examples of usage. - Improved the row and column colors display in
clustermap. It is now possible to pass Pandas objects for these elements and, when possible, the semantic information in the Pandas objects will be used to add labels to the plot. When Pandas objects are used, the color data is matched against the main heatmap based on the index, not on position. This is more accurate, but it may lead to different results if current code assumed positional matching. - Improved the luminance calculation that determines the annotation color in
heatmap. - The
annotparameter ofheatmapnow accepts a rectangular dataset in addition to a boolean value. If a dataset is passed, its values will be used for the annotations, while the main dataset will be used for the heatmap cell colors. - Fixed a bug in
FacetGridthat appeared when usingcol_wrapwith missingcollevels. - Made it possible to pass a tick locator object to the
heatmapcolorbar. - Made it possible to use different styles (e.g., step) for
PairGridhistograms when there are multiple hue levels. - Fixed a bug in scipy-based univariate kernel density bandwidth calculation.
- The
reset_origfunction (and, by extension, importingseaborn.apionly) resets matplotlib rcParams to their values at the time seaborn itself was imported, which should work better with rcParams changed by the jupyter notebook backend. - Removed some objects from the top-level
seabornnamespace. - Improved unicode compatibility in
FacetGrid.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom almost 10 years ago
seaborn - v0.7.0 (January 2016)
This is a major release from 0.6. The main new feature is swarmplot which implements the beeswarm approach for drawing categorical scatterplots. There are also some performance improvements, bug fixes, and updates for compatibility with new versions of dependencies.
- Added the swarmplot function, which draws beeswarm plots. These are
categorical scatterplots, similar to those produced by stripplot,
but position of the points on the categorical axis is chosen to
avoid overlapping points. See the
categorical plot tutorial for more
information.
- Added an additional rule when determining category order in
categorical plots. Now, when numeric variables are used in a
categorical role, the default behavior is to sort the unique levels
of the variable (i.e they will be in proper numerical order). This
can still be overridden by the appropriate {*_}order parameter,
and variables with a category datatype will still follow the
category order even if the levels are strictly numerical.
- Changed some of the stripplot defaults to be closer to swarmplot.
Points are somewhat smaller, have no outlines, and are not split by
default when using hue.
- Changed how stripplot draws points when using hue nesting with
split=False so that the different hue levels are not drawn
strictly on top of each other.
- Improve performance for large dendrograms in clustermap.
- Added font.size to the plotting context definition so that the
default output from plt.text will be scaled appropriately.
- Fixed a bug in clustermap when fastcluster is not installed.
- Fixed a bug in the zscore calculation in clustermap.
- Fixed a bug in distplot where sometimes the default number of bins
would not be an integer.
- Fixed a bug in stripplot where a legend item would not appear for a
hue level if there were no observations in the first group of
points.
- Heatmap colorbars are now rasterized for better performance in
vector plots.
- Added workarounds for some matplotlib boxplot issues, such as
strange colors of outlier points.
- Added workarounds for an issue where violinplot edges would be
missing or have random colors.
- Added a workaround for an issue where only one heatmap cell would be
annotated on some matplotlib backends.
- Fixed a bug on newer versions of matplotlib where a colormap would
be erroneously applied to scatterplots with only three observations.
- Updated seaborn for compatibility with matplotlib 1.5.
- Added compatibility for various IPython (and Jupyter) versions in
functions that use widgets.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 10 years ago
seaborn - v0.6.0 (June 2015)
This is a major release from 0.5. The main objective of this release was to unify the API for categorical plots, which means that there are some relatively large API changes in some of the older functions. See below for details of those changes, which may break code written for older versions of seaborn. There are also some new functions (stripplot, and countplot), numerous enhancements to existing functions, and bug fixes.
Additionally, the documentation has been completely revamped and expanded for the 0.6 release. Now, the API docs page for each function has multiple examples with embedded plots showing how to use the various options. These pages should be considered the most comprehensive resource for examples, and the tutorial pages are now streamlined and oriented towards a higher-level overview of the various features.
Changes and updates to categorical plots
In version 0.6, the "categorical" plots have been unified with a common API. This new category of functions groups together plots that show the relationship between one numeric variable and one or two categorical variables. This includes plots that show distribution of the numeric variable in each bin (boxplot, violinplot, and stripplot) and plots that apply a statistical estimation within each bin (pointplot, barplot, and countplot). There is a new tutorial chapter
The categorical functions now each accept the same formats of input data and can be invoked in the same way. They can plot using long- or wide-form data, and can be drawn vertically or horizontally. When long-form data is used, the orientation of the plots is inferred from the types of the input data. Additionally, all functions natively take a hue variable to add a second layer of categorization.
With the (in some cases new) API, these functions can all be drawn correctly by FacetGrid. However, factorplot can also now create faceted verisons of any of these kinds of plots, so in most cases it will be unnecessary to use FacetGrid directly. By default, factorplot draws a point plot, but this is controlled by the kind parameter.
Here are details on what has changed in the process of unifying these APIs:
- Changes to boxplot and violinplot will probably be the most disruptive. Both functions maintain backwards-compatibility in terms of the kind of data they can accept, but the syntax has changed to be more similar to other seaborn functions. These functions are now invoked with x and/or y parameters that are either vectors of data or names of variables in a long-form DataFrame passed to the new data parameter. You can still pass wide-form DataFrames or arrays to data, but it is no longer the first positional argument. See the github pull request for more information on these changes and the logic behind them.
- As pointplot and barplot can now plot with the major categorical variable on the y axis, the x_order parameter has been renamed to order.
- Added a hue argument to boxplot and violinplot, which allows for nested grouping the plot elements by a third categorical variable. For violinplot, this nesting can also be accomplished by splitting the violins when there are two levels of the hue variable (using split=True). To make this functionality feasible, the ability to specify where the plots will be draw in data coordinates has been removed. These plots now are drawn at set positions, like (and identical to) barplot and pointplot.
- Added a palette parameter to boxplot/violinplot. The color parameter still exists, but no longer does double-duty in accepting the name of a seaborn palette. palette supersedes color so that it can be used with a FacetGrid.
Along with these API changes, the following changes/enhancements were made to the plotting functions:
- The default rules for ordering the categories has changed. Instead of automatically sorting the category levels, the plots now show the levels in the order they appear in the input data (i.e., the order given by Series.unique()). Order can be specified when plotting with the order and hue_order parameters. Additionally, when variables are pandas objects with a "categorical" dtype, the category order is inferred from the data object. This change also affects FacetGrid and PairGrid.
- Added the scale and scale_hue parameters to violinplot. These control how the width of the violins are scaled. The default is area, which is different from how the violins used to be drawn. Use scale='width' to get the old behavior.
- Used a different style for the box kind of interior plot in violinplot, which shows the whisker range in addition to the quartiles. Use inner='quartile' to get the old style.
New plotting functions
- Added the stripplot function, which draws a scatterplot where one of the variables is categorical. This plot has the same API as boxplot and violinplot. It is useful both on its own and when composed with one of these other plot kinds to show both the observations and underlying distribution.
- Added the countplot function, which uses a bar plot representation to show counts of variables in one or more categorical bins. This replaces the old approach of calling barplot without a numeric variable.
Other additions and changes
- The corrplot and underlying symmatplot functions have been deprecated in favor of heatmap, which is much more flexible and robust. These two functions are still available in version 0.6, but they will be removed in a future version.
- Added the setcolorcodes function and the
color_codesargument to set and set_palette. This changes the interpretation of shorthand color codes (i.e. "b", "g", k", etc.) within matplotlib to use the values from one of the named seaborn palettes (i.e. "deep", "muted", etc.). That makes it easier to have a more uniform look when using matplotlib functions directly with seaborn imported. This could be disruptive to existing plots, so it does not happen by default. It is possible this could change in the future. - The color_palette function no longer trims palettes that are longer than 6 colors when passed into it.
- Added the
as_hexmethod to color palette objects, to return a list of hex codes rather than rgb tuples. - jointplot now passes additional keyword arguments to the function used to draw the plot on the joint axes.
- Changed the default
linewidthsin heatmap and clustermap to 0 so that larger matrices plot correctly. This parameter still exists and can be used to get the old effect of lines demarcating each cell in the heatmap (the old defaultlinewidthswas 0.5). - heatmap and clustermap now automatically use a mask for missing values, which previously were shown with the "under" value of the colormap per default plt.pcolormesh behavior.
- Added the
seaborn.crayonsdictionary and the crayon_palette function to define colors from the 120 box (!) of Crayola crayons. - Added the
line_kwsparameter to residplot to change the style of the lowess line, when used. - Added open-ended
**kwargsto theadd_legendmethod on FacetGrid and PairGrid, which will pass additional keyword arguments through when calling the legend function on theFigureorAxes. - Added the
gridspec_kwsparameter to FacetGrid, which allows for control over the size of individual facets in the grid to emphasize certain plots or account for differences in variable ranges. - The interactive palette widgets now show a continuous colorbar, rather than a discrete palette, when as_cmap is True.
- The default Axes size for pairplot and PairGrid is now slightly smaller.
- Added the
shade_lowestparameter to kdeplot which will set the alpha for the lowest contour level to 0, making it easier to plot multiple bivariate distributions on the same axes. - The
heightparameter of rugplot is now interpreted as a function of the axis size and is invariant to changes in the data scale on that axis. The rug lines are also slightly narrower by default. - Added a catch in distplot when calculating a default number of bins. For highly skewed data it will now use sqrt(n) bins, where previously the reference rule would return "infinite" bins and cause an exception in matplotlib.
- Added a ceiling (50) to the default number of bins used for distplot histograms. This will help avoid confusing errors with certain kinds of datasets that heavily violate the assumptions of the reference rule used to get a default number of bins. The ceiling is not applied when passing a specific number of bins.
- The various property dictionaries that can be passed to
plt.boxplotare now applied after the seaborn restyling to allow for full customizability. - Added a
savefigmethod to JointGrid that defaults to a tight bounding box to make it easier to save figures using this class, and set a tight bbox as the default for thesavefigmethod on other Grid objects. - You can now pass an integer to the
xticklabelsandyticklabelsparameter of heatmap (and, by extension, clustermap). This will make the plot use the ticklabels inferred from the data, but only plot everynlabel, wherenis the number you pass. This can help when visualizing larger matrices with some sensible ordering to the rows or columns of the dataframe. - Added "figure.facecolor" to the style parameters and set the default to white.
- The load_dataset function now caches datasets locally after downloading them, and uses the local copy on subsequent calls.
Bug fixes
- Fixed bugs in clustermap where the mask and specified ticklabels were not being reorganized using the dendrograms.
- Fixed a bug in FacetGrid and PairGrid that lead to incorrect legend labels when levels of the
huevariable appeared inhue_orderbut not in the data. - Fixed a bug in FacetGrid.setxticklabels or FacetGrid.setyticklabels when
col_wrapis being used. - Fixed a bug in PairGrid where the
hue_orderparameter was ignored. - Fixed two bugs in despine that caused errors when trying to trim the spines on plots that had inverted axes or no ticks.
- Improved support for the
margin_titlesoption in FacetGrid, which can now be used with a legend.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom almost 11 years ago
seaborn - v0.5.1 (November 2014)
This is a bugfix release that includes a workaround for an issue in matplotlib 1.4.2 and fixes for two bugs in functions that were new in 0.5.0. - Implemented a workaround for a bug in matplotlib 1.4.2 that prevented point markers from being drawn when the seaborn styles had been set. See this github issue for more information. - Fixed a bug in heatmap where the mask was vertically reversed relative to the data. - Fixed a bug in clustermap when using nested lists of side colors.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 11 years ago
seaborn - v0.5.0 (November 2014)
This is a major release from 0.4. Highlights include new functions for plotting heatmaps, possibly while applying clustering algorithms to discover structured relationships. These functions are complemented by new custom colormap functions and a full set of IPython widgets that allow interactive selection of colormap parameters. The palette tutorial has been rewritten to cover these new tools and more generally provide guidance on how to use color in visualizations. There are also a number of smaller changes and bugfixes.
Plotting functions
- Added the heatmap function for visualizing a matrix of data by color-encoding the values. See the docs for more information.
- Added the clustermap function for clustering and visualizing a matrix of data, with options to label individual rows and columns by colors. See the docs for more information. This work was lead by Olga Botvinnik.
- lmplot and pairplot get a new keyword argument,
markers. This can be a single kind of marker or a list of different markers for each level of thehuevariable. Using different markers for different hues should let plots be more comprehensible when reproduced to black-and-white (i.e. when printed). See the github pull request for examples. - More generally, there is a new keyword argument in FacetGrid and
PairGrid,
hue_kws. This similarly lets plot aesthetics vary across the levels of the hue variable, but more flexibily.hue_kwsshould be a dictionary that maps the name of keyword arguments to lists of values that are as long as the number of levels of the hue variable. - The argument
subplot_kwshas been added toFacetGrid. This allows for faceted plots with custom projections, including maps with Cartopy.
Color palettes
- Added two new functions to create custom color palettes. For
sequential palettes, you can use the lightpalette function, which
takes a seed color and creates a ramp from a very light, desaturated
variant of it. For diverging palettes, you can use the
divergingpalette function to create a balanced ramp between two
endpoints to a light or dark midpoint. See the
palette tutorial
for more information. - Added the ability to specify the seed color for lightpalette and
darkpalette as a tuple of
huslorhlsspace values or as a namedxkcdcolor. The interpretation of the seed color is now provided by the newinputparameter to these functions. - Added several new interactive palette widgets: choosecolorbrewerpalette, chooselightpalette, choosedarkpalette, and choosedivergingpalette. For consistency, renamed the cubehelix widget to choosecubehelixpalette (and fixed a bug where the cubehelix palette was reversed). These functions also now return either a color palette list or a matplotlib colormap when called, and that object will be live-updated as you play with the widget. This should make it easy to iterate over a plot until you find a good representation for the data. See the Github pull request or this notebook (download it to use the widgets) for more information.
- Overhauled the color palette tutorial to organize the discussion by class of color palette and provide more motivation behind the various choices one might make when choosing colors for their data.
Bug fixes
- Fixed a bug in PairGrid that gave incorrect results (or a crash) when the input DataFrame has a non-default index.
- Fixed a bug in PairGrid where passing columns with a date-like datatype raised an exception.
- Fixed a bug where lmplot would show a legend when the hue variable was also used on either the rows or columns (making the legend redundant).
- Worked around a matplotlib bug that was forcing outliers in boxplot to appear as blue.
- kdeplot now accepts pandas Series for the
dataanddata2arguments. - Using a non-default correlation method in corrplot now implies
sig_stars=Falseas the permutation test used to significance values for the correlations uses a pearson metric. - Removed
pdf.fonttypefrom the style definitions, as the value used in version 0.4 resulted in very large PDF files.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 11 years ago
seaborn - v0.4.0 (September 2014)
This is a major release from 0.3. Highlights include new approaches for quick, high-level dataset exploration (along with a more flexible interface and easy creation of perceptually-appropriate color palettes using the cubehelix system. Along with these additions, there are a number of smaller changes that make visualizing data with seaborn easier and more powerful.
Plotting functions
- A new object, PairGrid, and a corresponding function pairplot, for drawing grids of pairwise relationships in a dataset. This style of plot is sometimes called a "scatterplot matrix", but the representation of the data in PairGrid is flexible and many styles other than scatterplots can be used. See the docs for more information. Note: due to a bug in older versions of matplotlib, you will have best results if you use these functions with matplotlib 1.4 or later.
- The rules for choosing default color palettes when variables are
mapped to different colors have been unified (and thus changed in
some cases). Now when no specific palette is requested, the current
global color palette will be used, unless the number of variables to
be mapped exceeds the number of unique colors in the palette, in
which case the
"husl"palette will be used to avoid cycling. - Added a keyword argument
hist_normto distplot. When a distplot is now drawn without a KDE or parametric density, the histogram is drawn as counts instead of a density. This can be overridden by by settinghist_normtoTrue. - When using FacetGrid with a
huevariable, the legend is no longer drawn by default when you call FacetGrid.map. Instead, you have to call FacetGrid.add_legend manually. This should make it easier to layer multiple plots onto the grid without having duplicated legends. - Made some changes to factorplot so that it behaves better when not
all levels of the
xvariable are represented in each facet. - Added the
logxoption to regplot for fitting the regression in log space. - When violinplot encounters a bin with only a single observation, it will now plot a horizontal line at that value instead of erroring out.
Style and color palettes
- Added the cubehelixpalette function for generating sequential palettes from the cubehelix system. See the palette docs for more information on how these palettes can be used. There is also the choosecubehelix which will launch an interactive app to select cubehelix parameters in the notebook.
- Added the xkcdpalette and the `xkcdrgb` dictionary so that colors can be specified with names from the xkcd color survey.
- Added the
font_scaleoption to plottingcontext, setcontext, and set.font_scalecan independently increase or decrease the size of the font elements in the plot. - Font-handling should work better on systems without Arial installed.
This is accomplished by adding the
font.sans-seriffield to theaxes_styledefinition with Arial and Liberation Sans prepended to matplotlib defaults. The font family can also be set through thefontkeyword argument in set. Due to matplotlib bugs, this might not work as expected on matplotlib 1.3. - The despine function gets a new keyword argument
offset, which replaces the deprecated offset_spines function. You no longer need to offset the spines before plotting data. - Added a default value for
pdf.fonttypeso that text in PDFs is editable in Adobe Illustrator.
Other API Changes
- Removed the deprecated
set_color_paletteandpalette_contextfunctions. These were replaced in version 0.3 by the setpalette function and ability to use colorpalette directly in awithstatement. - Removed the ability to specify a
nogridstyle, which was renamed towhitein 0.3.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 11 years ago
seaborn - 0.3.1 (April 2014)
This is a minor release from 0.3 with fixes for several bugs.
Plotting functions
- The size of the points in pointplot and factorplot is now scaled with the linewidth for better aesthetics across different plotting contexts.
- The pointplot glyphs for different levels of the hue variable are drawn at different z-orders so that they appear uniform.
Bug Fixes
- Fixed a bug in FacetGrid (and thus affecting lmplot and factorplot) that appeared when
col_wrapwas used with a number of facets that did not evenly divide into the column width. - Fixed an issue where the support for kernel density estimates was sometimes computed incorrectly.
- Fixed a problem where
huevariable levels that were not strings were missing in FacetGrid legends. - When passing a color palette list in a
withstatement, the entire palette is now used instead of the first six colors.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom about 12 years ago
seaborn - v0.3.0 (March 2014)
v0.3.0 (March 2014)
This is a major release from 0.2 with a number of enhancements to the plotting capabilities and styles. Highlights include FacetGrid, factorplot, jointplot, and an overhaul to style management. There is also lots of new documentation, including an example gallery and reorganized tutorial.
New plotting functions
- The FacetGrid class adds a new form of functionality to seaborn, providing a way to abstractly structure a grid of plots corresponding to subsets of a dataset. It can be used with a wide variety of plotting functions (including most of the matplotlib and seaborn APIs. See the tutorial for more information.
- Version 0.3 introduces the factorplot function, which is similar in spirit to lmplot but intended for use when the main independent variable is categorical instead of quantitative. factorplot can draw a plot in either a point or bar representation using the corresponding Axes-level functions pointplot and barplot (which are also new). Additionally, the factorplot function can be used to draw box plots on a faceted grid. For examples of how to use these functions, you can refer to the tutorial.
- Another new function is jointplot, which is built using the new JointGrid object. jointplot generalizes the behavior of regplot in previous versions of seaborn (regplot has changed somewhat in 0.3; see below for details) by drawing a bivariate plot of the relationship between two variables with their marginal distributions drawn on the side of the plot. With jointplot, you can draw a scatterplot or regression plot as before, but you can now also draw bivariate kernel densities or hexbin plots with appropriate univariate graphs for the marginal distributions. Additionally, it's easy to use JointGrid directly to build up more complex plots when the default methods offered by jointplot are not suitable for your visualization problem. The tutorial or JointGrid has more examples of how this object can be useful.
- The residplot function complements regplot and can be quickly used
to diagnose problems with a linear model by calculating and plotting
the residuals of a simple regression. There is also a
"resid"kind for jointplot.
API changes
- The most noticeable change will be that regplot no longer produces a
multi-component plot with distributions in marginal axes. Instead.
regplot is now an "Axes-level" function that can be plotted into any
existing figure on a specific set of axes. regplot and lmplot have
also been unified (the latter uses the former behind the scenes), so
all options for how to fit and represent the regression model can be
used for both functions. To get the old behavior
of regplot, use jointplot with
kind="reg". - As noted above, lmplot has been rewritten to exploit the FacetGrid
machinery. This involves a few changes. The
colorkeyword argument has been replaced withhue, for better consistency across the package. Thehueparameter will always take a variable name, whilecolorwill take a color name or (in some cases) a palette. The lmplot function now returns the FacetGrid used to draw the plot instance. - The functions that interact with matplotlib rc parameters have been
updated and standardized. There are now three pairs of functions,
axesstyle and setstyle, plottingcontext and setcontext, and
colorpalette and setpalette. In each case, the pairs take the
exact same arguments. The first function defines and returns the
parameters, and the second sets the matplotlib defaults.
Additionally, the first function in each pair can be used in a
withstatement to temporarily change the defaults. Both the style and context functions also now accept a dictionary of matplotlib rc parameters to override the seaborn defaults, and set now also takes a dictionary to update any of the matplotlib defaults. See the tutorial for more information. - The
nogridstyle has been deprecated and changed towhitefor more uniformity (i.e. there are nowdarkgrid,dark,whitegrid, andwhitestyles).
Other changes
Using the package
- If you want to use plotting functions provided by the package
without setting the matplotlib style to a seaborn theme, you can now
do
import seaborn.apionly as snsorfrom seaborn.apionly import lmplot, etc. This is using the (also new) reset_orig function, which returns the rc parameters to what they are at matplotlib import time — i.e. they will respect any custom matplotlibrc settings on top of the matplotlib defaults. - The dependency load of the package has been reduced. It can now be
installed and used with only
numpy,scipy,matplotlib, andpandas. Althoughstatsmodelsis still recommended for full functionality, it is not required.
Plotting functions
- lmplot (and regplot) have two new options for fitting regression
models:
lowessandrobust. The former fits a nonparametric smoother, while the latter fits a regression using methods that are less sensitive to outliers. - The regression uncertainty in lmplot and regplot is now estimated with fewer bootstrap iterations, so plotting should be faster.
- The univariate kdeplot can now be drawn as a cumulative density plot.
- Changed interactplot to use a robust calculation of the data range when finding default limits for the contour colormap to work better when there are outliers in the data.
Style
- There is a new style,
dark, which shares most features withdarkgridbut does not draw a grid by default. - There is a new function, offset_spines, and a corresponding option
in despine called
trim. Together, these can be used to make plots where the axis spines are offset from the main part of the figure and limited within the range of the ticks. This is recommended for use with theticksstyle. - Other aspects of the seaborn styles have been tweaked for more attractive plots.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom about 12 years ago
seaborn - v0.2.1 (January 2014)
This is a bugfix release, with no new features.
Bug fixes
- Changed the mechanics of
violinplot()andboxplot()when using aSeriesobject as data and performing agroupbyto assign data to bins to address a problem that arises in Pandas 0.13. - Additionally fixed the
groupbycode to work with all styles of group specification (specifically, using a dictionary or a function now works). - Fixed a bug where artifacts from the kde fitting could undershoot and create a plot where the density axis starts below 0.
- Ensured that data used for kde fitting is double-typed to avoid a low-level statsmodels error.
- Changed the implementation of the histogram bin-width reference rule to take a ceiling of the estimated number of bins.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 12 years ago
seaborn - v0.2.0 (December 2013)
This is a major release from 0.1 with a number of API changes, enhancements, and bug fixes.
Highlights include an overhaul of timeseries plotting to work
intelligently with dataframes, the new function interactplot() for
visualizing continuous interactions, bivariate kernel density estimates
in kdeplot(), and significant improvements to color palette handling.
Version 0.2 also introduces experimental support for Python 3.
In addition to the library enhancements, the documentation has been substantially rewritten to reflect the new features and improve the presentation of the ideas behind the package.
API changes
- The
tsplot()function was rewritten to accept data in a long-formDataFrameand to plot different traces by condition. This introduced a relatively minor but unavoidable API change, where instead of doingsns.tsplot(time, heights), you now must dosns.tsplot(heights, time=time)(thetimeparameter is now optional, for quicker specification of simple plots). Additionally, the"obs_traces"and"obs_points"error styles intsplot()have been renamed to"unit_traces"and"unit_points", respectively. - Functions that fit kernel density estimates (
kdeplot()andviolinplot()) now usestatsmodelsinstead ofscipy, and the parameters that influence the density estimate have changed accordingly. This allows for increased flexibility in specifying the bandwidth and kernel, and smarter choices for defining the range of the support. Default options should produce plots that are very close to the old defaults. - The
kdeplot()function now takes a second positional argument of data for drawing bivariate densities. - The
violin()function has been changed toviolinplot(), for consistency. In 0.2,violinwill still work, but it will fire aUserWarning.
New plotting functions
- The
interactplot()function draws a contour plot for an interactive linear model (i.e., the contour showsy-hatfrom the modely ~ x1 * x2) over a scatterplot between the two predictor variables. This plot should aid the understanding of an interaction between two continuous variables. - The
kdeplot()function can now draw a bivariate density estimate as a contour plot if provided with two-dimensional input data. - The
palplot()function provides a simple grid-based visualization of a color palette.
Other changes
Plotting functions
- The
corrplot()function can be drawn without the correlation coefficient annotation and with variable names on the side of the plot to work with large datasets. - Additionally,
corrplot()sets the color palette intelligently based on the direction of the specified test. - The
distplot()histogram uses a reference rule to choose the bin size if it is not provided. - Added the
x_binsoption inlmplot()for binning a continuous predictor variable, allowing for clearer trends with many datapoints. - Enhanced support for labeling plot elements and axes based on
nameattributes in several distribution plot functions andtsplot()for smarter Pandas integration. - Scatter points in
lmplot()are slightly transparent so it is easy to see where observations overlap. - Added the
orderparameter toboxplot()andviolinplot()to control the order of the bins when using a Pandas object. - When an
axargument is not provided to a plotting function, it grabs the currently active axis instead of drawing a new one.
Color palettes
- Added the
dark_palette()andblend_palette()for on-the-fly creation of blended color palettes. - The color palette machinery is now intelligent about qualitative
ColorBrewer palettes (
Set1,Paired, etc.), which are properly treated as discrete. - Seaborn color palettes (
deep,muted, etc.) have been standardized in terms of basic hue sequence, and all palettes now have 6 colors. - Introduced
{mpl_palette}_dpalettes, which make a palette with the basic color scheme of the source palette, but with a sequential blend from dark instead of light colors for use with line/scatter/contour plots. - Added the
palette_context()function for blockwise color palettes controlled by awithstatement.
Plot styling
- Added the
despine()function for easily removing plot spines. - A new plot style,
"ticks"has been added. - Tick labels are padded a bit farther from the axis in all styles, avoiding collisions at (0, 0).
General package issues
- Reorganized the package by breaking up the monolithic
plotobjsmodule into smaller modules grouped by general objective of the constituent plots. - Removed the
scikits-learndependency inmoss. - Installing with
pipshould automatically install most missing dependencies. - The example notebooks are now used as an automated test suite.
Bug fixes
- Fixed a bug where labels did not match data for
boxplot()andviolinplot()when using a groupby. - Fixed a bug in the
desaturate()function. - Fixed a bug in the
coefplot()figure size calculation. - Fixed a bug where
regplot()choked on list input. - Fixed buggy behavior when drawing horizontal boxplots.
- Specifying bins for the
distplot()histogram now works. - Fixed a bug where
kdeplot()would reset the axis height and cut off existing data. - All axis styling has been moved out of the top-level
seaborn.set()function, so context or color palette can be cleanly changed.
Scientific Software - Peer-reviewed
- Python
Published by mwaskom over 12 years ago