NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #636 most downloaded on PyPI
Statistical data visualization
Last release 3 years ago
no release in 18 months
Release timing varies
gaps range from 1 weeks to 11 months
Most releases are documented
notes for 23 of 26 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
36 releases · first in 2013
This is a minor release containing internal changes that adapt to upcoming deprecations in pandas. All users are encouraged to update.
This is a minor release containing internal changes that adapt to upcoming deprecations in pandas. All users are encouraged to update.
This is a minor release with some bug fixes and a couple new features. All users are encouraged to update.
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, and objects.Est (#3580, #3586).
|Feature| Added the extent option in objects.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.Plot so that tick labels are shown for wrapped axes that aren't in the bottom-most row (#3600).
|Fix| Fixed a bug in catplot where a blank legend would be added when hue was redundantly assigned (#3540).
|Fix| Fixed a bug in catplot where the edgecolor parameter was ignored with kind="bar" (#3547).
|Fix| Fixed a bug in boxplot where an exception was raised when using the matplotlib bootstrap option (#3562).
|Fix| Fixed a bug in lineplot where an exception was raised when hue was assigned with an empty dataframe (#3569).
|Fix| Fixed a bug in multiple categorical plots that raised with hue=None and dodge=True; this is now has no effect (#3605).
One column per quarter.
…functions, and they should be aware of some deprecations and intentional changes to the default appearance of the resulting plots (see notes below wit…
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).
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.
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 <span class="title-ref">native_scale</span> parameter. The default remains <span class="title-ref">False</span> to preserve existing behavior. But with <span class="title-ref">native_scale=True</span>, 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 <span class="title-ref">native_scale=False</span>) will better align with artists added by other seaborn or matplotlib functions in most cases, and matplotlib's interactive machinery will work better.
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 <span class="title-ref">hue</span> 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 <span class="title-ref">hue</span> variable (e.g., <span class="title-ref">boxplot(data, x="x", y="y", hue="x")</span>).
Two related idiosyncratic color specifications are deprecated, but they will continue to work (with a warning) for one release cycle:
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., <span class="title-ref">palette="deep"</span> for seaborn's default). Accordingly, the functions have gained a parameter to control numeric color mappings (<span class="title-ref">hue_norm</span>).
The following updates apply to multiple categorical functions.
boxplot, boxenplot, and violinplot functions now support a single <span class="title-ref">linecolor</span> parameter.pointplot or the kernel density fit in violinplot) are now applied in that scale space.The following updates are function-specific.
pointplot, a single matplotlib.lines.Line2D artist is now used rather than adding separate matplotlib.collections.PathCollection artist 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 (<span class="title-ref">scale</span>, <span class="title-ref">join</span>, and <span class="title-ref">errwidth</span>) are now deprecated. The old parameters will now trigger detailed warning messages with instructions for adapting existing code.violinplot better aligns with kdeplot, as the <span class="title-ref">bw</span> parameter is now deprecated in favor of <span class="title-ref">bw_method</span> and <span class="title-ref">bw_adjust</span>.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.barplot, the <span class="title-ref">errcolor</span> and <span class="title-ref">errwidth</span> parameters are now deprecated in favor of a more general <span class="title-ref">err_kws</span>` dictionary. The existing parameters will continue to work for two releases.violinplot, the <span class="title-ref">scale</span> and <span class="title-ref">scale_hue</span> parameters have been renamed to <span class="title-ref">density_norm</span> and <span class="title-ref">common_norm</span> for clarity and to reflect the fact that common normalization is now applied over both hue and faceting variables in catplot.boxenplot, the <span class="title-ref">scale</span> parameter has been renamed to <span class="title-ref">width_method</span> as part of a broader effort to de-confound the meaning of "scale" in seaborn parameters.barplot or pointplot, 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 <span class="title-ref">y</span> variable.boxplot, the default flier marker now follows the matplotlib rcparams so that it can be globally customized.violinplot, a separate mini-box is now drawn for each split violin.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.boxenplot now approximates the density of the underlying observations, including for asymmetric distributions. This produces a substantial change in the appearance of plots with <span class="title-ref">width_method="area"</span>, although the existing behavior was poorly defined.countplot, the new <span class="title-ref">stat</span> parameter can be used to apply a normalization (e.g to show a <span class="title-ref">"percent"</span> or <span class="title-ref">"proportion"</span>).violinplot is now more general and can be set to <span class="title-ref">True</span> regardless of the number of <span class="title-ref">hue</span> variable levels (or even without <span class="title-ref">hue</span>). This is probably most useful for showing half violins.violinplot, the new <span class="title-ref">inner_kws</span> parameter allows additional control over the interior artists.catplot, as data vectors can now be passed directly.boxplot, the artists that comprise each box plot are now packaged in a <span class="title-ref">BoxPlotContainer</span> for easier post-plotting access.3369).objects.Plot (3223)objects.Plot (3225).objects.Plot via the new <span class="title-ref">label</span> parameter in objects.Plot.add (3456).objects.Plot.scale, objects.Plot.limit, and objects.Plot.label the <span class="title-ref">x</span> / <span class="title-ref">y</span> parameters can be used to set a common scale / limit / label for paired subplots (3458).3467).ecdfplot, <span class="title-ref">stat="percent"</span> is now a valid option (3336).3488).histplot, infinite values are now ignored when choosing the default bin range (3488).3440).load_dataset to use an approach more compatible with <span class="title-ref">pyiodide</span> (3234).3452).histplot, treatment of the <span class="title-ref">binwidth</span> 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).objects.Bar and objects.Bars widths when using a nonlinear scale (3217).move_legend when <span class="title-ref">labels</span> were provided (3454).histplot added a stray empty <span class="title-ref">BarContainer</span> (3246).objects.Plot.on would override a figure's layout engine (3216).lineplot with a list of tuples for the keyword argument dashes caused a TypeError (3316).PairGrid that caused an exception when the input dataframe had a column multiindex (3407).3394).There are some intentional changes to default behavior / deprecations, but also the potential for unintentional breakage. Please help surface any exam…
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.
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 versio
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.KDE stat (#3111).
|Feature| Added the objects.Boolean scale (#3205).
|Enhancement| Improved user feedback for failures during plot compilation by catching exceptions and re-raising with a PlotSpecError that 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 histplot with kde=True and log_scale=True where the curve was not scaled properly (#3173).
|Fix| Fixed a bug in relplot where inner axis labels would be shown when axis sharing was disabled (#3180).
|Fix| Fixed a bug in objects.Continuous to avoid an exception with boolean data (#3190).
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 f
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.
objects.Text mark (#3051).objects.Dash mark (#3074).objects.Perc stat (#3063).objects.Count stat (#3086).objects.Band and objects.Range marks will now cover the fullmin / max variables are not explicitly assigned orobjects.Jitter move now applies a small amount of jitter byobjects.Nominal scale now appear like categorical axesobjects.Continuous.label method now accepts base=None to override the default formatterobjects.Line) now use alabel parameter to pointplot,pointplot is passed toFacetGrid (#3016).objects.Plot (#3055).objects.PolyFit robust to missing data (#3010).objects.Plot that occurred when data assigned to thekdeplot where passing cmap for an unfilled bivariate plot wouldlineplot with a large number…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…
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.
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).
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):
native_scale parameter allows numeric or datetime categories to be plotted with their original scale rather than converted to strings and plotted at fixed intervals.formatter parameter 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.hue when using only one coordinate variable (i.e. only x or y).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:
scatterplot. Pass palette="deep" to reproduce previous defaults.Similar enhancements / updates should be expected to roll out to other categorical plotting functions in future releases. There are also several function-specific enhancements:
stripplot, a "strip" with a single observation will be plotted without jitter (2413)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).swarmplot, the proportion of points that must overlap before issuing a warning can now be controlled with the warn_thresh parameter (2447).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).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).
lineplot along the y axis using orient="y" (2854).FacetGrid / PairGrid / JointGrid with a fluent (method-chained) style by adding apply/ pipe methods. Additionally, fixed the tight_layout and refline methods so that they return self (2926).FacetGrid.tick_params and PairGrid.tick_params to customize the appearance of the ticks, tick labels, and gridlines of all subplots at once (2944).barplot (2860).barplot and pointplot, in addition to a callable (2866).regplot now inherit the alpha value of the points they correspond to (2540).pairplot with corner=True and diag_kind=None, the top left y axis label is no longer hidden (2850).histplot as a step function or polygon (2859).boxenplot with box_kws/line_kws/flier_kws (2909).2449).2776).histplot and kdeplot where weights were not factored into the normalization (2812).histplot when only binwidth was provided (2813).violinplot where inner boxes/points could be missing with unpaired split violins (2814).PairGrid where an error would be raised when defining hue only in the mapping methods (2847).scatterplot where an error would be raised when hue_order was a subset of the hue levels (2848).histplot where dodged bars would have different widths on a log scale (2849).lineplot, allowed the dashes keyword to set the style of a line without mapping a style variable (2449).relplot for "wide" data and for faceting variables passed as non-pandas objects (2846).FacetGrid.map or FacetGrid.map_dataframe (2705).2925).kdeplot (2862).rugplot was ignoring expand_margins=False (2953).set_palette (or set_theme). This should have no general effect, because the matplotlib default is now "C0" (2906).2398).2773).2833).pointplot.This is the first release candidate for seaborn v0.12, a major update introducing an entirely new interface along with numerous features, enhancements
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.
Plot API changesstat= and move= parameters were removed from Plot.add, which now has the following signature: Plot.add(mark, *transforms, ...). (#2948)Plot.configure method was renamed to Plot.layout, with the figsize parameter changed to size. The share{x,y} parameters were removed from Plot.layout, with that functionality now supported by the new Plot.share method. (#2954)Additionally, the install extra for including statistical packages was changed from seaborn[all] to seaborn[stats]. (#2939)
This is the third and final beta release for seaborn v0.12, a major update introducing an entirely new interface along with numerous features, enhance
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:
Est stat for aggregating with a flexible error bar interval (#2912)Interval mark for drawing lines perpendicular to the orient axis (#2912)Plot.theme for basic control over figure appearance (#2929)Plot.label to control plot titles (#2934)Plot.scale so that it applies to variables added during the stat transform (#2915)Plot.configure spec would not persist after further method calls (#2917)artist_kws parameter (#2921)This is the second beta release for seaborn v0.12, a major update introducing an entirely new interface along with numerous features, enhancements, an
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:
Plot.label method for controlling axis labels/legend titles (#2902)Plot.limit method for controlling axis limits (#2898)Bars, a more efficient mark for histograms, and improved performance of Bar mark as well (#2893)Area and Ribbon marks used a simpler matplotlib artist class for them (#2896)Bar mark (#2889)This is the first beta release for seaborn v0.12, a major update introducing an entirely new interface along with numerous features, enhancements, and
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:
Scale.label interface for formatting tick labelstransform parameter name to transerrorbar API to pointplot and barplot (#2866)width parameter to barplot (#2860)orient parameter to lineplot (#2854)histplot to draw discrete histograms with step or poly marks (#2859)regplot (#2853)jointplot (#2863)pointplot with corner=True and diag_kind=None (#2850)relplot (#2846)histplot dodged bar widths with log scale (#2849)hue_order as a subset in scatterplot (#2848)Nothing published for this version
\|API\| \|Feature\| In lmplot, added a new facet_kws parameter and deprecated the sharex, sharey, and legend_out parameters from the function signatur…
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 new facet_kws parameter and deprecated the sharex, sharey, and legend_out parameters from the function signature; pass them in a facet_kws dictionary instead (https://github.com/mwaskom/seaborn/pull/2576).
|Feature| Added a move_legend convenience function for repositioning the legend on an existing axes or figure, along with updating its properties. This function should be preferred over calling ax.legend with no legend data, which does not reliably work across seaborn plot types (https://github.com/mwaskom/seaborn/pull/2643).
|Feature| In histplot, added stat="percent" as an option for normalization such that bar heights sum to 100 and stat="proportion" as an alias for the existing stat="probability" (https://github.com/mwaskom/seaborn/pull/2461, https://github.com/mwaskom/seaborn/pull/2634).
|Feature| Added FacetGrid.refline and JointGrid.refline methods 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 a warn_singular parameter 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, and JointGrid objects now reference the underlying matplotlib figure with a .figure attribute. The existing .fig attribute still exists but is discouraged and may eventually be deprecated. The effect is that you can now call obj.figure on the return value from any seaborn function to access the matplotlib object (https://github.com/mwaskom/seaborn/pull/2639).
|Enhancement| In FacetGrid and 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 matplotlib figure.autolayout parameter is disabled to avoid having the legend overlap the plot (https://github.com/mwaskom/seaborn/pull/2571).
|Enhancement| The load_dataset helper 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.NA type (https://github.com/mwaskom/seaborn/pull/2417, https://github.com/mwaskom/seaborn/pull/2435).
|Fix| In ecdfplot and rugplot, 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 using shrink with non-discrete bins shifted bar positions inaccurately (https://github.com/mwaskom/seaborn/pull/2477).
|Fix| In displot, fixed a bug where common_norm=False was ignored when faceting was used without assigning hue (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 histplot and kdeplot, fixed a bug where the alpha parameter was ignored when fill=False (https://github.com/mwaskom/seaborn/pull/2460).
|Fix| In histplot and kdeplot, fixed a bug where the multiple parameter was ignored when hue was 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 provided multiple parameter even when hue is not assigned (https://github.com/mwaskom/seaborn/pull/2462).
|Fix| In displot, fixed a bug that caused faceted 2D histograms to error out with common_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 relplot and displot, fixed a bug where the dataframe attached to the returned FacetGrid object 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 size semantic were incorrect when size_norm extrapolated beyond the range of the data (https://github.com/mwaskom/seaborn/pull/2580).
|Fix| In lmplot and regplot, fixed a bug where the x axis was clamped to the data limits with truncate=True (https://github.com/mwaskom/seaborn/pull/2576).
|Fix| In lmplot, fixed a bug where sharey=False did 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 -OO mode 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).
This is the first release candidate for seaborn v0.11.2, a backwards-compatible release with bug fixes and targeted enhancements.
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.
This a bug fix release and is a recommended upgrade for all users on v0.11.0.
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.
This is a major release with important new features, enhancements to existing functions, and changes to the library. Highlights include an overhaul an
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.
This is the first release candidate for v0.11.0, a major release with several important new features and changes to the library.
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:
displot, histplot, and ecdfplot, a complete rewrite of kdeplot, and substantial enhancements to jointplot and pairplotPlease test the release by installing from here or with python -m pip install --upgrade --pre seaborn
Deprecated several utility functions that are no longer used internally (percentiles, sig_stars, pmf_hist, and sort_df).
This is minor release with bug fixes for issues identified since 0.10.0.
regplot would crash on singleton inputs. Now a
crash is avoided and regression estimation/plotting is skipped.heatmap would ignore user-specified
under/over/bad values when recentering a colormap.heatmap would use values from masked cells when
computing default colormap limits.despine would cause an error when trying to trim
spines on a matplotlib categorical axis.showfliers parameter to boxenplot to suppress plotting
of outlier data points, matching the API of boxplot.kdeplot.legend.title_fontsize to the plotting_context
definition.percentiles, sig_stars, pmf_hist, and sort_df).This release also removes a few previously-deprecated features:
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:
tsplot function and seaborn.timeseries module have been removed. Recall that tsplot was replaced with lineplot.seaborn.apionly entry-point has been removed.seaborn.linearmodels module (previously renamed to seaborn.regression) has been removed.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).
Nothing published for this version
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 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.
clustermap with the {dendrogram,colors}_ratio and cbar_pos parameters. Additionally, the default organization and scaling with different figure sizes has been improved.corner option to PairGrid and pairplot to make a grid without the upper triangle of bivariate axes.seed parameter, which can take either fixed seed (typically an int) or a numpy random number generator object (either the newer numpy.random.Generator or the older numpy.random.mtrand.RandomState).PairGrid to any axes that share an x and y variable.PairGrid, the hue variable is now excluded from the default list of variables that make up the rows and columns of the grid.layout_pad parameter in PairGrid and set a smaller default than what matptlotlib sets for more efficient use of space in dense grids.hue varaible 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.tree_kws parameter to clustermap to control the properties of the lines in the dendrogram.FacetGrid legend, which also fixes a bug in relplot when the same label appeared in diffent semantics.kdeplot, issuing a warning instead. This makes pairplot more robust.dropna in PairGrid to properly exclude null datapoints from each plot when set to True.regplot could interfere with other axes in a multi-plot matplotlib figure.category data type will always be treated as categorical in relational plots.boxenplot on newer matplotlibs.regplot with truncate=False to progressively expand the x axis limits. Because there are currently limitations on how autoscaling works in matplotlib, the default value for truncate in seaborn has also been changed to True.sizes correctly.pointplot where missing levels of a hue variable would cause an exception after a recent update in matplotlib.FacetGrid.Series with a non-default index.Series objects as arguments for x_partial or y_partial in regplot.norm object and using color annotations in clustermap.clustermap.set while specifying a list of colors for the palette.numpy changes.lineplot when plotting categoricals with empty levels.colors to be passed through to a bivariate kdeplot.FacetGrid legend using matplotlib keyword arguments.First release candidate for v0.9.1
First release candidate for v0.9.1
Deprecated the statistical annotation component of JointGrid. The method is still available but will be removed in a future version.
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.
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.
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:
"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 a palette= parameter."talk" and "poster" contexts.A few functions have been renamed or have had changes to their default parameters.
factorplot function 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. factorplot still 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.factorplot name was changed was to ease another alteration which is that the default kind in 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 in factorplot ("point", corresponding to pointplot) remains available if you want to show a statistical estimation.lvplot function has been renamed to boxenplot. The "letter-value" terminology that was used to name the original kind of plot is obscure, and the abbreviation to lv did 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 with factorplot, the lvplot function still exists to provide a relatively smooth transition.size parameter to height in multi-plot grid objects (FacetGrid, PairGrid, and JointGrid) along with functions that use them (factorplot, lmplot, pairplot, and jointplot) to avoid conflicts with the size parameter that is used in scatterplot and lineplot (necessary to make relplot work) and also makes the meaning of the parameter a bit more clear."hue" dimension is used.coefplot and interactplot, have undergone final removal from the code base.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.
LineCollection instead of many Line2D objects, providing a big speedup for large arrays."hue" currently draws three separate scatterplots instead of using the hue semantic of the scatterplot function).color and label kwargs, adding more flexibility and avoiding a warning when using with multi-plot grids.subplot_kws parameter to PairGrid for more flexibility.col_wrap=1.pip is aware of. This means that pip install seaborn will now work in an empty environment. Additionally, the dependencies are specified with strict minimal versions.Added a warning in FacetGrid when passing a categorical plot function without specifying order (or hue_order when hue is used), which is likely to pro
Added a warning in FacetGrid when passing a categorical plot function without specifying order (or hue_order when hue is used), which is likely to produce a plot that is incorrect.
Improved compatibility between FacetGrid or PairGrid and interactive matplotlib backends so that the legend no longer remains inside the figure when using legend_out=True.
Changed categorical plot functions with small plot elements to use dark_palette instead of light_palette when generating a sequential palette from a specified color.
Improved robustness of kdeplot and distplot to data with fewer than two observations.
Fixed a bug in clustermap when using yticklabels=False.
Fixed a bug in pointplot where colors were wrong if exactly three points were being drawn.
Fixed a bug inpointplot where legend entries for missing data appeared with empty markers.
Fixed a bug in clustermap where an error was raised when annotating the main heatmap and showing category colors.
Fixed a bug in clustermap where row labels were not being properly rotated when they overlapped.
Fixed a bug in kdeplot where the maximum limit on the density axes was not being updated when multiple densities were drawn.
Improved compatibility with future versions of pandas.
Nothing published for this version
Added the ability to put "caps" on the error bars that are drawn by barplot or pointplot (and, by extension, factorplot). Additionally, the line width
barplot or pointplot (and, by extension, factorplot). Additionally, the line width of the error bars can now be controlled. These changes involve the new parameters capsize and errwidth. See the github pull request for examples of usage.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.heatmap.annot parameter of heatmap now 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.FacetGrid that appeared when using col_wrap with missing col levels.heatmap colorbar.PairGrid histograms when there are multiple hue levels.reset_orig function (and, by extension, importing seaborn.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.seaborn namespace.FacetGrid.This is a major release from 0.6. The main new feature is swarmplot which implements the beeswarm approach for drawing categorical scatterplots. There
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.
{*_}order parameter,
and variables with a category datatype will still follow the
category order even if the levels are strictly numerical.hue.hue nesting with
split=False so that the different hue levels are not drawn
strictly on top of each other.font.size to the plotting context definition so that the
default output from plt.text will be scaled appropriately.fastcluster is not installed.hue level if there were no observations in the first group of
points.The corrplot and underlying symmatplot functions have been deprecated in favor of heatmap, which is much more flexible and robust. These two functions…
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.
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 <categorical_tutorial> that introduces these functions.
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:
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.x_order parameter has been renamed to order.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.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:
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.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.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.color_codes argument 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.as_hex method to color palette objects, to return a list of hex codes rather than rgb tuples.linewidths in 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 default linewidths was 0.5).seaborn.crayons dictionary and the crayon_palette function to define colors from the 120 box (!) of Crayola crayons.line_kws parameter to residplot to change the style of the lowess line, when used.**kwargs to the add_legend method on FacetGrid and PairGrid, which will pass additional keyword arguments through when calling the legend function on the Figure or Axes.gridspec_kws parameter 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.shade_lowest parameter 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.height parameter 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.plt.boxplot are now applied after the seaborn restyling to allow for full customizability.savefig method 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 the savefig method on other Grid objects.xticklabels and yticklabels parameter of heatmap (and, by extension, clustermap). This will make the plot use the ticklabels inferred from the data, but only plot every n label, where n is the number you pass. This can help when visualizing larger matrices with some sensible ordering to the rows or columns of the dataframe.hue variable appeared in hue_order but not in the data.col_wrap is being used.hue_order parameter was ignored.margin_titles option in FacetGrid, which can now be used with a legend.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.
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.
This is a major release from 0.4. Highlights include new functions for plotting heatmaps, possibly while applying clustering algorithms to discover st
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.
markers. This can
be a single kind of marker or a list of different markers for each
level of the hue variable. 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.hue_kws. This similarly lets plot aesthetics vary across
the levels of the hue variable, but more flexibily. hue_kws should
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.subplot_kws has been added to FacetGrid. This
allows for faceted plots with custom projections, including maps
with
Cartopy.husl or hls space values or as a
named xkcd color. The interpretation of the seed color is now
provided by the new input parameter to these functions.data and data2
arguments.sig_stars=False as the permutation test used to significance
values for the correlations uses a pearson metric.pdf.fonttype from the style definitions, as the value used
in version 0.4 resulted in very large PDF files.The despine function gets a new keyword argument offset, which replaces the deprecated offset_spines function. You no longer need to offset the spines…
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.
"husl" palette will be used to avoid cycling.hist_norm to 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
setting hist_norm to True.hue variable, 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.x variable are represented in each facet.logx option to regplot for fitting the regression in log
space.xkcd_rgb dictionary so that colors
can be specified with names from the xkcd
color
survey.font_scale option to plotting_context, set_context,
and set. font_scale can independently increase or decrease the
size of the font elements in the plot.font.sans-serif field to the
axes_style definition with Arial and Liberation Sans prepended to
matplotlib defaults. The font family can also be set through the
font keyword argument in set. Due to matplotlib bugs, this might
not work as expected on matplotlib 1.3.offset, which
replaces the deprecated offset_spines function. You no longer need
to offset the spines before plotting data.pdf.fonttype so that text in PDFs is
editable in Adobe Illustrator.set_color_palette and palette_context
functions. These were replaced in version 0.3 by the set_palette
function and ability to use color_palette directly in a with
statement.nogrid style, which was renamed
to white in 0.3.This is a minor release from 0.3 with fixes for several bugs.
This is a minor release from 0.3 with fixes for several bugs.
col_wrap was used with a number of facets that did not evenly divide into the column width.hue variable levels that were not strings were missing in FacetGrid legends.with statement, the entire palette is now used instead of the first six colors.Nothing published for this version
This is a bugfix release, with no new features.
This is a bugfix release, with no new features.
violinplot() and boxplot() when using a
Series object as data and performing a groupby to assign data to
bins to address a problem that arises in Pandas 0.13.groupby code to work with all styles of group
specification (specifically, using a dictionary or a function now works).This is a major release from 0.1 with a number of API changes, enhancements, and bug fixes.
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.
tsplot() function was rewritten to accept data in a long-form
DataFrame and to plot different traces by condition. This
introduced a relatively minor but unavoidable API change, where
instead of doing sns.tsplot(time, heights), you now must do
sns.tsplot(heights, time=time) (the time parameter is now
optional, for quicker specification of simple plots). Additionally,
the "obs_traces" and "obs_points" error styles in tsplot()
have been renamed to "unit_traces" and "unit_points",
respectively.kdeplot() and
violinplot()) now use statsmodels instead of scipy, 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.kdeplot() function now takes a second positional argument of
data for drawing bivariate densities.violin() function has been changed to violinplot(), for
consistency. In 0.2, violin will still work, but it will fire a
UserWarning.interactplot() function draws a contour plot for an
interactive linear model (i.e., the contour shows y-hat from the
model y ~ x1 * x2) over a scatterplot between the two predictor
variables. This plot should aid the understanding of an interaction
between two continuous variables.kdeplot() function can now draw a bivariate density estimate
as a contour plot if provided with two-dimensional input data.palplot() function provides a simple grid-based visualization
of a color palette.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.corrplot() sets the color palette intelligently
based on the direction of the specified test.distplot() histogram uses a reference rule to choose the bin
size if it is not provided.x_bins option in lmplot() for binning a continuous
predictor variable, allowing for clearer trends with many
datapoints.name
attributes in several distribution plot functions and tsplot() for
smarter Pandas integration.lmplot() are slightly transparent so it is easy
to see where observations overlap.order parameter to boxplot() and violinplot() to
control the order of the bins when using a Pandas object.ax argument is not provided to a plotting function, it
grabs the currently active axis instead of drawing a new one.dark_palette() and blend_palette() for on-the-fly
creation of blended color palettes.Set1, Paired, etc.), which are properly
treated as discrete.deep, muted, etc.) have been
standardized in terms of basic hue sequence, and all palettes now
have 6 colors.{mpl_palette}_d palettes, 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.palette_context() function for blockwise color palettes
controlled by a with statement.despine() function for easily removing plot spines."ticks" has been added.plotobjs
module into smaller modules grouped by general objective of the
constituent plots.scikits-learn dependency in moss.pip should automatically install most missing
dependencies.boxplot() and
violinplot() when using a groupby.desaturate() function.coefplot() figure size calculation.regplot() choked on list input.distplot() histogram now works.kdeplot() would reset the axis height and cut
off existing data.seaborn.set()
function, so context or color palette can be cleanly changed.Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →