DataFrameGroupBy.boxplot(subplots=True, column=None, fontsize=None, rot=0, grid=True, ax=None, figsize=None, layout=None, sharex=False, sharey=True, backend=None, **kwargs)[source]

Make box plots from DataFrameGroupBy data.

groupedGrouped DataFrame
  • False - no subplots will be used

  • True - create a subplot for each group.

columncolumn name or list of names, or vector

Can be any valid input to groupby.

fontsizeint or str
rotlabel rotation angle
gridSetting this to True will show the grid
axMatplotlib axis object, default None
figsizeA tuple (width, height) in inches
layouttuple (optional)

The layout of the plot: (rows, columns).

sharexbool, default False

Whether x-axes will be shared among subplots.

shareybool, default True

Whether y-axes will be shared among subplots.

backendstr, default None

Backend to use instead of the backend specified in the option plotting.backend. For instance, ‘matplotlib’. Alternatively, to specify the plotting.backend for the whole session, set pd.options.plotting.backend.

New in version 1.0.0.


All other plotting keyword arguments to be passed to matplotlib’s boxplot function.

dict of key/value = group key/DataFrame.boxplot return value
or DataFrame.boxplot return value in case subplots=figures=False


You can create boxplots for grouped data and show them as separate subplots:

>>> import itertools
>>> tuples = [t for t in itertools.product(range(1000), range(4))]
>>> index = pd.MultiIndex.from_tuples(tuples, names=['lvl0', 'lvl1'])
>>> data = np.random.randn(len(index),4)
>>> df = pd.DataFrame(data, columns=list('ABCD'), index=index)
>>> grouped = df.groupby(level='lvl1')
>>> grouped.boxplot(rot=45, fontsize=12, figsize=(8,10))

The subplots=False option shows the boxplots in a single figure.

>>> grouped.boxplot(subplots=False, rot=45, fontsize=12)