5 Best Ways to Plot a Time Series in Python

πŸ’‘ Problem Formulation: When dealing with sequential data, especially in the context of finance, weather, or user activity, it’s often critical to visualize this information to identify trends and patterns. This article explains how to plot time series data in Python, turning raw data like an array of dates and corresponding values into a clear graphical representation.

Method 1: Using Matplotlib

Matplotlib is a widely-used plotting library in Python which provides an object-oriented API for embedding plots into applications. It’s especially good for creating static, interactive, and animated visualizations in Python. For time series, Matplotlib can display dates on the x-axis, and the corresponding values on the y-axis in a clear and concise manner.

Here’s an example:

import matplotlib.pyplot as plt
import pandas as pd

# Assuming 'data' is a DataFrame with 'Date' and 'Value' columns
data = pd.DataFrame({'Date': pd.date_range(start='1/1/2020', periods=5), 'Value': [1, 3, 2, 5, 4]})
plt.plot(data['Date'], data['Value'])
plt.title('Time Series Example')
plt.xlabel('Date')
plt.ylabel('Value')
plt.show()

The code will generate a plot with a line graph representing the time series.

This snippet first imports Matplotlib’s pyplot and pandas, then creates a pandas DataFrame with a date range and some corresponding values. The plt.plot() function is used to create the line plot, with the DataFrame columns specified as arguments. The labels and title are set before the plot is shown using plt.show().

Method 2: Using Seaborn

Seaborn builds on top of Matplotlib and introduces additional plot types and makes it easier to create complex visualizations. It’s particularly handy for statistical time series data and can automatically estimate and plot a regression line when appropriate.

Here’s an example:

import seaborn as sns
import pandas as pd

# Assuming 'data' is a DataFrame with 'Date' and 'Value' columns
data = pd.DataFrame({'Date': pd.date_range(start='1/1/2020', periods=5), 'Value': [1, 3, 2, 5, 4]})
sns.lineplot(x='Date', y='Value', data=data)
plt.show()

The code will produce a sleek line plot visualizing the time series data.

Here, the seaborn library is used along with pandas to create a DataFrame. The sns.lineplot() function takes the DataFrame columns as x and y parameters. Matplotlib is still used to call plt.show() to display the plot.

Method 3: Using Plotly

Plotly is a modern platform for creating interactive and publication-quality graphs online. It offers a high-level API for creating a wide variety of graphical representations, including time series plots that are responsive and interactive.

Here’s an example:

import plotly.express as px
import pandas as pd

# Assuming 'data' is a DataFrame with 'Date' and 'Value' columns
data = pd.DataFrame({'Date': pd.date_range(start='1/1/2020', periods=5), 'Value': [1, 3, 2, 5, 4]})
fig = px.line(data, x='Date', y='Value', title='Interactive Time Series Example')
fig.show()

The result is an interactive line chart enabling the user to zoom in/out, pan, and hover over points for more information.

Plotly’s express module, together with pandas, is used to create a DataFrame and then generate an interactive line plot. The px.line() function is simple to use and the resulting figure is displayed with fig.show().

Method 4: Using Pandas Built-in Plotting

The pandas library itself includes methods for plotting data. Since pandas is typically used for handling time series data, its integrated plotting capabilities are convenient for quick and simple plots without the need for additional libraries.

Here’s an example:

import pandas as pd

# Assuming 'data' is a Series with a DateTime index
data = pd.Series([1, 3, 2, 5, 4], index=pd.date_range(start='1/1/2020', periods=5))
data.plot(title='Pandas Time Series')
plt.xlabel('Date')
plt.ylabel('Value')
plt.show()

The output is a straightforward line plot of the time series data.

This snippet uses pandas to create a Series object with a date range as the index, and then calls the plot() method directly on the Series object. Additional plot customization is provided by Matplotlib’s functions before the plot is displayed.

Bonus One-Liner Method 5: Using Pyplot’s plot_date

Matplotlib’s pyplot module includes a function called plot_date that is specifically designed for plotting dates on the x-axis and is particularly useful for creating quick time series plots.

Here’s an example:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

dates = mdates.date2num(pd.date_range(start='1/1/2020', periods=5))
values = [1, 3, 2, 5, 4]
plt.plot_date(dates, values)
plt.show()

This one-liner results in a plot that displays data points with markers at specific dates.

In this example, matplotlib.dates.date2num() converts the pandas date range to Matplotlib’s format. Then, plt.plot_date() is used to create a scatter plot where each date has a corresponding marker.

Summary/Discussion

Method 1: Matplotlib. Strong for highly customizable plots. Requires more boilerplate code.
Method 2: Seaborn. Good for statistical analysis. More aesthetic defaults. Less control than pure Matplotlib.
Method 3: Plotly. Best for interactive plots. Modern and visually appealing. Not ideal for generating static images.
Method 4: Pandas Built-in Plotting. Most convenient for quick plotting directly from DataFrames or Series. Limited customization options.
Method 5: Pyplot’s plot_date. Simple one-liner suitable for basic plots with date information. Lacks advanced features.