# 折线图

> 折线图组件的参考：它的系列、坐标轴和上下排列的绘图区、窗口与保留量、绘制保真度，以及工具栏。

**折线图**按时间跟踪点位：每个系列读一个 Logic 地址，按这张图自己的节拍采样进工作站的实时序列采集器，所以图表一打开就是一个装满的窗口，而不是一根空坐标轴。[Process](process) 和[历史](histories)里一次运行的记录图表用的是同一套画法；仪表画面多出来的只是配置从哪里来，也就是这个组件自己的属性。

## 内容 {#content}

| 属性 | 作用 | 取值 | 默认 |
|---|---|---|---|
| 图表标题 | 画在绘图区里面的可选抬头。这是图表自己的抬头，不是组件的角上标题（那一个在共用的外观分区里）。 | 文本 | 空 |

## 系列 {#series}

每个系列一张卡片，按声明的顺序排列。**添加系列**在末尾追加一个；每张卡片带着：

| 属性 | 作用 | 取值 | 默认 |
|---|---|---|---|
| 地址 | 这个系列所读的带根 Logic 地址。字段从实时点位清单里给建议，过滤为数值点位，指名之后显示该点位当前的读数。 | 地址 | 空 |
| 名称 | 图例和数据提示怎么称呼这个系列。 | 文本 | 留空则退回到地址 |
| 颜色 | 这条线的墨色，写成 `#RRGGBB`。 | 十六进制颜色 | 留空则按调色板轮到的颜色 |
| 小数位 | 光标下这个系列的读数写几位小数。逐个系列填写，因为同一张图上的各条通道并不按同样的精度来读：两位小数的压力，旁边可能就是一个没有小数的计数。 | 0 到 15 | 留空则用工作站的偏好 |
| 跨过空缺连成一条线 | 这个系列没读到的地方，线怎么办。关掉时线在空洞处断开，那是诚实的画面，因为工作站对那一段确实什么都没有。打开时线直接连过去，一个只是在两次写入之间保持不变的设定值，正是这么读的。 | 开 / 关 | 关 |
| 绘图区 | 这个系列画在图表的哪一个绘图区里。只有当这张图在自己的绘图区下面还有别的绘图区时才问。 | 绘图区 1（图表自己的） · 绘图区 2 到绘图区 4（上下排列的绘图区） | 绘图区 1 |
| 所在坐标轴 | 这个系列对着哪一条数值轴换算：第一条还是第二条。只在图表自己的绘图区里、并且存在第二条轴时才问；位于上下排列绘图区里的系列，用的是那个绘图区唯一的那条轴。 | 第一条 · 第二条 | 第一条 |
| 画出这个系列 | 这个系列到底上不上画布。它会被保存下来，所以被排除在画面之外的一条通道，下次打开画面时仍然在外面；工具栏里显示和隐藏的手势是为了看，这一项是为了写定。 | 开 / 关 | 开 |

## 图表 {#chart}

| 属性 | 作用 | 取值 | 默认 |
|---|---|---|---|
| 形状 | 每个系列在坐标轴上取什么形状：连续的测量是折线，它下面累计的总量是面积，写一次就保持到下一次写入的值是阶梯，按区间计的数量是按时间排的柱形。 | 折线 · 面积 · 阶梯 · 按时间排列的柱形 | 折线 |
| 图例 | 图例摆在哪里。 | 绘图区上方 · 绘图区下方 · 无 | 绘图区上方 |
| 导航 | 操作员可以把时间轴走多远：一个什么也动不了的固定窗口，在绘图区上滚轮加拖动，或者滚轮加拖动再加一条画在绘图区下面、标出窗口位置的导航条。 | 固定窗口 · 滚轮加拖动 · 滚轮加导航条 | 滚轮加拖动 |

## 坐标轴 {#axes}

每条坐标轴都是一张卡片：一个名称、一个单位（附在名称后面的方括号里）、一个刻度数，数值轴还有固定住的两端和一个所在边。

**时间轴**

| 属性 | 作用 | 取值 | 默认 |
|---|---|---|---|
| 计入 | 这条轴怎么呈现采样点的位置：相对窗口边缘的已过时间、挂钟时间戳（按工作站的语言与格式设置书写），或者朴素的采样序号。 | 自窗口打开起的时间 · 时钟 · 采样点序号 | 自窗口打开起的时间 |
| 名称 / 单位 | 这条轴的名称和单位。 | 文本 | 空 |
| 刻度数 | 向这条轴要多少个分格。写下的数字是一个提示，绘图引擎在整数刻度允许的范围内尽量照办，并不承诺一定是那么多刻度。 | 2 到 20 | 空（自动） |

**数值轴**（以及可选的**第二数值轴**，供刻度与第一条毫不相干的系列使用；没有第二条时，每个系列共用仅有的那一条刻度）

