Skip to Content

Add Trendline to a Maplotlib Plot with Code and Output

In this tutorial, we will look at how to add a trendline to a matplotlib scatter plot with the help of some examples.

Steps to add a trendline to a plot

add trendline to a matplotlib plot

To add a trendline to a plot in matplotlib –

  1. First, plot your scatter plot with the relevant points using the matplotlib pyplot’s scatter() function.
  2. Create the trendline with the help of the numpy.polyfit() and the numpy.plot1d() functions.
  3. Add the trendline to the matplotlib plot using the matplotlib.pyplot.plot() function.

The important part here is to get the trendline which we do with the help of the numpy functions numpy.polyfit() and numpy.plot1d().

The numpy.polyfit() function is used to get a least squares polynomial fit. We pass the x and y values and the degree of the polynomial fit. For a line, use 1 as the degree of fit. The numpy.polyfit() function returns the coefficients of the polynomial which we then pass to the numpy.plot1d() function which creates a polynomial function from the given coefficients.

To get the trendline points, we use the resulting function from numpy.plot1d() and pass the x values to get the corresponding trendline points which we then plot on our matplotlib plot.

Let’s now look at an example of using the above steps.

Example 1 – Add trendline to a plot

Let’s use the data of US dollar to Indian Rupee conversion to plot our scatter plot and get a trendline. We’ll use the conversion rates from 2011 to 2020.

import numpy as np
import matplotlib.pyplot as plt

# x values - years
x = [2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020]
# y values - 1 USD in INR
y = [46.67, 53.44, 56.57, 62.33, 62.97, 66.46, 67.79, 70.09, 70.39, 76.38]

# plot x and y on scatter plot
plt.scatter(x, y)
plt.xlabel('Year')
plt.ylabel('1 USD in INR')

# get the trendline coefficients
z = np.polyfit(x, y, 1)
# get the polynomial to generate the trendline
p = np.poly1d(z)

# add trendline to the plot
plt.plot(x, p(x))

Output:

resulting plot with a trendline

Here, we first used the maplotlib pyplot’s plt.scatter() function to plot our scatter plot with the given x and y values. We then generated our trendline using the numpy polyfit() and ploy1d() functions and then used the plt.plot() function to add the trendline to our matplotlib plot.

Example 2 – Add higher order trendcurve to the plot

In the above example, we added a trendline (a straight line) that best fits the scatter plot. You can similarly add fit curves with higher-degree polynomials to the plots.

The only change you need to make is to pass the degree you want the fit curve to have to the numpy.polyfit() function. For example, to add a quadratic fit curve use the degree as 2, to add a cubic fit curve, use the degree as 3, etc.

Let’s add a quadratic fit line to the plot.

# plot x and y on scatter plot
plt.scatter(x, y)
plt.xlabel('Year')
plt.ylabel('1 USD in INR')

# get the trendline coefficients
z = np.polyfit(x, y, 2)
# get the polynomial to generate the trendline
p = np.poly1d(z)

# add trendline to the plot
plt.plot(x, p(x))

Output:

the resulting plot with a quadratic fit curve

You can see that the fit line now is a quadratic curve and not a straight line.

Let’s add a cubic fit curve to the above points.

# plot x and y on scatter plot
plt.scatter(x, y)
plt.xlabel('Year')
plt.ylabel('1 USD in INR')

# get the trendline coefficients
z = np.polyfit(x, y, 3)
# get the polynomial to generate the trendline
p = np.poly1d(z)

# add trendline to the plot
plt.plot(x, p(x))

Output:

the resulting curve with a cubic fit curve

You can see that we get a fit curve on the plot.

You might also be interested in –


Subscribe to our newsletter for more informative guides and tutorials.
We do not spam and you can opt out any time.


Author

  • Piyush

    Piyush is a data scientist passionate about using data to understand things better and make informed decisions. In the past, he's worked as a Data Scientist for ZS and holds an engineering degree from IIT Roorkee. His hobbies include watching cricket, reading, and working on side projects.