How to plot a time series array, with confidence intervals displayed, in python?
You could use pandas
function rolling(n)
to generate the mean and standard deviation values over n
consecutive points.
For the shade of the confidence intervals (represented by the space between standard deviations) you can use the function fill_between()
from matplotlib.pyplot
. For more information you could take a look over here, from which the following code is inspired.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#Declare the array containing the series you want to plot.
#For example:
time_series_array = np.sin(np.linspace(-np.pi, np.pi, 400)) + np.random.rand((400))
n_steps = 15 #number of rolling steps for the mean/std.
#Compute curves of interest:
time_series_df = pd.DataFrame(time_series_array)
smooth_path = time_series_df.rolling(n_steps).mean()
path_deviation = 2 * time_series_df.rolling(n_steps).std()
under_line = (smooth_path-path_deviation)[0]
over_line = (smooth_path+path_deviation)[0]
#Plotting:
plt.plot(smooth_path, linewidth=2) #mean curve.
plt.fill_between(path_deviation.index, under_line, over_line, color='b', alpha=.1) #std curves.
With the above code you obtain something like this:
Looks like, you're doubling the std twice. I guess it should be like this:
time_series_df = pd.DataFrame(time_series_array)
smooth_path = time_series_df.rolling(20).mean()
path_deviation = time_series_df.rolling(20).std()
plt.plot(smooth_path, linewidth=2)
plt.fill_between(path_deviation.index, (smooth_path-2*path_deviation)[0], (smooth_path+2*path_deviation)[0], color='b', alpha=.1)