File size: 1,620 Bytes
4dcd117
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import streamlit as st
import plotly.graph_objects as go
import plotly.express as px
import time


def render_metrics_charts(current_study, current_trial):
    """把原来在 tab_charts 里的 DataFrame 可视化代码都搬进来,只依赖 current_trial 和 st.session_state."""
    if not current_trial.metrics_data:
        st.info("当前 Trial 没有可显示的指标数据。")
        return

    # 全局步骤控制、st.session_state.shared_selected_global_step 等逻辑照搬
    # …(省略,直接粘进去原来 streamlit_app.py 中的控制器和自动播放部分)…

    # 然后就是那段循环绘图和 st.metric + st.plotly_chart + st.dataframe
    metric_names = sorted(current_trial.metrics_data.keys())
    cols_per_row = st.slider(
        "每行图表数量",
        1,
        4,
        2,
        key=f"cols_slider_{current_study.name}_{current_trial.name}",
    )
    for i in range(0, len(metric_names), cols_per_row):
        chunk = metric_names[i : i + cols_per_row]
        cols = st.columns(len(chunk))
        for j, m in enumerate(chunk):
            with cols[j]:
                df = current_trial.get_metric_dataframe(m)
                if df is None or df.empty:
                    st.warning(f"指标 '{m}' 无数据")
                    continue
                st.subheader(m)
                # …Metric 计算 + Plotly 绘制 + 高亮 + 点击同步…
                fig = go.Figure()
                # …省略:完全同原来逻辑…
                st.plotly_chart(fig, use_container_width=True, key=f"chart_{m}")
                st.dataframe(df)