Skip to main content
The samay.visualization module provides visualization classes for different time series tasks.

ForecastVisualization

Visualize forecasting results with historical context, ground truth, and predictions.
from samay.visualization import ForecastVisualization

vis = ForecastVisualization(trues, preds, histories)
vis.plot(channel_idx=0, time_idx=0, crop_history=False)

Constructor

trues
array-like
required
Ground truth values
preds
array-like
required
Predicted values
histories
array-like
required
Historical context values

plot Method

channel_idx
int
default:"1"
Index of the channel (variate) to plot
time_idx
int
default:"1"
Index of the time window to plot
crop_history
bool
default:"False"
If True, crops the history to 3x the forecast length. If False, shows the full history

Example

import numpy as np
from samay.visualization import ForecastVisualization

# Sample data
trues = [np.random.randn(10, 24) for _ in range(100)]  # 100 windows, 10 channels, 24 timesteps
preds = [np.random.randn(10, 24) for _ in range(100)]
histories = [np.random.randn(10, 96) for _ in range(100)]  # 96 historical timesteps

# Create visualization
vis = ForecastVisualization(trues, preds, histories)

# Plot specific channel and time window
vis.plot(channel_idx=0, time_idx=5, crop_history=True)

ImputationVisualization

Visualize imputation results showing ground truth, predictions, and missing value masks.
from samay.visualization import ImputationVisualization

vis = ImputationVisualization(trues, preds, masks)
vis.plot()

Constructor

trues
np.ndarray
required
Ground truth values
preds
np.ndarray
required
Predicted (imputed) values
masks
np.ndarray
required
Binary mask indicating missing values (1 = missing, 0 = observed)

plot Method

Plots a randomly selected time window and channel, showing both the time series and the missing value mask.

Example

import numpy as np
from samay.visualization import ImputationVisualization

# Sample data (100 samples, 5 channels, 48 timesteps)
trues = np.random.randn(100, 5, 48)
preds = np.random.randn(100, 5, 48)
masks = np.random.randint(0, 2, size=(100, 5, 48))  # Binary mask

# Create and display visualization
vis = ImputationVisualization(trues, preds, masks)
vis.plot()

AnomalyDetectionVisualization

Visualize anomaly detection results with observed values, predictions, and anomaly scores.
from samay.visualization import AnomalyDetectionVisualization

vis = AnomalyDetectionVisualization(trues, preds, labels)
vis.plot()

Constructor

trues
array-like
required
Observed values
preds
array-like
required
Predicted values
labels
array-like
required
Binary labels indicating anomalies (1 = anomaly, 0 = normal)

plot Method

Displays a plot showing:
  • Observed values (blue)
  • Predicted values (red)
  • Anomaly scores (black, calculated as squared error)
The plot focuses on a region around known anomalies (hardcoded indices: 74158-74984 with 512-step buffer).

Example

import numpy as np
from samay.visualization import AnomalyDetectionVisualization

# Sample data
trues = np.random.randn(100000)
preds = trues + np.random.randn(100000) * 0.1
labels = np.zeros(100000)
labels[74158:74984] = 1  # Mark anomaly region

# Create and display visualization
vis = AnomalyDetectionVisualization(trues, preds, labels)
vis.plot()

ClassificationVisualization

Visualize time series classification results using PCA dimensionality reduction of embeddings.
from samay.visualization import ClassificationVisualization

vis = ClassificationVisualization(embeddings, labels)
vis.plot()

Constructor

embeddings
np.ndarray
required
Time series embeddings (feature vectors)
labels
np.ndarray
required
Class labels for each embedding

plot Method

Creates a 2D scatter plot of embeddings after PCA dimensionality reduction, colored by class labels.

Example

import numpy as np
from samay.visualization import ClassificationVisualization

# Sample embeddings (500 samples, 128 features)
embeddings = np.random.randn(500, 128)
labels = np.random.randint(0, 5, size=500)  # 5 classes

# Create and display visualization
vis = ClassificationVisualization(embeddings, labels)
vis.plot()

Legacy Visualization Function

The module also provides a legacy visualize function from samay.utils for backward compatibility.
from samay.utils import visualize

visualize(
    task_name="forecasting",
    trues=trues,
    preds=preds,
    history=history,
    context_len=512,
    dataset="ETTh1",
    freq="1H"
)
See the Data Processing Utilities for more details on the legacy visualize function.

Usage Notes

Task-Specific Visualizations

Each visualization class is designed for a specific task:
  • ForecastVisualization: Shows historical context, ground truth, and forecast
  • ImputationVisualization: Shows missing value masks and imputed values
  • AnomalyDetectionVisualization: Shows anomaly scores alongside observations
  • ClassificationVisualization: Shows embedding space in 2D using PCA

Customization

All visualization classes use matplotlib under the hood. You can customize plots by:
  1. Modifying the plot after calling .plot()
  2. Using plt.figure() before calling .plot() to set figure size
  3. Adding additional plot elements after .plot() returns
import matplotlib.pyplot as plt
from samay.visualization import ForecastVisualization

plt.figure(figsize=(16, 6))
vis = ForecastVisualization(trues, preds, histories)
vis.plot(channel_idx=0, time_idx=0)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("forecast.png", dpi=300)

Build docs developers (and LLMs) love