Plotting Functions and Visualising Models

1.10. Plotting Functions and Visualising Models#

It can often be useful to visualise mathematical functions. In order to plot mathematical functions using line plots we need to obtain the corresponding \(x\) and \(y\) values. One of the easiest ways to do this is to generate a range of \(x\) values using the numpy function linspace.

First we need to import numpy.

import numpy as np

Then we use linspace to create an array of equally spaces values that lie between the start and end values specified.

np.linspace(start, end, number of values)

The following creates an array containing 10 values between 2 and 4 (inclusive).

import numpy as np

print(np.linspace(2, 4, 10))

To create the corresponding \(y\) values we apply our function to \(x\), then we plot the results!

Example: Here we plot the function \(y = x^2\) to the values of \(x\) between -4 and 4.

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-4, 4, 100)
y = x**2

plt.figure(figsize=(3, 3))
plt.plot(x, y)
plt.xlabel("x")
plt.ylabel("y")
plt.tight_layout()
plt.savefig("plot.png")
../../_images/parabola.png

Example: Here we plot the function \(y = 0.5x + 3\) to the values of \(x\) between 0 and 10.

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100)
y = 0.5 * x + 3

plt.figure(figsize=(3, 3))
plt.plot(x, y)
plt.xlabel("x")
plt.ylabel("y")
plt.xlim([0, 10])
plt.ylim([0, 10])
plt.tight_layout()
plt.savefig("plot.png")
../../_images/line.png

Scatter plots and line plots can be added to the same figure, we just use one command after the other.

import numpy as np
import matplotlib.pyplot as plt

x_points = np.array([1, 2, 3, 4, 5])
y_points = np.array([1, 2, 1, 1, 3])

x_line = np.linspace(0, 10, 100)
y_line = 0.5 * x_line + 3

plt.figure(figsize=(3, 3))
plt.scatter(x_points, y_points)
plt.plot(x_line, y_line)
plt.xlabel("x")
plt.ylabel("y")
plt.xlim([0, 10])
plt.ylim([0, 10])
plt.tight_layout()
plt.savefig("plot.png")
../../_images/line_scatter.png

Now let’s put this all together to visualise the model we built on our study dataset. Here is a list of all the steps we’ve carried out.

  1. Load the csv dataset into numpy arrays

  2. Build a linear regression model using sklearn

  3. Extract out the intercept and gradient from our linear regression model

  4. Calculate the \(x\) and \(y\) values to plot the function associated with the linear regression model

  5. Produce a figure that plots:

    • The data as a scatter plot

    • The linear regression model as a line

Here is the corresponding code:

from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# Load data
data = pd.read_csv("study.csv")
x = data["Time Spent Studying (hours)"].to_numpy()
y = data["Exam Mark (%)"].to_numpy()

# Build linear regression model
linear_reg = LinearRegression()
linear_reg.fit(x.reshape(-1, 1), y)

intercept = linear_reg.intercept_
gradient = linear_reg.coef_[0]

# Create x and y values to visualise the model function
x_model = np.linspace(0, 10, 50)
y_model = gradient * x_model + intercept

# Visualise the results
plt.figure(figsize=(4, 4))
plt.scatter(x, y)  # Data
plt.plot(x_model, y_model, color="red")  # Model
plt.xlabel("Amout of Time Spent Studying (hours)")
plt.ylabel("Exam Mark (%)")
plt.xlim([0, 10])
plt.ylim([0, 100])
plt.tight_layout()
plt.savefig("plot.png")
../../_images/nice_line_scatter.png
Code Challenge: Visualise a Linear Regresion Model

Now we’ll visualise the linear regression model we just built on our movie data. movie.csv

Instructions

You will need to combine the code you have written in the previous challenge Fitting a Linear Regression Model to:

  1. Load the csv dataset into numpy arrays

  2. Build a linear regression model using sklearn

  3. Extract out the intercept and gradient from our linear regression model

Then you will need to

  1. Calculate the x and y values to plot the function associated with the linear regression model

    • Use np.linspace(0, 225, 50) to create the x values

  2. Produce a figure that:

    • Plots the data as a scatter plot, marker size = 5 and alpha = 0.5

    • Plots the linear regression model as a line, in red

    • Has labels Budget ($M) and Box Office ($M)

    • Has x limits: 0 to 240

    • Has y limits: 0 to 1600

Your plot should look like this:

../../_images/visualise_a_lr_model.png
Solution

Solution is locked