AB line


from plotnine import ggplot, aes, geom_point, labs, geom_abline, facet_grid
from plotnine.data import mpg

geom_abline() draws a line when the yintercept and gradient is supplied, and is useful as a guide.

# inspect the data
mpg.head()
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

It’s useful to use geom_abline() with some data, so we start with a basic scatter plot:

(
    ggplot(mpg, aes(x="displ", y="hwy"))
    + geom_point()
    + labs(x="displacement", y="horsepower")
)

Now layer a line over the scatter plot using geom_abline(). geom_abline() requires inputs for the slope (default slope is 1) and y-intercept (default value is [0,0]).

(
    ggplot(mpg, aes(x="displ", y="hwy"))
    + geom_point()
    + geom_abline(
        intercept=45,  # set the y-intercept value
        slope=-5,  # set the slope value
    )
    + labs(x="displacement", y="horsepower")
)

You can plot two lines on one plot:

(
    ggplot(mpg, aes(x="displ", y="hwy"))
    + geom_point()
    + geom_abline(
        intercept=[45, 45],  # add many lines to a plot using a list for the y-intercepts...
        slope=[-5, -7],  # ... and for the slopes
    )
    + labs(x="displacement", y="horsepower")
)

You can change the look of the line:

(
    ggplot(mpg, aes(x="displ", y="hwy"))
    + geom_point()
    + geom_abline(
        intercept=45,
        slope=-5,
        color="blue",  # set line colour
        size=2,  # set line thickness
        linetype="dashed",  # set line type
    )
    + labs(x="displacement", y="horsepower")
)

geom_abline() can be used with a facet plot:

(
    ggplot(mpg, aes(x="displ", y="hwy"))
    + geom_point()
    + geom_abline(intercept=45, slope=-5)  # add a line ...
    + facet_grid("drv")  # ... to a facet plot.
    + labs(x="displacement", y="horsepower")
)