seaborn.pairplot(data, hue=None, hue_order=None, palette=None, vars=None, x_vars=None, y_vars=None, kind='scatter', diag_kind='auto', markers=None, height=2.5, aspect=1, dropna=True, plot_kws=None, diag_kws=None, grid_kws=None, size=None)

Plot pairwise relationships in a dataset.

By default, this function will create a grid of Axes such that each variable in data will by shared in the y-axis across a single row and in the x-axis across a single column. The diagonal Axes are treated differently, drawing a plot to show the univariate distribution of the data for the variable in that column.

It is also possible to show a subset of variables or plot different variables on the rows and columns.

This is a high-level interface for PairGrid that is intended to make it easy to draw a few common styles. You should use PairGrid directly if you need more flexibility.


Tidy (long-form) dataframe where each column is a variable and each row is an observation.

hue:string (variable name), optional

Variable in data to map plot aspects to different colors.

hue_order:list of strings

Order for the levels of the hue variable in the palette

palette:dict or seaborn color palette

Set of colors for mapping the hue variable. If a dict, keys should be values in the hue variable.

vars:list of variable names, optional

Variables within data to use, otherwise use every column with a numeric datatype.

{x, y}_vars:lists of variable names, optional

Variables within data to use separately for the rows and columns of the figure; i.e. to make a non-square plot.

kind:{‘scatter’, ‘reg’}, optional

Kind of plot for the non-identity relationships.

diag_kind:{‘auto’, ‘hist’, ‘kde’}, optional

Kind of plot for the diagonal subplots. The default depends on whether "hue" is used or not.

markers:single matplotlib marker code or list, optional

Either the marker to use for all datapoints or a list of markers with a length the same as the number of levels in the hue variable so that differently colored points will also have different scatterplot markers.

height:scalar, optional

Height (in inches) of each facet.

aspect:scalar, optional

Aspect * height gives the width (in inches) of each facet.

dropna:boolean, optional

Drop missing values from the data before plotting.

{plot, diag, grid}_kws:dicts, optional

Dictionaries of keyword arguments.


Returns the underlying PairGrid instance for further tweaking.

See also

Subplot grid for more flexible plotting of pairwise relationships.


Draw scatterplots for joint relationships and histograms for univariate distributions:

>>> import seaborn as sns; sns.set(style="ticks", color_codes=True)
>>> iris = sns.load_dataset("iris")
>>> g = sns.pairplot(iris)

Show different levels of a categorical variable by the color of plot elements:

>>> g = sns.pairplot(iris, hue="species")

Use a different color palette:

>>> g = sns.pairplot(iris, hue="species", palette="husl")

Use different markers for each level of the hue variable:

>>> g = sns.pairplot(iris, hue="species", markers=["o", "s", "D"])

Plot a subset of variables:

>>> g = sns.pairplot(iris, vars=["sepal_width", "sepal_length"])

Draw larger plots:

>>> g = sns.pairplot(iris, height=3,
...                  vars=["sepal_width", "sepal_length"])

Plot different variables in the rows and columns:

>>> g = sns.pairplot(iris,
...                  x_vars=["sepal_width", "sepal_length"],
...                  y_vars=["petal_width", "petal_length"])

Use kernel density estimates for univariate plots:

>>> g = sns.pairplot(iris, diag_kind="kde")

Fit linear regression models to the scatter plots:

>>> g = sns.pairplot(iris, kind="reg")

Pass keyword arguments down to the underlying functions (it may be easier to use PairGrid directly):

>>> g = sns.pairplot(iris, diag_kind="kde", markers="+",
...                  plot_kws=dict(s=50, edgecolor="b", linewidth=1),
...                  diag_kws=dict(shade=True))