Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -325,7 +325,24 @@ app.layout = html.Div([
|
|
325 |
"borderRadius": "12px",
|
326 |
"padding": "20px"
|
327 |
}
|
328 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
329 |
], style={
|
330 |
"fontFamily": "'Segoe UI', Tahoma, Geneva, Verdana, sans-serif",
|
331 |
"backgroundColor": "#f5f7fa",
|
@@ -562,7 +579,12 @@ def generate_joint_graph(joint_name, idx, action_df, delta_t, time_for_plot, all
|
|
562 |
showlegend=False,
|
563 |
plot_bgcolor='white',
|
564 |
paper_bgcolor='white',
|
565 |
-
font={'family': "'Segoe UI', Tahoma, Geneva, Verdana, sans-serif"}
|
|
|
|
|
|
|
|
|
|
|
566 |
)
|
567 |
}
|
568 |
|
@@ -575,6 +597,7 @@ def generate_joint_graph(joint_name, idx, action_df, delta_t, time_for_plot, all
|
|
575 |
def update_all_graphs(data, *hover_datas):
|
576 |
if not data or "data_df" not in data or len(data["data_df"]) == 0:
|
577 |
return [no_update] * 6
|
|
|
578 |
columns = data["columns"]
|
579 |
df = pd.DataFrame.from_records(data["data_df"])
|
580 |
action_df = pd.DataFrame(df["action"].tolist(), columns=columns)
|
@@ -588,20 +611,25 @@ def update_all_graphs(data, *hover_datas):
|
|
588 |
# 查找是否有任何一个hover落在阴影内
|
589 |
for idx, hover_data in enumerate(hover_datas):
|
590 |
if hover_data and "points" in hover_data and len(hover_data["points"]) > 0:
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
|
|
|
|
|
|
|
|
|
|
605 |
# 没有hover或不在阴影内,全部正常显示
|
606 |
return [
|
607 |
generate_joint_graph(joint, i, action_df, delta_t, time_for_plot, all_shadows)
|
|
|
325 |
"borderRadius": "12px",
|
326 |
"padding": "20px"
|
327 |
}
|
328 |
+
),
|
329 |
+
|
330 |
+
# 添加客户端JavaScript优化
|
331 |
+
html.Script("""
|
332 |
+
// 优化hover响应速度
|
333 |
+
window.addEventListener('load', function() {
|
334 |
+
// 减少hover事件的触发频率
|
335 |
+
let hoverTimeout;
|
336 |
+
document.addEventListener('mouseover', function(e) {
|
337 |
+
if (e.target.closest('.js-plotly-plot')) {
|
338 |
+
clearTimeout(hoverTimeout);
|
339 |
+
hoverTimeout = setTimeout(function() {
|
340 |
+
// 延迟处理hover事件,减少网络请求
|
341 |
+
}, 50);
|
342 |
+
}
|
343 |
+
});
|
344 |
+
});
|
345 |
+
""")
|
346 |
], style={
|
347 |
"fontFamily": "'Segoe UI', Tahoma, Geneva, Verdana, sans-serif",
|
348 |
"backgroundColor": "#f5f7fa",
|
|
|
579 |
showlegend=False,
|
580 |
plot_bgcolor='white',
|
581 |
paper_bgcolor='white',
|
582 |
+
font={'family': "'Segoe UI', Tahoma, Geneva, Verdana, sans-serif"},
|
583 |
+
hoverlabel=dict(
|
584 |
+
bgcolor="white",
|
585 |
+
font_size=12,
|
586 |
+
font_family="'Segoe UI', Tahoma, Geneva, Verdana, sans-serif"
|
587 |
+
)
|
588 |
)
|
589 |
}
|
590 |
|
|
|
597 |
def update_all_graphs(data, *hover_datas):
|
598 |
if not data or "data_df" not in data or len(data["data_df"]) == 0:
|
599 |
return [no_update] * 6
|
600 |
+
|
601 |
columns = data["columns"]
|
602 |
df = pd.DataFrame.from_records(data["data_df"])
|
603 |
action_df = pd.DataFrame(df["action"].tolist(), columns=columns)
|
|
|
611 |
# 查找是否有任何一个hover落在阴影内
|
612 |
for idx, hover_data in enumerate(hover_datas):
|
613 |
if hover_data and "points" in hover_data and len(hover_data["points"]) > 0:
|
614 |
+
try:
|
615 |
+
hover_time = float(hover_data["points"][0]["x"])
|
616 |
+
triggered_joint = columns[idx]
|
617 |
+
|
618 |
+
if is_hover_in_shadow(hover_time, all_shadows[triggered_joint]):
|
619 |
+
hover_idx = np.searchsorted(time_for_plot, hover_time)
|
620 |
+
start_idx = max(0, hover_idx - 20)
|
621 |
+
end_idx = min(len(time_for_plot) - 1, hover_idx + 20)
|
622 |
+
start_time = time_for_plot[start_idx]
|
623 |
+
end_time = time_for_plot[end_idx]
|
624 |
+
figures = []
|
625 |
+
for i, joint in enumerate(columns):
|
626 |
+
shadows_in_range = find_shadows_in_range(all_shadows[joint], start_time, end_time)
|
627 |
+
fig = generate_joint_graph(joint, i, action_df, delta_t, time_for_plot, all_shadows, shadows_in_range)
|
628 |
+
figures.append(fig)
|
629 |
+
return figures
|
630 |
+
except Exception as e:
|
631 |
+
print(f"Error processing hover data: {e}")
|
632 |
+
|
633 |
# 没有hover或不在阴影内,全部正常显示
|
634 |
return [
|
635 |
generate_joint_graph(joint, i, action_df, delta_t, time_for_plot, all_shadows)
|