Statistical Data Visualization With Seaborn
The Python visualization library Seaborn is based on matplotlib and provides a high-level interface for drawing attractive statistical graphics.
Make use of the following aliases to import the libraries:
>>> import matplotlib.pyplot as plt
>>> import seaborn as sns
The basic steps to creating plots with Seaborn are:
1. Prepare some data
2. Control figure aesthetics
3. Plot with Seaborn
4. Further customize your plot
1) Data
>>> import pandas as pd
>>> import numpy as np
>>> uniform_data = np.random.rand(10, 12)
>>> data = pd.DataFrame({'x':np.arange(1,101),
'y':np.random.normal(0,4,100)})
Seaborn also offers built-in data sets:
>>> titanic = sns.load_dataset("titanic")
>>> iris = sns.load_dataset("iris")
2) Figure Aesthetics
>>> f, ax = plt.subplots(figsize=(5,6)) Create a figure and one subplot
Seaborn styles
>>> sns.set() (Re)set the seaborn default
>>> sns.set_style("whitegrid") Set the matplotlib parameters
>>> sns.set_style("ticks", Set the matplotlib parameters
{"xtick.major.size":8,
"ytick.major.size":8})
>>> sns.axes_style("whitegrid") Return a dict of params or use with with to temporarily set the style
Context Functions
>>> sns.set_context("talk") Set context to "talk"
>>> sns.set_context("notebook", Set context to "notebook",
font_scale=1.5, Scale font elements and
rc={"lines.linewidth":2.5}) override param
mapping
Color Palette
>>> sns.set_palette("husl",3) Define the color palette
>>> sns.color_palette("husl") Use with with to temporarily set palette
>>> flatui=["#9b59b6","#3498db","#95a5a6","#e74c3c","#34495e","#2ecc71"]
>>> sns.set_palette(flatui) Set your own color palette
3)Plotting With Seaborn
Axis Grids
>>> g = sns.FacetGrid(titanic, Subplot grid for plotting conditional relationships
col="survived",
row="sex")
>>> g = g.map(plt.hist,"age")
>>> sns.factorplot(x="pclass", Draw a categorical plot onto a Facetgrid
y="survived",
hue="sex",
data=titanic)
>>> sns.lmplot(x="sepal_width", Plot data and regression model fits across a FacetGrid
y="sepal_length",
hue="species",
data=iris)
Categorical Plots Scatterplot
>>> sns.stripplot(x="species", Scatterplot with one categorical variable
y="petal_length", categorical
data=iris)
>>> sns.swarmplot(x="species", Categorical scatterplot with non-overlapping points
y="petal_length",
data=iris)
Bar Chart
>>> sns.barplot(x="sex", Show point estimates and confidence intervals with scatterplot glyphs
y="survived",
hue="class",
data=titanic)
Count Plot
>>> sns.countplot(x="deck", Show count of observations
data=titanic,
palette="Greens_d")
Point Plot
>>> sns.pointplot(x="class", Show point estimates and confidence intervals as rectangular bars
y="survived",
hue="sex",
data=titanic,
palette={"male":"g",
"female":"m"},
markers=["^","o"],
linestyles=["-","--"])
Boxplot
>>> sns.boxplot(x="alive", Boxplot
y="age",
hue="adult_male",
data=titanic)
>>> sns.boxplot(data=iris,orient="h") Boxplot with wide-form data Violinplot
>>> sns.violinplot(x="age", Violin plot
y="sex",
hue="survived",
data=titanic)
>>> h = sns.PairGrid(iris) Subplot grid for plotting pairwise
>>> h = h.map(plt.scatter) relationships
>>> sns.pairplot(iris) Plot pairwise bivariate distributions
>>> i = sns.JointGrid(x="x", Grid for bivariate plot with marginal
y="y", univariate plots
data=data)
>>> i = i.plot(sns.regplot,
sns.distplot)
>>> sns.jointplot("sepal_length", Plot bivariate distribution
"sepal_width",
data=iris,
kind='kde')
Regression Plots
>>> sns.regplot(x="sepal_width", Plot data and a linear regression
y="sepal_length", model fit
data=iris,
ax=ax)
Distribution Plots
>>> plot = sns.distplot(data.y, Plot univariate distribution
kde=False,
color="b")
Matrix Plots
>>> sns.heatmap(uniform_data,vmin=0,vmax=1) Heatmap
4) Further Customizations
Axisgrid Objects
>>> g.despine(left=True) Remove left spine
>>> g.set_ylabels("Survived") Set the labels of the y-axis
>>> g.set_xticklabels(rotation=45) Set the tick labels for x
>>> g.set_axis_labels("Survived", Set the axis labels
"Sex")
>>> h.set(xlim=(0,5), Set the limit and ticks of the
ylim=(0,5),
x-and y-axis
xticks=[0,2.5,5],
yticks=[0,2.5,5])
Plot
>>> plt.title("A Title") Add plot title
>>> plt.ylabel("Survived") Adjust the label of the y-axis
>>> plt.xlabel("Sex") Adjust the label of the x-axis
>>> plt.ylim(0,100) Adjust the limits of the y-axis
>>> plt.xlim(0,10) Adjust the limits of the x-axis
>>> plt.setp(ax,yticks=[0,5]) Adjust a plot property
>>> plt.tight_layout() Adjust subplot params
5) Show or Save Plot
>>> plt.show() Show the plot
>>> plt.savefig("foo.png") Save the plot as a figure
>>> plt.savefig("foo.png", Save transparent figure
transparent=True)
Close & Clear
>>> plt.cla() Clear an axis
>>> plt.clf() Clear an entire figure
>>> plt.close() Close a window