From 02e46ddf0b8286356d9af72e8f28bc63233a91c5 Mon Sep 17 00:00:00 2001 From: Erick Ahmed Date: Wed, 22 Jul 2026 18:11:35 +0200 Subject: [PATCH] Implement plotly-resampler --- stats/id_viewer.py | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/stats/id_viewer.py b/stats/id_viewer.py index 4c9ed00..104f162 100644 --- a/stats/id_viewer.py +++ b/stats/id_viewer.py @@ -7,7 +7,7 @@ from pathlib import Path import numpy as np import pandas as pd import plotly.graph_objects as go -import lttbc +from plotly_resampler import FigureResampler from stats.utils.extractor import load_data def _format_can_id_vec(s: pd.Series) -> pd.Series: @@ -41,29 +41,21 @@ def prepare_data(df, target_id): return filtered, byte_cols def plot_bits(df, byte_cols, can_id, title): - fig = go.Figure() + fig = FigureResampler() colors = ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33', '#a65628', '#f781bf'] n = len(byte_cols) - max_points = 2000 x = df['Timestamp'].to_numpy() if not df.empty else np.array([]) for i, col in enumerate(byte_cols): y = df[col].to_numpy(dtype=np.float32, copy=False) if not df.empty else np.array([]) - if len(x) > max_points and len(x) == len(y): - x_plot, y_plot = lttbc.downsample(x, y, max_points) - else: - x_plot, y_plot = x, y - - fig.add_trace(go.Scattergl( - x=x_plot, - y=y_plot, + fig.add_trace(go.Scatter( mode='lines', line=dict(shape='hv', width=2, color=colors[i % len(colors)]), name=col.upper(), legendgroup=col.upper(), hovertemplate=f"{col.upper()}
Time: %{{x}}
Value: %{{y}}", - )) + ), hf_x=x, hf_y=y) all_button = dict(label='ALL', method='restyle', args=[{'visible': [True] * n}]) none_button = dict(label='NONE', method='restyle', args=[{'visible': ['legendonly'] * n}])