# Creating Smooth Curves in Matplotlib: A Beginner’s Guide

## Plotting a Smooth Curve in Matplotlib: How to Get Started

Have you ever created a line chart in matplotlib and noticed that it looks too jagged, with lots of peaks and dips? Do you want to create a wiggly curve instead?

In this article, we will explore how to use the `make_interp_spline()` and `BSpline()` functions from `scipy.interpolate` to create a smooth curve in matplotlib. We will also cover the definition of x and y data, how to create equally spaced values for the x-axis using `linspace`, and how to modify the degree of the spline to achieve the desired level of wiggliness.

## Creating a Line Chart in Matplotlib

Before we dive into the details of creating a smooth curve in matplotlib, let’s start with the basics: creating a line chart. To do this, we will need to import numpy and matplotlib.

Numpy will be used to generate sample data, while matplotlib will create the actual chart.

### 1. Importing Libraries and Generating Sample Data

``````import numpy as np
import matplotlib.pyplot as plt

# Generate some sample data
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 6, 8, 10])``````

### 2. Creating the Line Chart

``````# Create a line chart
plt.plot(x, y)
plt.show()``````

When we run this code, we get a simple line chart with five data points. However, the line is quite jagged and lacks a smooth curve.

This is where interpolation comes in handy.

## Applying Interpolation to Create a Smooth Curve

Interpolation is the process of estimating values within a range of known values. In this case, we are using interpolation to estimate the values between our sample x and y data points to create a smooth curve.

To do this, we will use the `make_interp_spline()` function from `scipy.interpolate`.

## Using `make_interp_spline()` and `BSpline()`

The `make_interp_spline()` function takes x and y data points as inputs and returns a spline function that can be used to interpolate the data. We can then use the returned spline function to plot a smooth curve.

### 1. Importing `make_interp_spline()` and `BSpline()`

``from scipy.interpolate import make_interp_spline, BSpline``

### 2. Defining the Spline Function and Number of Points to Interpolate

``````# Define the spline function and number of points to interpolate
spline = make_interp_spline(x, y, k=3)
x_smooth = np.linspace(x.min(), x.max(), 1000)
y_smooth = spline(x_smooth)``````

### 3. Creating a Plot with the Smooth Curve

``````# Create a plot with the smooth curve
plt.plot(x_smooth, y_smooth)
plt.show()``````

In this code, we first define our x and y data points as before. We then use `make_interp_spline()` to create a spline function with a degree (k) of 3, which means that the curve will be relatively wiggly.

We also create an array of 1000 equally spaced values for `x_smooth` using the `linspace` function. Finally, we use the spline function to interpolate the y values for each of the `x_smooth` values and plot the resulting smooth curve using `plt.plot()`.

## Defining x and y Data

One thing to keep in mind when using `make_interp_spline()` is that the x values must be sorted. This is because the spline function is created based on the order of the x values.

Therefore, if your x values are not sorted, you will need to sort them before using `make_interp_spline()`.

## Creating Equally Spaced Values for the x-axis

In the previous example, we used the `linspace` function from numpy to create equally spaced values for the x-axis. This is a useful tool when you want to plot a smooth curve with a specific number of data points.

By changing the third argument of `linspace`, you can adjust the number of points to interpolate. For example, if you set the third argument to 10, you will only interpolate 10 points between the x values.

## Modifying the Degree of the Spline

The degree (k) of the spline determines how wiggly or “smooth” the resulting curve will be. A higher value of k will create a more wiggly curve, while a lower value of k will create a smoother curve.

In our examples, we used a degree of 3 to create a wiggly curve. If you want an even smoother curve, you can reduce the degree to 2 or 1.

If you want to learn more about creating smooth curves with matplotlib and numpy, there are plenty of additional resources available. Some useful sources include:

In conclusion, creating a smooth curve in matplotlib is a great way to make your line charts more visually appealing.

By using interpolation and the `make_interp_spline()` and `BSpline()` functions from `scipy.interpolate`, you can create customized curves to suit your needs. Remember to sort your x values, use `linspace` to create equally spaced values for the x-axis, and adjust the degree of the spline to achieve the desired level of smoothness.

With the help of these tools, you can create beautiful line charts that will impress your audience. In conclusion, creating a smooth curve in Matplotlib can greatly enhance the visual appeal of line charts.

By utilizing interpolation and the `make_interp_spline()` and `BSpline()` functions from `scipy.interpolate`, a highly customized curve can be created to suit the required needs. It is critical to remember to sort the x values, use `linspace` to create equally spaced values for the x-axis, and modify the degree of the spline to achieve the desired level of smoothness.

Matplotlib, coupled with `scipy.interpolate` and numpy are powerful tools in data visualization and must be leveraged to achieve better visual representations.