# 120 RealtimeChart 实时图表 ## 用途 实时折线图:调用方向 `RealtimeBuffer` 追加数据后刷新,图表显示截至最新数据的固定时间窗口;可暂停视图;组件自身不设计时器,隐藏或空闲时不重绘。 ## 最小示例 ```go buf := mujica.NewRealtimeBuffer(600, "Bell") start := time.Date(2026, 10, 5, 9, 0, 0, 0, time.UTC) for i := range 60 { buf.Append(start.Add(time.Duration(i)*time.Second), float64(i%7)) } var state mujica.RealtimeChartState view := func(c *ui.Context) { mujica.Use(c, mujica.Settings{}) mujica.RealtimeChart(c, &state, buf, mujica.RealtimeChartOptions{Frame: mujica.ChartFrame{Label: "Sound"}, Window: 30 * time.Second}) } ui.Render(view, 400, 300, 1) ``` ## 参数 `func RealtimeChart(c *ui.Context, s *RealtimeChartState, buf *RealtimeBuffer, opts RealtimeChartOptions) ChartResult`;`NewRealtimeBuffer(capacity, names...)` 保存最近 `capacity` 个样本,`Append(t, values...)` 每个序列一个值且时间不倒退。 | 字段 | 类型 | 默认值 | 含义 | | --- | --- | --- | --- | | `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 | | `Frame.Height` | `float32` | `240` | 绘图区高度(DIP);负数 panic。 | | `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 | | `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 | | `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 | | `Window` | `time.Duration` | 必填 | 显示的时间窗口,止于最新样本(暂停时止于暂停那一刻)。 | | `Format` | `func(float64) string` | 6 位有效数字 | 读数格式。 | ## 状态 默认、悬停读数、键盘读数(焦点环 + 当前点加粗或描边)、加载、失败(可重试)、无数据。图表区始终保持同样尺寸。 暂停时按钮显示“继续”,新数据继续进入缓冲区但不改变视图。 ## 事件 返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试;`ValueChanged()` 表示暂停或继续;`Toggled()` 报告图例切换。 ## 键盘操作 - Tab:暂停按钮、图例、图表。 - 图表读数键同 LineChart;暂停按钮:Enter/Space。 ## 限制 - 数据追加在后台时,请通过 `Window.Update` 回到界面线程追加并刷新。 - 缓冲区按块丢弃旧样本,最多占用两倍容量。