plotnine.geoms.geom_smooth

class plotnine.geoms.geom_smooth(mapping=None, data=None, **kwargs)[source]

A smoothed conditional mean

Usage

geom_smooth(mapping=None, data=None, stat='smooth', position='identity',
            na_rm=False, inherit_aes=True, show_legend=None,
            legend_fill_ratio=0.5, **kwargs)

Only the mapping and data can be positional, the rest must be keyword arguments. **kwargs can be aesthetics (or parameters) used by the stat.

Parameters
mappingaes, optional

Aesthetic mappings created with aes(). If specified and inherit.aes=True, it is combined with the default mapping for the plot. You must supply mapping if there is no plot mapping.

Aesthetic

Default value

x

y

alpha

0.4

color

'black'

fill

'#999999'

group

linetype

'solid'

size

1

ymax

None

ymin

None

The bold aesthetics are required.

datadataframe, optional

The data to be displayed in this layer. If None, the data from from the ggplot() call is used. If specified, it overrides the data from the ggplot() call.

statstr or stat, optional (default: stat_smooth)

The statistical transformation to use on the data for this layer. If it is a string, it must be the registered and known to Plotnine.

positionstr or position, optional (default: position_identity)

Position adjustment. If it is a string, it must be registered and known to Plotnine.

na_rmbool, optional (default: False)

If False, removes missing values with a warning. If True silently removes missing values.

inherit_aesbool, optional (default: True)

If False, overrides the default aesthetics.

show_legendbool or dict, optional (default: None)

Whether this layer should be included in the legends. None the default, includes any aesthetics that are mapped. If a bool, False never includes and True always includes. A dict can be used to exclude specific aesthetis of the layer from showing in the legend. e.g show_legend={'color': False}, any other aesthetic are included by default.

legend_fill_ratiofloat (default: 0.5)

How much (vertically) of the legend box should be filled by the color that indicates the confidence intervals. Should be in the range [0, 1].

Examples

[1]:
import pandas as pd
import numpy as np

from plotnine import *
from plotnine.data import *

%matplotlib inline

Smoothed conditional means

Aids the eye in seeing patterns in the presence of overplotting.

[2]:
mpg.head()
[2]:
manufacturer model displ year cyl trans drv cty hwy fl class
0 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact
1 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact
2 audi a4 2.0 2008 4 manual(m6) f 20 31 p compact
3 audi a4 2.0 2008 4 auto(av) f 21 30 p compact
4 audi a4 2.8 1999 6 auto(l5) f 16 26 p compact
[5]:
(
    ggplot(mpg, aes(x='displ', y='hwy'))
    + geom_point()
    + geom_smooth()
    + xlab('displacement')
    + ylab('horsepower')
)
../_images/geom_smooth_3_0.png
[5]:
<ggplot: (8765056253539)>

Use span to control the "wiggliness" of the default loess smoother. The span is the fraction of points used to fit each local regression: small numbers make a wigglier curve, larger numbers make a smoother curve.

[6]:
(
    ggplot(mpg, aes(x='displ', y='hwy'))
    + geom_point()
    + geom_smooth(span=.3)
    + xlab('displacement')
    + ylab('horsepower')
)
../_images/geom_smooth_5_0.png
[6]:
<ggplot: (8765056254405)>

You can remove confidence interval around smooth with se=False:

[37]:
(
    ggplot(mpg, aes(x='displ', y='hwy'))
    + geom_point()
    + geom_smooth(span=.3, se=False)
    + xlab('displacement')
    + ylab('horsepower')
)
../_images/geom_smooth_7_0.png
[37]:
<ggplot: (-9223363271800946677)>

Instead of a loess smooth, you can use any other modelling function:

[22]:
(
    ggplot(mpg, aes(x='displ', y='hwy'))
    + geom_point()
    + geom_smooth(method='lm')
    + xlab('displacement')
    + ylab('horsepower')
)
../_images/geom_smooth_9_0.png
[22]:
<ggplot: (-9223363271799013646)>
[35]:
mpg2 = mpg.rename(columns={'class': 'cls'})

(
    ggplot(mpg2, aes(x='displ', y='hwy', color='factor(drv)'))
    + geom_point()
    + geom_smooth(method='lm')
    + xlab('displacement')
    + ylab('horsepower')
)
../_images/geom_smooth_10_0.png
[35]:
<ggplot: (-9223363271802557254)>