seaborn errorbar options: sd, ci, se, pi (tested)

In seaborn 0.12+, errorbar= picks what the bars show: ("ci", 95) (default, a bootstrap confidence interval of the mean), "sd" (mean ± standard deviation), "se" (mean ± standard error), ("pi", 50) (percentile interval) or None. The old ci= parameter is deprecated.

1. All errorbar options on the same data

b1.py draws one barplot per option and reads the error-bar extent off each bar (group a = 1, 2, 3, 4, 10):

import warnings
import matplotlib
matplotlib.use("Agg")
import numpy as np, pandas as pd, seaborn as sns

df = pd.DataFrame({"group": ["a"] * 5 + ["b"] * 5,
                   "value": [1, 2, 3, 4, 10, 5, 6, 7, 8, 9]})

def bar_extent(**kw):
    ax = sns.barplot(df, x="group", y="value", seed=0, **kw)  # seed: bootstrap CI
    out = []
    for line in ax.lines:                       # one error-bar line per bar
        y = line.get_ydata()
        out.append(f"{y.min():.2f}..{y.max():.2f}")
    ax.figure.clf()
    return out or "no error bars"

print("mean of a, b:", df.groupby("group")["value"].mean().tolist())
print("default (ci, 95)   ", bar_extent())
print("errorbar='sd'      ", bar_extent(errorbar="sd"))
print("errorbar='se'      ", bar_extent(errorbar="se"))
print("errorbar=('ci', 68)", bar_extent(errorbar=("ci", 68)))
print("errorbar=('pi', 50)", bar_extent(errorbar=("pi", 50)))
print("errorbar=None      ", bar_extent(errorbar=None))
print("std of a (ddof=1):", round(df[df.group == "a"].value.std(), 2))
with warnings.catch_warnings(record=True) as w:
    warnings.simplefilter("always")
    print("ci='sd' (old API)  ", bar_extent(ci="sd"))
    print(" ", w[0].category.__name__, " ".join(str(w[0].message).split()))

Output (seaborn 0.13.2, pandas 3.1.0, numpy 2.5.4, Python 3.13.5):

mean of a, b: [4.0, 7.0]
default (ci, 95)    ['1.80..7.00', '5.80..8.20']
errorbar='sd'       ['0.46..7.54', '5.42..8.58']
errorbar='se'       ['2.42..5.58', '6.29..7.71']
errorbar=('ci', 68) ['2.57..5.60', '6.40..7.60']
errorbar=('pi', 50) ['2.00..4.00', '6.00..8.00']
errorbar=None       no error bars
std of a (ddof=1): 3.54
ci='sd' (old API)   ['0.46..7.54', '5.42..8.58']
  FutureWarning The `ci` parameter is deprecated. Use `errorbar='sd'` for the same effect.

2. What each option means

3. The old ci= parameter

ci="sd" still works in 0.13.2 and gives the same bars, with a FutureWarning telling you to use errorbar="sd". Likewise ci=None becomes errorbar=None and ci=68 becomes errorbar=("ci", 68).

Frequently asked questions

What is the default errorbar in seaborn barplot?

("ci", 95): a 95% bootstrap confidence interval of the mean. Pass seed= to make it repeatable.

How do I show standard deviation error bars in seaborn?

Use errorbar="sd". The old ci="sd" still works in 0.13.2 but raises a FutureWarning.

How do I remove error bars in seaborn?

Pass errorbar=None.

Written with AI assistance. Measured on 2026-10-23 with seaborn 0.13.2, pandas 3.1.0, numpy 2.5.4 and Python 3.13.5 on Linux. The script ran verbatim and the output was pasted unedited. PlainTables is our extension; seaborn is free.