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}])