| 属性 | 作用 | 取值 | 默认 |
|---|---|---|---|
| 名称 / 单位 / 刻度数 | 和时间轴上的一样。 | | |
| 最小 / 最大 | 刻度被固定住的两端。放任不管的话，数值轴每来一个采样点就重新调整一次，于是最高的那条线总是贴在窗口的上方，什么也没法和一分钟以前比；固定住一端就把它停下来。两端各自独立：只固定下端，就守住了零线，同时上端还能呼吸。 | 数值 | 空（自动） |
| 画在 | 这把尺子立在绘图区的哪一边。 | 左侧 · 右侧 | 左侧 |

**绘图区旁边的位置。** 既没有名称也没有单位的数值轴，无论图表多宽，都只在数字旁边留一道窄边；有名称或单位的数值轴，留出转过来的名称所需的位置。画在同一边上的第二数值轴，立在第一数值轴的数字和名称外侧。当图表画得比它的数值轴和一块看得清的绘图区合起来所需的宽度还窄时，第二数值轴就不再写它的数字：它的系列仍按自己的刻度画，读数仍留在数据提示里。把图表拉宽，数字就会回来。

## 上下排列的绘图区 {#stacked-plots}

同一时刻读到的两个量，不一定非得共用一把尺子：排在图表自己那个绘图区下面的绘图区，有自己的刻度和同一条时间轴，于是温度和流量是一个在上一个在下地读，而不是硬挤在彼此的尺子上。一张图最多**四个绘图区高**：它自己的，加上底下最多三个；每个上下排列绘图区的卡片带着自己那条轴（名称、单位、刻度数、固定住的两端、所在边），另外还有：

| 属性 | 作用 | 取值 | 默认 |
|---|---|---|---|
| 高度 | 这个绘图区相对图表自己那个绘图区画多高，后者是 1。 | 0.25 到 4 | 1 |

一个系列落在哪个绘图区上，由它自己那张卡片说明。

## 判定 {#evaluation}

| 属性 | 作用 | 取值 | 默认 |
|---|---|---|---|
| 画出正在进行的运行记录的合格范围 | 在各系列后面画出这个单元此刻正在执行的那次运行的合格色带。限值来自这个单元所运行的那个流程的判定，跟着某条参考通道走的限值会随它移动。它不另外指名任何单元：单元就是各系列已经读到的那一个，在一个模型的画面上，单元是在某个单元打开这幅画面时到来的，而没有读到单元的画面也就没有运行记录可跟。 | 开 / 关 | 关 |

画面上的图表就是这样跟住一个正在运行的流程的；历史里一次已记录运行的图表，本来就带着它自己那次运行的色带。

色带带着它那条判据的名称，写在色带里第一个没有任何曲线穿过的角上，从右上角开始。如果每个角和两端的中间都有曲线穿过，色带就不带名称地画出来。

## 历史 {#history}

两个不同的旋钮：窗口是图表框住的那一段，保留量是工作站在它背后存下的东西。一张图可以保留十分钟而只框住最后一分钟，于是往回导航走的是存下来的东西，而不是撞上一根空坐标轴。采样点存在内存里；重启应用，采集就重新开始。

| 属性 | 作用 | 取值 | 默认 |
|---|---|---|---|
| 显示 | 窗口打开时对着什么：一个跟着最新采样点走的滚动窗口，或者工作站为这张图存下的全部，不管那能回溯到多久以前。 | 滚动窗口 · 保留下来的全部 | 滚动窗口 |
| 窗口（s） | 滚动的窗口显示多长一段。只有窗口在滚动时才问。 | 5 到 86,400（1 天） | 60 |
| 采样间隔（ms） | 这张图自己的采样节奏。改动它会从此刻起开一个新缓冲区，因为节拍是一个已采集系列身份的一部分。 | 100（逻辑扫描周期）到 3,600,000（1 小时） | 500 |
| 保留 | 保留量的那些数字表示什么。 | 只保留窗口内的 · 一段时间 · 一定数量的采样点 | 只保留窗口内的 |
| 保留时长（s） | 保留量按一段时间计时，每个系列所保留的那段时长。 | 5 到 604,800（7 天） | 600 |
| 保留数量（采样点） | 保留量按采样点数量计时，每个系列所保留的个数。 | 2 到 20,000 | 2,000 |

工作站在三个上限之内批准保留量：每个点位 20,000 个采样点，每个组件 60,000 个，整个工作站 200,000 个。某个上限没能整份批准的保留量，会写在图表下面，而不只是写在编辑器里。工作站自己的上限已经用完时，新的系列根本不采集任何数据，并且把这件事说出来：“工作站已经用满了它允许保留的历史，因此这个系列什么也采集不到。请缩短另一张图的保留量来腾出空间。”。

## 保真与性能 {#fidelity-and-performance}

