Charts I: components 101-120
This commit is contained in:
116 files changed
+7825
-3
No files matched your search
@@ -0,0 +1,54 @@
|
||||
# 101 LineChart 折线图
|
||||
|
||||
## 用途
|
||||
|
||||
多序列折线图:数值或时间横轴,缺值(NaN)处断开,悬停与键盘读数,图例勾选框控制序列显隐。大数据按像素列抽稀绘制,10 万点保持流畅。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
series := []mujica.ChartSeries{
|
||||
{Name: "Pews", Values: []float64{3, 5, math.NaN(), 4, 8}},
|
||||
{Name: "Candles", Values: []float64{5, 2, 6, 7, 1}},
|
||||
}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.LineChart(c, series, mujica.LineChartOptions{Frame: mujica.ChartFrame{Label: "Chapel"}})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
`func LineChart(c *ui.Context, series []ChartSeries, opts LineChartOptions) ChartResult`;`ChartSeries{Name, Values}`,各序列等长且名称唯一。
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 |
|
||||
| `Frame.Height` | `float32` | `240` | 绘图区高度(DIP);负数 panic。 |
|
||||
| `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 |
|
||||
| `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 |
|
||||
| `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 |
|
||||
| `X` | `[]float64` | nil | 点 i 的横坐标,须递增;nil 时为下标。 |
|
||||
| `Times` | `[]time.Time` | nil | 时间轴;与 `X` 二选一,须递增。 |
|
||||
| `Format` | `func(float64) string` | 6 位有效数字 | 读数中的数值格式。 |
|
||||
|
||||
## 状态
|
||||
|
||||
默认、悬停或键盘读数(竖线 + 各序列放大标记)、隐藏序列(图例划线、空心标记)、加载、失败、无数据(全部为缺值时)。
|
||||
|
||||
## 事件
|
||||
|
||||
返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试;`Toggled()` 返回本帧被切换显隐的序列名。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab:聚焦绘图区(图例勾选框在其前)。
|
||||
- ←/→(以及 ↑/↓):在数据点之间移动,读数显示在图表下方并向读屏软件播报;第一次按键进入第一个点。
|
||||
- Home/End:第一个/最后一个点;Escape:清除读数。
|
||||
- 图例勾选框:Space 切换序列显隐。
|
||||
|
||||
## 限制
|
||||
|
||||
- 数据切片以首元素地址与长度识别;原地修改数据后请传入新切片,缓存的坐标范围才会更新。
|
||||
- 每条序列除颜色外还有不同形状的标记(圆、方、菱形、三角),密集时按间隔绘制。
|
||||
@@ -0,0 +1,54 @@
|
||||
# 102 AreaChart 面积图
|
||||
|
||||
## 用途
|
||||
|
||||
面积图:单序列填充到基线,或多序列堆叠;基线可配置;悬停与键盘读数显示各序列原值(不是堆叠后的值)。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
series := []mujica.ChartSeries{
|
||||
{Name: "Matins", Values: []float64{3, 4, 6, 5}},
|
||||
{Name: "Vespers", Values: []float64{2, 3, 2, 4}},
|
||||
}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.AreaChart(c, series, mujica.AreaChartOptions{Frame: mujica.ChartFrame{Label: "Attendance"}, Stacked: true})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
`func AreaChart(c *ui.Context, series []ChartSeries, opts AreaChartOptions) ChartResult`。
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 |
|
||||
| `Frame.Height` | `float32` | `240` | 绘图区高度(DIP);负数 panic。 |
|
||||
| `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 |
|
||||
| `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 |
|
||||
| `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 |
|
||||
| `X`, `Times` | | nil | 同 LineChart。 |
|
||||
| `Stacked` | `bool` | false | 可见序列依次堆叠;隐藏序列不参与堆叠。 |
|
||||
| `Baseline` | `float64` | `0` | 面积的起始值;坐标轴总包含基线。 |
|
||||
| `Format` | `func(float64) string` | 6 位有效数字 | 读数格式。 |
|
||||
|
||||
## 状态
|
||||
|
||||
默认、悬停读数、键盘读数(焦点环 + 当前点加粗或描边)、加载、失败(可重试)、无数据。图表区始终保持同样尺寸。
|
||||
|
||||
## 事件
|
||||
|
||||
返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试;`Toggled()` 同 LineChart。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab:聚焦绘图区(图例勾选框在其前)。
|
||||
- ←/→(以及 ↑/↓):在数据点之间移动,读数显示在图表下方并向读屏软件播报;第一次按键进入第一个点。
|
||||
- Home/End:第一个/最后一个点;Escape:清除读数。
|
||||
|
||||
## 限制
|
||||
|
||||
- 缺值处面积断开;堆叠时缺值按 0 计入后续序列。
|
||||
- 填充为半透明的序列色,边线保持实色以满足 3:1 对比。
|
||||
@@ -0,0 +1,52 @@
|
||||
# 103 BarChart 柱状图
|
||||
|
||||
## 用途
|
||||
|
||||
柱状图:纵向或横向,分组或堆叠,支持负值与柱端数值标签,键盘逐柱读数。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
categories := []string{"Nave", "Choir", "Crypt"}
|
||||
series := []mujica.ChartSeries{{Name: "Gold", Values: []float64{4, -2, 3}}, {Name: "Silver", Values: []float64{2, 5, 1}}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.BarChart(c, categories, series, mujica.BarChartOptions{Frame: mujica.ChartFrame{Label: "Tithes"}, Labels: true})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
`func BarChart(c *ui.Context, categories []string, series []ChartSeries, opts BarChartOptions) ChartResult`;每条序列的值与类别一一对应,NaN 不画柱。
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 |
|
||||
| `Frame.Height` | `float32` | `240` | 绘图区高度(DIP);负数 panic。 |
|
||||
| `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 |
|
||||
| `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 |
|
||||
| `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 |
|
||||
| `Horizontal` | `bool` | false | 类别在纵轴,柱横向延伸。 |
|
||||
| `Stacked` | `bool` | false | 每个类别一根柱,正值向上、负值向下堆叠。 |
|
||||
| `Labels` | `bool` | false | 在柱端写出数值(堆叠时不写)。 |
|
||||
| `Format` | `func(float64) string` | 6 位有效数字 | 数值格式。 |
|
||||
|
||||
## 状态
|
||||
|
||||
默认、悬停读数、键盘读数(焦点环 + 当前点加粗或描边)、加载、失败(可重试)、无数据。图表区始终保持同样尺寸。 选中柱以描边标出,柱内有序列形状标记。
|
||||
|
||||
## 事件
|
||||
|
||||
返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试;多序列时 `Toggled()` 报告图例切换。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab:聚焦绘图区(图例勾选框在其前)。
|
||||
- ←/→(以及 ↑/↓):逐柱移动(按类别、再按序列),读数显示在图表下方并向读屏软件播报;第一次按键进入第一个点。
|
||||
- Home/End:第一个/最后一个点;Escape:清除读数。
|
||||
|
||||
## 限制
|
||||
|
||||
- 极细的柱仍有 6 DIP 的悬停范围。
|
||||
- 类别标签过密时会跳过重叠的标签,读数仍包含完整类别名。
|
||||
@@ -0,0 +1,50 @@
|
||||
# 104 PieChart 饼图
|
||||
|
||||
## 用途
|
||||
|
||||
饼图与环形图:扇区按占比绘制并标注百分比;过窄的扇区可合并为“其他”;环形图中心显示总计。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
slices := []mujica.ChartSlice{{Label: "Wax", Value: 50}, {Label: "Oil", Value: 30}, {Label: "Salt", Value: 4}, {Label: "Ash", Value: 3}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.PieChart(c, slices, mujica.PieChartOptions{Frame: mujica.ChartFrame{Label: "Stores"}, Donut: true, MinAngle: 20})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
`func PieChart(c *ui.Context, slices []ChartSlice, opts PieChartOptions) ChartResult`;`ChartSlice{Label, Value}`,值须为有限且 ≥ 0。
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 |
|
||||
| `Frame.Height` | `float32` | `240` | 绘图区高度(DIP);负数 panic。 |
|
||||
| `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 |
|
||||
| `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 |
|
||||
| `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 |
|
||||
| `Donut` | `bool` | false | 环形图,中心写总计。 |
|
||||
| `MinAngle` | `float64` | `0` | 小于该角度(度)的扇区达到两个及以上时合并为“其他”;须在 [0, 360)。 |
|
||||
| `Format` | `func(float64) string` | 6 位有效数字 | 数值格式。 |
|
||||
|
||||
## 状态
|
||||
|
||||
默认、悬停读数、键盘读数(焦点环 + 当前点加粗或描边)、加载、失败(可重试)、无数据。图表区始终保持同样尺寸。 当前扇区向外凸出。总计为 0 时显示无数据。
|
||||
|
||||
## 事件
|
||||
|
||||
返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab:聚焦绘图区(图例勾选框在其前)。
|
||||
- ←/→(以及 ↑/↓):在数据点之间移动,读数显示在图表下方并向读屏软件播报;第一次按键进入第一个点。
|
||||
- Home/End:第一个/最后一个点;Escape:清除读数。
|
||||
|
||||
## 限制
|
||||
|
||||
- 只有一个窄扇区时不合并,以免“其他”只代表一项。
|
||||
- 扇区内的形状标记与百分比文字按对比度自动选用正文色或表面色。
|
||||
@@ -0,0 +1,52 @@
|
||||
# 105 ScatterChart 散点图
|
||||
|
||||
## 用途
|
||||
|
||||
散点图:按分组着色并配不同形状,点大小可映射为气泡,拖动框选或用键盘选中点。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
var selected []mujica.ScatterKey
|
||||
groups := []mujica.ScatterGroup{{Name: "Monks", Points: []mujica.ScatterPoint{{X: 1, Y: 2, Size: 4}, {X: 3, Y: 5, Size: 9}}}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.ScatterChart(c, &selected, groups, mujica.ScatterChartOptions{Frame: mujica.ChartFrame{Label: "Choir"}, Bubbles: true})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
`func ScatterChart(c *ui.Context, selected *[]ScatterKey, groups []ScatterGroup, opts ScatterChartOptions) ChartResult`;`ScatterGroup{Name, Points []ScatterPoint{X, Y, Size}}`,`ScatterKey{Group, Point}` 标识一个点。
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 |
|
||||
| `Frame.Height` | `float32` | `240` | 绘图区高度(DIP);负数 panic。 |
|
||||
| `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 |
|
||||
| `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 |
|
||||
| `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 |
|
||||
| `Bubbles` | `bool` | false | 按 `Size` 映射点面积(直径 4–18 DIP)。 |
|
||||
| `Format` | `func(float64) string` | 6 位有效数字 | 读数格式。 |
|
||||
|
||||
## 状态
|
||||
|
||||
默认、悬停读数、键盘读数(焦点环 + 当前点加粗或描边)、加载、失败(可重试)、无数据。图表区始终保持同样尺寸。 选中的点外加圆环,读数注明“已选”。
|
||||
|
||||
## 事件
|
||||
|
||||
返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试;`ValueChanged()` 表示 `*selected` 被框选或键盘改变;多组时 `Toggled()` 报告图例切换。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab:聚焦绘图区(图例勾选框在其前)。
|
||||
- ←/→(以及 ↑/↓):在数据点之间移动,读数显示在图表下方并向读屏软件播报;第一次按键进入第一个点。
|
||||
- Home/End:第一个/最后一个点;Escape:清除读数。
|
||||
- Enter/Space:选中或取消当前点。
|
||||
- 在绘图区拖动:框选,替换现有选择。
|
||||
|
||||
## 限制
|
||||
|
||||
- 框选替换选择,不支持按住修饰键追加。
|
||||
- 点数较多时逐点绘制,没有抽稀。
|
||||
@@ -0,0 +1,49 @@
|
||||
# 106 RadarChart 雷达图
|
||||
|
||||
## 用途
|
||||
|
||||
雷达图:三个及以上维度,多序列多边形,刻度环,按维度悬停或键盘读数。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
axes := []string{"Voice", "Latin", "Chant", "Organ"}
|
||||
series := []mujica.ChartSeries{{Name: "Agnès", Values: []float64{8, 6, 9, 4}}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.RadarChart(c, axes, series, mujica.RadarChartOptions{Frame: mujica.ChartFrame{Label: "Skills"}})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
`func RadarChart(c *ui.Context, axes []string, series []ChartSeries, opts RadarChartOptions) ChartResult`;每条序列每个维度一个值,值须 ≥ 0。
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 |
|
||||
| `Frame.Height` | `float32` | `240` | 绘图区高度(DIP);负数 panic。 |
|
||||
| `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 |
|
||||
| `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 |
|
||||
| `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 |
|
||||
| `Max` | `float64` | 自动取整 | 外环代表的值;0 按数据向上取整。 |
|
||||
| `Format` | `func(float64) string` | 6 位有效数字 | 读数格式。 |
|
||||
|
||||
## 状态
|
||||
|
||||
默认、悬停读数、键盘读数(焦点环 + 当前点加粗或描边)、加载、失败(可重试)、无数据。图表区始终保持同样尺寸。 当前维度的轴线加粗、标签变为正文色。
|
||||
|
||||
## 事件
|
||||
|
||||
返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试;多序列时 `Toggled()` 报告图例切换。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab:聚焦绘图区(图例勾选框在其前)。
|
||||
- ←/→(以及 ↑/↓):按维度移动,读数显示在图表下方并向读屏软件播报;第一次按键进入第一个点。
|
||||
- Home/End:第一个/最后一个点;Escape:清除读数。
|
||||
|
||||
## 限制
|
||||
|
||||
- 缺值按 0 画在中心,读数显示“无数值”。
|
||||
@@ -0,0 +1,48 @@
|
||||
# 107 HeatmapChart 热力图
|
||||
|
||||
## 用途
|
||||
|
||||
二维矩阵热力图:按值分五级着色,右侧色阶图例标出最小与最大值;单元格读数;空值单元格为虚线框。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
rows, cols := []string{"Mon", "Tue"}, []string{"Matins", "Lauds", "Vespers"}
|
||||
values := [][]float64{{1, 4, 9}, {3, math.NaN(), 7}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.HeatmapChart(c, rows, cols, values, mujica.HeatmapChartOptions{Frame: mujica.ChartFrame{Label: "Hours"}})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
`func HeatmapChart(c *ui.Context, rows, cols []string, values [][]float64, opts HeatmapChartOptions) ChartResult`;`values[行][列]`,NaN 为空值。
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 |
|
||||
| `Frame.Height` | `float32` | `240` | 绘图区高度(DIP);负数 panic。 |
|
||||
| `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 |
|
||||
| `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 |
|
||||
| `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 |
|
||||
| `Format` | `func(float64) string` | 6 位有效数字 | 单元格与读数格式。 |
|
||||
|
||||
## 状态
|
||||
|
||||
默认、悬停读数、键盘读数(焦点环 + 当前点加粗或描边)、加载、失败(可重试)、无数据。图表区始终保持同样尺寸。 单元格足够大时直接写出数值,不只依赖颜色。
|
||||
|
||||
## 事件
|
||||
|
||||
返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab:聚焦热力图。
|
||||
- ←/→:同一行左右移动;↑/↓:同一列上下移动;第一次按键进入左上角。
|
||||
- Home/End:第一个/最后一个单元格;Escape:清除读数。
|
||||
|
||||
## 限制
|
||||
|
||||
- 颜色分五级,不做连续渐变。
|
||||
@@ -0,0 +1,50 @@
|
||||
# 108 CalendarHeatmap 日历热力图
|
||||
|
||||
## 用途
|
||||
|
||||
按日的贡献图:一列一周,按当年最大值分四级着色;年份切换;周起始可配置;逐日读数。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
year := 2026
|
||||
values := map[mujica.Date]float64{{Year: 2026, Month: time.March, Day: 4}: 5}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.CalendarHeatmap(c, &year, values, mujica.CalendarHeatmapOptions{Frame: mujica.ChartFrame{Label: "Prayers"}})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
`func CalendarHeatmap(c *ui.Context, year *int, values map[Date]float64, opts CalendarHeatmapOptions) ChartResult`;`*year` 须在 1–9999。
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 |
|
||||
| `Frame.Height` | `float32` | `240` | 绘图区高度(DIP);负数 panic。 |
|
||||
| `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 |
|
||||
| `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 |
|
||||
| `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 |
|
||||
| `WeekStart` | `WeekStart` | 跟随语言 | 每列第一行是星期几。 |
|
||||
| `Format` | `func(float64) string` | 6 位有效数字 | 读数格式。 |
|
||||
|
||||
## 状态
|
||||
|
||||
默认、无记录日(浅色格)、四级色阶、悬停或键盘读数(描边)、加载、失败。下方图例从“少”到“多”。
|
||||
|
||||
## 事件
|
||||
|
||||
返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试;`ValueChanged()` 表示上一年/下一年按钮改变了 `*year`。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab:年份按钮,再到日历。
|
||||
- ←/→:前后一周;↑/↓:前后一天;Home/End:全年第一天与最后一天。
|
||||
- 上一年/下一年按钮:Enter/Space。
|
||||
|
||||
## 限制
|
||||
|
||||
- 方格较小,只作读数目标,不是独立操作,因此不要求 28 DIP 命中区。
|
||||
- 值 ≤ 0 视为无记录。
|
||||
@@ -0,0 +1,50 @@
|
||||
# 109 Histogram 直方图
|
||||
|
||||
## 用途
|
||||
|
||||
分箱计数直方图:箱数或箱宽可配置,可切换为累计模式;分箱只在数据或参数变化时计算一次。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
values := []float64{1, 2, 2, 3, 4, 5, 9, 10}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.Histogram(c, values, mujica.HistogramOptions{Frame: mujica.ChartFrame{Label: "Ages"}, BinWidth: 5})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
`func Histogram(c *ui.Context, values []float64, opts HistogramOptions) ChartResult`;NaN 与无穷值被忽略。
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 |
|
||||
| `Frame.Height` | `float32` | `240` | 绘图区高度(DIP);负数 panic。 |
|
||||
| `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 |
|
||||
| `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 |
|
||||
| `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 |
|
||||
| `Bins` | `int` | Sturges 规则 | 箱数;负数 panic。 |
|
||||
| `BinWidth` | `float64` | 0 | 箱宽;设定时优先于 `Bins`,箱边取箱宽的整数倍。超过 10000 箱 panic。 |
|
||||
| `Cumulative` | `bool` | false | 每箱计入不超过其上界的全部值。 |
|
||||
| `Format` | `func(float64) string` | 按箱宽取精度 | 箱边格式。 |
|
||||
|
||||
## 状态
|
||||
|
||||
默认、悬停读数、键盘读数(焦点环 + 当前点加粗或描边)、加载、失败(可重试)、无数据。图表区始终保持同样尺寸。
|
||||
|
||||
## 事件
|
||||
|
||||
返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab:聚焦绘图区(图例勾选框在其前)。
|
||||
- ←/→(以及 ↑/↓):逐箱移动,读数显示在图表下方并向读屏软件播报;第一次按键进入第一个点。
|
||||
- Home/End:第一个/最后一个点;Escape:清除读数。
|
||||
|
||||
## 限制
|
||||
|
||||
- 按箱数分箱时最后一箱包含上界,读数用 `]` 表示。
|
||||
@@ -0,0 +1,47 @@
|
||||
# 110 BoxPlot 箱线图
|
||||
|
||||
## 用途
|
||||
|
||||
箱线图:四分位箱、中位线、1.5 倍四分距内的须线与离群点,多组对比。统计只在数据变化时计算。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
groups := []mujica.BoxGroup{{Name: "Choir", Values: []float64{1, 2, 3, 4, 5, 40}}, {Name: "Nave", Values: []float64{4, 5, 6, 7}}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.BoxPlot(c, groups, mujica.BoxPlotOptions{Frame: mujica.ChartFrame{Label: "Hymns"}})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
`func BoxPlot(c *ui.Context, groups []BoxGroup, opts BoxPlotOptions) ChartResult`;`BoxGroup{Name, Values}`,名称必填。
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 |
|
||||
| `Frame.Height` | `float32` | `240` | 绘图区高度(DIP);负数 panic。 |
|
||||
| `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 |
|
||||
| `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 |
|
||||
| `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 |
|
||||
| `Format` | `func(float64) string` | 6 位有效数字 | 读数格式。 |
|
||||
|
||||
## 状态
|
||||
|
||||
默认、悬停读数、键盘读数(焦点环 + 当前点加粗或描边)、加载、失败(可重试)、无数据。图表区始终保持同样尺寸。 离群点画为空心圆。
|
||||
|
||||
## 事件
|
||||
|
||||
返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab:聚焦绘图区(图例勾选框在其前)。
|
||||
- ←/→(以及 ↑/↓):按组移动,读数显示在图表下方并向读屏软件播报;第一次按键进入第一个点。
|
||||
- Home/End:第一个/最后一个点;Escape:清除读数。
|
||||
|
||||
## 限制
|
||||
|
||||
- 四分位数用线性插值计算。
|
||||
@@ -0,0 +1,52 @@
|
||||
# 111 WaterfallChart 瀑布图
|
||||
|
||||
## 用途
|
||||
|
||||
瀑布图:增减项累计,小计与总计柱显示累计值;增加为 Success 色并配 ▲,减少为 Danger 色并配 ▼,合计为中性色配 ■,柱端写出带符号的数值。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
steps := []mujica.WaterfallStep{
|
||||
{Label: "Tithes", Value: 12},
|
||||
{Label: "Repairs", Value: -5},
|
||||
{Label: "Year", Kind: mujica.WaterfallTotal},
|
||||
}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.WaterfallChart(c, steps, mujica.WaterfallChartOptions{Frame: mujica.ChartFrame{Label: "Ledger"}})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
`func WaterfallChart(c *ui.Context, steps []WaterfallStep, opts WaterfallChartOptions) ChartResult`;`WaterfallStep{Label, Value, Kind}`。
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 |
|
||||
| `Frame.Height` | `float32` | `240` | 绘图区高度(DIP);负数 panic。 |
|
||||
| `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 |
|
||||
| `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 |
|
||||
| `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 |
|
||||
| `steps[i].Kind` | `WaterfallKind` | `WaterfallDelta` | `WaterfallDelta` 累加;`WaterfallSubtotal`、`WaterfallTotal` 显示当前累计,`Value` 须为 0。 |
|
||||
| `Format` | `func(float64) string` | 6 位有效数字 | 数值格式。 |
|
||||
|
||||
## 状态
|
||||
|
||||
默认、悬停读数、键盘读数(焦点环 + 当前点加粗或描边)、加载、失败(可重试)、无数据。图表区始终保持同样尺寸。
|
||||
|
||||
## 事件
|
||||
|
||||
返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab:聚焦绘图区(图例勾选框在其前)。
|
||||
- ←/→(以及 ↑/↓):逐柱移动,读数显示在图表下方并向读屏软件播报;第一次按键进入第一个点。
|
||||
- Home/End:第一个/最后一个点;Escape:清除读数。
|
||||
|
||||
## 限制
|
||||
|
||||
- 小计与总计都显示到该步为止的累计值,不清零。
|
||||
@@ -0,0 +1,47 @@
|
||||
# 112 FunnelChart 漏斗图
|
||||
|
||||
## 用途
|
||||
|
||||
漏斗图:阶段宽度与值成比例,右侧写出值与相对上一阶段的转化率;读数同时给出相对首阶段的比例。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
stages := []mujica.ChartSlice{{Label: "Visitors", Value: 1000}, {Label: "Novices", Value: 400}, {Label: "Vows", Value: 100}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.FunnelChart(c, stages, mujica.FunnelChartOptions{Frame: mujica.ChartFrame{Label: "Order"}})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
`func FunnelChart(c *ui.Context, stages []ChartSlice, opts FunnelChartOptions) ChartResult`;值须为有限且 ≥ 0。
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 |
|
||||
| `Frame.Height` | `float32` | `240` | 绘图区高度(DIP);负数 panic。 |
|
||||
| `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 |
|
||||
| `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 |
|
||||
| `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 |
|
||||
| `Format` | `func(float64) string` | 6 位有效数字 | 数值格式。 |
|
||||
|
||||
## 状态
|
||||
|
||||
默认、悬停读数、键盘读数(焦点环 + 当前点加粗或描边)、加载、失败(可重试)、无数据。图表区始终保持同样尺寸。 全部为 0 时显示无数据。
|
||||
|
||||
## 事件
|
||||
|
||||
返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab:聚焦绘图区(图例勾选框在其前)。
|
||||
- ←/→(以及 ↑/↓):逐阶段移动,读数显示在图表下方并向读屏软件播报;第一次按键进入第一个点。
|
||||
- Home/End:第一个/最后一个点;Escape:清除读数。
|
||||
|
||||
## 限制
|
||||
|
||||
- 上一阶段为 0 时转化率显示“—”。
|
||||
@@ -0,0 +1,51 @@
|
||||
# 113 BulletChart 子弹图
|
||||
|
||||
## 用途
|
||||
|
||||
子弹图:实际值的细条、目标值的垂直线与定性区间带,可横向或纵向。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
target := 250.0
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.BulletChart(c, 270, mujica.BulletChartOptions{Frame: mujica.ChartFrame{Label: "Alms"}, Target: &target, Bands: []float64{150, 225, 300}})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
`func BulletChart(c *ui.Context, value float64, opts BulletChartOptions) ChartResult`;值须 ≥ 0。
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 |
|
||||
| `Frame.Height` | `float32` | `72` | 绘图区高度(DIP);负数 panic。 |
|
||||
| `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 |
|
||||
| `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 |
|
||||
| `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 |
|
||||
| `Target` | `*float64` | nil | 目标值,画为与刻度垂直的粗线。 |
|
||||
| `Bands` | `[]float64` | nil | 各区间的上界,须为正且递增。 |
|
||||
| `Max` | `float64` | 自动取整 | 刻度终点;0 按值、目标与区间取整。 |
|
||||
| `Vertical` | `bool` | false | 纵向摆放。 |
|
||||
| `Format` | `func(float64) string` | 6 位有效数字 | 数值格式。 |
|
||||
|
||||
## 状态
|
||||
|
||||
默认、悬停读数、键盘读数(焦点环 + 当前点加粗或描边)、加载、失败(可重试)、无数据。图表区始终保持同样尺寸。 区间由浅到深的中性色带表示,读数写出区间范围。
|
||||
|
||||
## 事件
|
||||
|
||||
返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab:聚焦绘图区(图例勾选框在其前)。
|
||||
- ←/→(以及 ↑/↓):依次读实际值、目标值与各区间,读数显示在图表下方并向读屏软件播报;第一次按键进入第一个点。
|
||||
- Home/End:第一个/最后一个点;Escape:清除读数。
|
||||
|
||||
## 限制
|
||||
|
||||
- 超出 `Max` 的值画到刻度终点,读数仍为原值。
|
||||
@@ -0,0 +1,48 @@
|
||||
# 114 Sparkline 迷你图
|
||||
|
||||
## 用途
|
||||
|
||||
行内迷你图:折线、柱形或面积,无坐标轴;末值以菱形标记并在右侧写出数值;聚焦后可逐点读数。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
values := []float64{3, 5, 4, 7, 6, 9}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.Sparkline(c, values, mujica.SparklineOptions{Frame: mujica.ChartFrame{Label: "Bells"}, Kind: mujica.SparklineArea})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
`func Sparkline(c *ui.Context, values []float64, opts SparklineOptions) ChartResult`;NaN 为缺值。
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 |
|
||||
| `Frame.Height` | `float32` | `28` | 迷你图高度(DIP);负数 panic。 |
|
||||
| `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 |
|
||||
| `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 |
|
||||
| `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 |
|
||||
| `Kind` | `SparklineKind` | `SparklineLine` | `SparklineLine`、`SparklineBar` 或 `SparklineArea`。 |
|
||||
| `Width` | `float32` | `96` | 迷你图宽度(DIP)。 |
|
||||
| `Format` | `func(float64) string` | 6 位有效数字 | 右侧数值格式。 |
|
||||
|
||||
## 状态
|
||||
|
||||
默认(显示末值)、悬停或键盘读数(右侧数值变为当前点,点外加圆环)、加载(小型加载标记)、失败(错误文字与重试图标)、无数据。
|
||||
|
||||
## 事件
|
||||
|
||||
返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab:聚焦迷你图。
|
||||
- ←/→:逐点移动;Home/End:首尾;Escape:恢复显示末值。
|
||||
|
||||
## 限制
|
||||
|
||||
- 不显示图例与提示行,以便放在表格行或文字中。
|
||||
@@ -0,0 +1,51 @@
|
||||
# 115 Gauge 仪表盘
|
||||
|
||||
## 用途
|
||||
|
||||
仪表盘:半圆或整圆表盘,按阈值分段着色,指针指向当前值,下方写出数值、单位和所在分段的名称,不只靠颜色表达区间。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
segments := []mujica.GaugeSegment{{To: 60, Label: "Calm", Tone: mujica.GaugeGood}, {To: 100, Label: "Crowded", Tone: mujica.GaugeDanger}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.Gauge(c, 72, mujica.GaugeOptions{Frame: mujica.ChartFrame{Label: "Nave"}, Max: 100, Unit: "%", Segments: segments})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
`func Gauge(c *ui.Context, value float64, opts GaugeOptions) ChartResult`;值须在 `Min`–`Max` 之间。
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 |
|
||||
| `Frame.Height` | `float32` | `200` | 绘图区高度(DIP);负数 panic。 |
|
||||
| `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 |
|
||||
| `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 |
|
||||
| `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 |
|
||||
| `Min`, `Max` | `float64` | 必须 `Min < Max` | 刻度范围。 |
|
||||
| `Segments` | `[]GaugeSegment` | nil | 分段 `{To, Label, Tone}`,上界递增且最后一段止于 `Max`;`Tone` 为 `GaugeNeutral`、`GaugeGood`、`GaugeWarning`、`GaugeDanger`。 |
|
||||
| `Unit` | `string` | 空 | 数值后的单位。 |
|
||||
| `Full` | `bool` | false | 整圆表盘,从底部顺时针一周。 |
|
||||
| `Format` | `func(float64) string` | 6 位有效数字 | 数值格式。 |
|
||||
|
||||
## 状态
|
||||
|
||||
默认、悬停读数、键盘读数(焦点环 + 当前点加粗或描边)、加载、失败(可重试)、无数据。图表区始终保持同样尺寸。 当前分段加宽显示。
|
||||
|
||||
## 事件
|
||||
|
||||
返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab:聚焦绘图区(图例勾选框在其前)。
|
||||
- ←/→(以及 ↑/↓):依次读当前值与各分段,读数显示在图表下方并向读屏软件播报;第一次按键进入第一个点。
|
||||
- Home/End:第一个/最后一个点;Escape:清除读数。
|
||||
|
||||
## 限制
|
||||
|
||||
- 不做指针动画,值变化时直接切换。
|
||||
@@ -0,0 +1,53 @@
|
||||
# 116 Treemap 矩形树图
|
||||
|
||||
## 用途
|
||||
|
||||
层级矩形树图:按大小平铺当前节点的子项(squarify 布局),点击或回车下钻有子项的矩形,返回按钮与面包屑回到上层;标签按面积显示并截断。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
var path []string
|
||||
root := mujica.ChartNode{Name: "Abbey", Children: []mujica.ChartNode{
|
||||
{Name: "Library", Children: []mujica.ChartNode{{Name: "Psalters", Value: 30}, {Name: "Maps", Value: 10}}},
|
||||
{Name: "Kitchen", Value: 25},
|
||||
}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.Treemap(c, &path, root, mujica.TreemapOptions{Frame: mujica.ChartFrame{Label: "Rooms"}})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
`func Treemap(c *ui.Context, path *[]string, root ChartNode, opts TreemapOptions) ChartResult`;`ChartNode{Name, Value, Children}`,叶子的 `Value` 为大小,分支为子项之和;`*path` 是从根的子项起的名称路径。
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 |
|
||||
| `Frame.Height` | `float32` | `240` | 绘图区高度(DIP);负数 panic。 |
|
||||
| `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 |
|
||||
| `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 |
|
||||
| `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 |
|
||||
| `Format` | `func(float64) string` | 6 位有效数字 | 数值格式。 |
|
||||
|
||||
## 状态
|
||||
|
||||
默认、悬停读数、键盘读数(焦点环 + 当前点加粗或描边)、加载、失败(可重试)、无数据。图表区始终保持同样尺寸。 当前矩形内描边。
|
||||
|
||||
## 事件
|
||||
|
||||
返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试;`ValueChanged()` 表示下钻、返回或点击面包屑改变了 `*path`。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab:聚焦绘图区(图例勾选框在其前)。
|
||||
- ←/→(以及 ↑/↓):按大小顺序在矩形间移动,读数显示在图表下方并向读屏软件播报;第一次按键进入第一个点。
|
||||
- Home/End:第一个/最后一个点;Escape:清除读数。
|
||||
- Enter/Space:下钻;Backspace:返回上一层;返回按钮与面包屑可用 Tab 到达。
|
||||
|
||||
## 限制
|
||||
|
||||
- 名称为空、兄弟同名或值为负时 panic;`*path` 指向不存在的节点时 panic。
|
||||
- 只显示当前节点的一层子项。
|
||||
@@ -0,0 +1,53 @@
|
||||
# 117 Sunburst 旭日图
|
||||
|
||||
## 用途
|
||||
|
||||
层级环形图:中心是当前节点及总计,外圈依次是各层后代;点击或回车下钻,路径面包屑与返回按钮回到上层。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
var path []string
|
||||
root := mujica.ChartNode{Name: "Abbey", Children: []mujica.ChartNode{
|
||||
{Name: "Library", Children: []mujica.ChartNode{{Name: "Psalters", Value: 30}, {Name: "Maps", Value: 10}}},
|
||||
{Name: "Kitchen", Value: 25},
|
||||
}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.Sunburst(c, &path, root, mujica.SunburstOptions{Frame: mujica.ChartFrame{Label: "Rooms"}})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
`func Sunburst(c *ui.Context, path *[]string, root ChartNode, opts SunburstOptions) ChartResult`;数据结构同 Treemap。
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 |
|
||||
| `Frame.Height` | `float32` | `240` | 绘图区高度(DIP);负数 panic。 |
|
||||
| `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 |
|
||||
| `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 |
|
||||
| `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 |
|
||||
| `Depth` | `int` | `3` | 显示的层数;负数 panic。 |
|
||||
| `Format` | `func(float64) string` | 6 位有效数字 | 数值格式。 |
|
||||
|
||||
## 状态
|
||||
|
||||
默认、悬停读数、键盘读数(焦点环 + 当前点加粗或描边)、加载、失败(可重试)、无数据。图表区始终保持同样尺寸。 外层颜色向表面色淡化,但保持 3:1 对比。
|
||||
|
||||
## 事件
|
||||
|
||||
返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试;`ValueChanged()` 表示 `*path` 改变。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab:聚焦绘图区(图例勾选框在其前)。
|
||||
- ←/→(以及 ↑/↓):按深度优先顺序在扇区间移动,读数显示在图表下方并向读屏软件播报;第一次按键进入第一个点。
|
||||
- Home/End:第一个/最后一个点;Escape:清除读数。
|
||||
- Enter/Space:下钻到当前扇区;Backspace:返回上一层。
|
||||
|
||||
## 限制
|
||||
|
||||
- 弧长不足时不写标签,名称在读数中完整给出。
|
||||
@@ -0,0 +1,49 @@
|
||||
# 118 SankeyChart 桑基图
|
||||
|
||||
## 用途
|
||||
|
||||
桑基图:节点按最长路径分列,列内顺序与传入顺序一致(稳定);流量带宽度与值成比例;悬停或键盘读到节点或流量时,高亮经过它的全部路径。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
nodes := []mujica.SankeyNode{{ID: "tithe", Label: "Tithes"}, {ID: "fund", Label: "Fund"}, {ID: "roof", Label: "Roof"}}
|
||||
links := []mujica.SankeyLink{{From: "tithe", To: "fund", Value: 60}, {From: "fund", To: "roof", Value: 50}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.SankeyChart(c, nodes, links, mujica.SankeyChartOptions{Frame: mujica.ChartFrame{Label: "Money"}})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
`func SankeyChart(c *ui.Context, nodes []SankeyNode, links []SankeyLink, opts SankeyChartOptions) ChartResult`;`SankeyNode{ID, Label}`,`SankeyLink{From, To, Value}`。
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 |
|
||||
| `Frame.Height` | `float32` | `240` | 绘图区高度(DIP);负数 panic。 |
|
||||
| `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 |
|
||||
| `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 |
|
||||
| `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 |
|
||||
| `Format` | `func(float64) string` | 6 位有效数字 | 数值格式。 |
|
||||
|
||||
## 状态
|
||||
|
||||
默认、悬停读数、键盘读数(焦点环 + 当前点加粗或描边)、加载、失败(可重试)、无数据。图表区始终保持同样尺寸。 高亮时其余流量淡化。
|
||||
|
||||
## 事件
|
||||
|
||||
返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab:聚焦绘图区(图例勾选框在其前)。
|
||||
- ←/→(以及 ↑/↓):先按节点、再按流量移动,读数显示在图表下方并向读屏软件播报;第一次按键进入第一个点。
|
||||
- Home/End:第一个/最后一个点;Escape:清除读数。
|
||||
|
||||
## 限制
|
||||
|
||||
- 链接成环、端点未知或值不为正时 panic。
|
||||
- 布局只在节点或链接切片变化时计算。
|
||||
@@ -0,0 +1,51 @@
|
||||
# 119 NetworkGraph 网络图
|
||||
|
||||
## 用途
|
||||
|
||||
网络图:节点与边,使用调用方给定的坐标或简单的力导布局;拖动节点、拖动空白处平移、滚轮或 +/- 缩放。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
var state mujica.NetworkGraphState
|
||||
nodes := []mujica.GraphNode{{ID: "a", Label: "Abbot"}, {ID: "b", Label: "Prior"}, {ID: "c", Label: "Novice"}}
|
||||
edges := []mujica.GraphEdge{{From: "a", To: "b"}, {From: "b", To: "c"}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.NetworkGraph(c, &state, nodes, edges, mujica.NetworkGraphOptions{Frame: mujica.ChartFrame{Label: "House"}, Force: true})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
`func NetworkGraph(c *ui.Context, s *NetworkGraphState, nodes []GraphNode, edges []GraphEdge, opts NetworkGraphOptions) ChartResult`;`GraphNode{ID, Label, X, Y}`,`GraphEdge{From, To}`。`NetworkGraphState` 保存拖动后的位置与视图:`Position(id)`、`Zoom()`、`ResetView()`。
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| `Frame.Label` | `string` | 必填 | 图表的无障碍名称;为空 panic。 |
|
||||
| `Frame.Height` | `float32` | `240` | 绘图区高度(DIP);负数 panic。 |
|
||||
| `Frame.Status` | `DataStatus` | `DataReady` | `DataLoading` 显示加载标记,`DataFailed` 显示错误与“重试”;占位与图表同尺寸。 |
|
||||
| `Frame.Error` | `string` | 内置“加载失败” | 失败时的具体说明。 |
|
||||
| `Frame.Empty` | `string` | 内置“暂无数据” | 无数据时的说明。 |
|
||||
| `Force` | `bool` | false | 用力导模拟布局(固定 300 步,结果确定);最多 500 个节点。 |
|
||||
|
||||
## 状态
|
||||
|
||||
默认、悬停读数、键盘读数(焦点环 + 当前点加粗或描边)、加载、失败(可重试)、无数据。图表区始终保持同样尺寸。 当前节点外加圆环,相连的边加粗。
|
||||
|
||||
## 事件
|
||||
|
||||
返回 `ChartResult`:`Point` 为当前读数点(无则 -1);`Changed()` 读数点变化;`Retried()` 点击了重试。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab:聚焦绘图区(图例勾选框在其前)。
|
||||
- ←/→(以及 ↑/↓):在节点间移动,读数显示在图表下方并向读屏软件播报;第一次按键进入第一个点。
|
||||
- Home/End:第一个/最后一个点;Escape:清除读数。
|
||||
- Shift+方向键:移动当前节点;+/-:缩放;0:复位视图。
|
||||
|
||||
## 限制
|
||||
|
||||
- 布局只在节点或边的切片变化时重新计算,拖动不会重新适配视图。
|
||||
- 不支持边标签与有向箭头。
|
||||
@@ -0,0 +1,53 @@
|
||||
# 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` 回到界面线程追加并刷新。
|
||||
- 缓冲区按块丢弃旧样本,最多占用两倍容量。
|
||||
Reference in new issue
Block a user