zijian2022 commited on
Commit
c1e2c49
·
verified ·
1 Parent(s): 4540c16

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -16
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
- hover_time = float(hover_data["points"][0]["x"])
592
- triggered_joint = columns[idx]
593
- if is_hover_in_shadow(hover_time, all_shadows[triggered_joint]):
594
- hover_idx = np.searchsorted(time_for_plot, hover_time)
595
- start_idx = max(0, hover_idx - 20)
596
- end_idx = min(len(time_for_plot) - 1, hover_idx + 20)
597
- start_time = time_for_plot[start_idx]
598
- end_time = time_for_plot[end_idx]
599
- figures = []
600
- for i, joint in enumerate(columns):
601
- shadows_in_range = find_shadows_in_range(all_shadows[joint], start_time, end_time)
602
- fig = generate_joint_graph(joint, i, action_df, delta_t, time_for_plot, all_shadows, shadows_in_range)
603
- figures.append(fig)
604
- return figures
 
 
 
 
 
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)