有多少数据到得了画布，这是图表最有后果的一项设置。把每一个采样点都画出来，会随着通道和窗口变大而卡顿；而降采样却不说出来，更糟。降采样发生**在绘制的时候，绝不发生在所存下的东西里**，而且是**自适应**的：图表数一数可见范围里有多少个点，低于阈值时降采样就消失，因此放大之后看到的总是真实数据。

一档**预设**一次填满每一个字段；只要动了其中任何一个字段，这套组合自己就变成自定义，因为除了这些数值之外什么也没存。

| 预设 | 它写下什么 |
|---|---|
| 最高保真 | 阈值 100,000（超过任何画布能分辨的程度，也就是从不降采样），保留峰值，1,000 个点以内画数据标记，画窗口之外的部分，不用动画，在角上标明档位。 |
| 均衡 | 图表出生时的那组数值（见下）。 |
| 最高性能 | 阈值 400，每个区间取平均，不画数据标记，窗口之外一概不画，不用动画，不标档位。 |
| 自定义 | 它不是一个可选项：当各字段与任何一档已命名的组合都不符时，显示的就是这个。 |

| 属性 | 作用 | 取值 | 默认 |
|---|---|---|---|
| 全部画出的上限 | 可见范围里的点数在多少以下时关闭降采样。它数的是整幅画面，也就是画出来的所有系列加在一起。 | 100 到 100,000 | 2,000 |
| 超过之后保留 | 超过阈值之后跑哪一种降采样，按它保留什么来命名：每个区间的最小值*和*最大值（只持续了一个采样点的尖峰也丢不掉）、能保住曲线轮廓的那个点，或者每个区间的平均值，也就是最省的那一种，同时也是会把尖峰抹平的那一种。 | 保留峰值 · 保留形状 · 平均值 | 保留峰值 |
| 逐点画标记的上限 | 可见的点当中，最多有多少个还能各自带一个标记；填 0 就从不画。只有降采样关掉的时候，一个标记才说明得了什么。 | 0 到 5,000 | 200 |
| 把落在时间窗口之外的部分也画出来 | 可见范围之外的东西到底画不画（画得粗，一旦被框进来它又变回真实数据）。 | 开 / 关 | 开 |
| 绘制时使用动画 | 绘制过程要不要动画。默认关掉，因为会滑动的实时数据更难读。 | 开 / 关 | 关 |
| 在角上标明这张图处于哪一档 | 角上一个不显眼的标记，说明屏幕显示的是测量本身，还是它的一次降采样。在操作画面上它是杂音，在分析画面上它必不可少。 | 开 / 关 | 关 |

字段下面有一行估算，说明当前这套配置的代价，边键入边更新。

## 工具栏 {#toolbox}

**工具栏**分区挑选操作员在这张图上能用到哪些按钮，于是在一块不许操作员移动刻度的操作画面上，就不会再挂着一条分析画面的工具栏。一个都不勾选时，根本不画工具栏。

| 工具 | 作用 | 是否在默认集合里 |
|---|---|---|
| 框选一块区域放大 | 在绘图区上启用框选放大。 | 是 |
| 还原缩放 | 把窗口退回到所绘制的全部。 | 是 |
| 手动设定坐标范围 | 手动钉住时间段和数值范围，或者把其中任何一个交还给自动调整。只要还钉着任何一项，按钮就一直亮着。被钉住的窗口里没有采样点时，会在图形下面说明这一点，而不是读起来像一张停掉的图。 | 否 |
| 所显示窗口的最小值、平均值和最大值 | 打开一块面板，写出所显示窗口里每个系列的最低值、平均值和最高值。只在这块面板打开期间测量。 | 否 |
| 画一条参考线 | 在某个数值上或者某个时刻上画一条线。这些线只活到画面关闭为止，什么也不保存，只要还画着任何一条线，按钮就一直亮着。 | 否 |
| 保存 PNG | 把图形下载成一个 PNG。 | 是 |
| 复制 PNG | 把图形以 PNG 放到剪贴板上。 | 是 |
| 显示或隐藏系列 | 不用编辑画面就显示或隐藏某个系列。 | 是 |
| 打开或关闭数据提示 | 切换悬停时的数据提示。 | 是 |
| 全屏 | 让这张图铺满整个窗口。 | 是 |

**导航**设为“固定窗口”时，这个分区会把“框选一块区域放大”和“还原缩放”从列表里拿掉，工具栏也不画这两个按钮：固定窗口上没有什么可以走动，这两个按钮什么也回答不了。它们的勾选状态会保留下来，所以让窗口重新可以移动，这两个按钮也就回来了。

## 在一个模型的画面上 {#on-a-models-screen}

在基于 Process 模型定义的画面上，系列的地址字段把模型的抽象通道排在最前面：选中一条，绑定的就是这条通道，至于是哪个单元，留到某个单元打开这幅画面时再回答。工作站自己的点位仍旧排在它们后面，因为一个模型的画面读一个工作站点位是完全正当的。
