plot
¶
plot_residuals(residuals=None, y_true=None, y_pred=None, fig=None, **fig_kw)
¶
Parameters:
Name | Type | Description | Default |
---|---|---|---|
residuals |
Union[numpy.ndarray, pandas.core.series.Series] |
Values of residuals. If |
None |
y_true |
Union[numpy.ndarray, pandas.core.series.Series] |
Ground truth (correct) values. Ignored if residuals is not |
None |
y_pred |
Union[numpy.ndarray, pandas.core.series.Series] |
Values of predictions. Ignored if residuals is not |
None |
fig |
Figure |
Pre-existing fig for the plot. Otherwise, call matplotlib.pyplot.figure() internally. |
None |
fig_kw |
dict |
Other keyword arguments are passed to matplotlib.pyplot.figure() |
{} |
Returns:
Type | Description |
---|---|
Figure |
Source code in skforecast/plot/plot.py
def plot_residuals(
residuals: Union[np.ndarray, pd.Series]=None,
y_true: Union[np.ndarray, pd.Series]=None,
y_pred: Union[np.ndarray, pd.Series]=None,
fig: matplotlib.figure.Figure=None,
**fig_kw
) -> matplotlib.figure.Figure:
"""
Parameters
----------
residuals : pandas Series, numpy ndarray, default `None`.
Values of residuals. If `None`, residuals are calculated internally using
`y_true` and `y_true`.
y_true : pandas Series, numpy ndarray, default `None`.
Ground truth (correct) values. Ignored if residuals is not `None`.
y_pred : pandas Series, numpy ndarray, default `None`.
Values of predictions. Ignored if residuals is not `None`.
fig : matplotlib.figure.Figure, default `None`.
Pre-existing fig for the plot. Otherwise, call matplotlib.pyplot.figure()
internally.
fig_kw : dict
Other keyword arguments are passed to matplotlib.pyplot.figure()
Returns
-------
fig: matplotlib.figure.Figure
"""
if residuals is None and (y_true is None or y_pred is None):
raise ValueError(
"If `residuals` argument is None then, `y_true` and `y_pred` must be provided."
)
if residuals is None:
residuals = y_pred - y_true
if fig is None:
fig = plt.figure(constrained_layout=True, **fig_kw)
gs = matplotlib.gridspec.GridSpec(2, 2, figure=fig)
ax1 = plt.subplot(gs[0, :])
ax2 = plt.subplot(gs[1, 0])
ax3 = plt.subplot(gs[1, 1])
ax1.plot(residuals)
sns.histplot(residuals, kde=True, bins=30, ax=ax2)
plot_acf(residuals, ax=ax3, lags=60)
ax1.set_title("Residuals")
ax2.set_title("Distribution")
ax3.set_title("Autocorrelation")
return fig
plot_multivariate_time_series_corr(corr, ax=None, **fig_kw)
¶
Heatmap plot of a correlation matrix.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
corr |
DataFrame |
correlation matrix |
required |
ax |
Axes |
Pre-existing ax for the plot. Otherwise, call matplotlib.pyplot.subplots() internally. |
None |
fig_kw |
dict |
Other keyword arguments are passed to matplotlib.pyplot.subplots() |
{} |
Returns:
Type | Description |
---|---|
Figure |
Source code in skforecast/plot/plot.py
def plot_multivariate_time_series_corr(
corr: pd.DataFrame,
ax: matplotlib.axes.Axes=None,
**fig_kw
) -> matplotlib.figure.Figure:
"""
Heatmap plot of a correlation matrix.
Parameters
----------
corr : pandas DataFrame
correlation matrix
ax : matplotlib.axes.Axes, default `None`.
Pre-existing ax for the plot. Otherwise, call matplotlib.pyplot.subplots()
internally.
fig_kw : dict
Other keyword arguments are passed to matplotlib.pyplot.subplots()
Returns
-------
fig: matplotlib.figure.Figure
"""
if ax is None:
fig, ax = plt.subplots(1, 1, **fig_kw)
sns.heatmap(
corr,
annot=True,
linewidths=.5,
ax=ax,
cmap=sns.color_palette("viridis", as_cmap=True)
)
ax.set_xlabel('Time series')
return fig
plot_prediction_distribution(bootstrapping_predictions, bw_method=None, **fig_kw)
¶
Ridge plot of bootstrapping predictions. This plot is very useful to understand the
uncertainty of forecasting predictions.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
bootstrapping_predictions |
DataFrame |
Bootstrapping predictions created with |
required |
bw_method |
Optional[Any] |
The method used to calculate the estimator bandwidth. This can be 'scott', 'silverman', a scalar constant or a Callable. If None (default), 'scott' is used. See scipy.stats.gaussian_kde for more information. |
None |
fig_kw |
dict |
All additional keyword arguments are passed to the |
{} |
Returns |
None |
required | |
------ |
None |
required | |
fig |
matplotlib.figure.Figure |
required | |
axes |
numpy.ndarray of matplotlib.axes.Axes |
required |
Source code in skforecast/plot/plot.py
def plot_prediction_distribution(
bootstrapping_predictions: pd.DataFrame,
bw_method: Optional[Any]=None,
**fig_kw
) -> matplotlib.figure.Figure:
"""
Ridge plot of bootstrapping predictions. This plot is very useful to understand the
uncertainty of forecasting predictions.
Parameters
----------
bootstrapping_predictions : pandas DataFrame
Bootstrapping predictions created with `Forecaster.predict_bootstrapping`.
bw_method : str, scalar, Callable, default `None`
The method used to calculate the estimator bandwidth. This can be 'scott',
'silverman', a scalar constant or a Callable. If None (default), 'scott' is used.
See scipy.stats.gaussian_kde for more information.
fig_kw : dict
All additional keyword arguments are passed to the `pyplot.figure` call.
Returns
------
fig : matplotlib.figure.Figure
axes: numpy.ndarray of matplotlib.axes.Axes
"""
index = bootstrapping_predictions.index.astype(str).to_list()[::-1]
palette = sns.cubehelix_palette(len(index), rot=-.25, light=.7, reverse=False)
fig, axs = plt.subplots(len(index), 1, sharex=True, **fig_kw)
if not isinstance(axs, np.ndarray):
axs = np.array([axs])
for i, step in enumerate(index):
plot = (
bootstrapping_predictions.loc[step, :]
.plot.kde(ax=axs[i], bw_method=bw_method, lw=0.5)
)
# Fill density area
x = plot.get_children()[0]._x
y = plot.get_children()[0]._y
axs[i].fill_between(x, y, color=palette[i])
prediction_mean = bootstrapping_predictions.loc[step, :].mean()
# Closest point on x to the prediction mean
idx = np.abs(x - prediction_mean).argmin()
axs[i].vlines(x[idx], ymin=0, ymax=y[idx], linestyle="dashed", color='w')
axs[i].spines['top'].set_visible(False)
axs[i].spines['right'].set_visible(False)
axs[i].spines['bottom'].set_visible(False)
axs[i].spines['left'].set_visible(False)
axs[i].set_yticklabels([])
axs[i].set_yticks([])
axs[i].set_ylabel(step, rotation='horizontal')
axs[i].set_xlabel('prediction')
fig.subplots_adjust(hspace=-0)
fig.suptitle('Forecasting distribution per step')
return fig