【免费下载链接】clip
Create charts from the command line
size-map(测量映射)是 clip 命令行图表工具中用于把输入数据值映射为排版尺寸单位的核心机制。当你想创建"点的大小随某个数据列变化"的散点图、气泡图或向量场图时,通过<measure-map>构造即可把数值数据线性投影到如 pt、em、px 等排版单位区间上。阅读完本文,你将掌握linear映射的语法、语义与单位规则,并能结合points/vectors命令的size-map选项直接写出可运行的图表脚本。
为什么需要把数据映射为排版单位
在绘制图表时,"尺寸"是一类视觉编码通道:散点图中更大的圆点可以表示更大的数值,向量场中更粗的箭头可以表示更强的量级。clip 的尺寸属性(如size)本质上是排版度量(measure),接受带单位的量,例如2pt、1.4em、8px。
问题在于:输入数据是纯数值,与排版单位处于不同的"坐标系"。比如测试数据 gauss3d.csv 的z列取值范围是0.0到1.0之间的密度值,而图表要求的点大小可能是2pt到6pt。直接把这些数值当作尺寸写入图表显然不合理,需要一种显式的数值 → 排版单位映射机制,这就是<measure-map>构造。
measure-map 构造与 linear 映射
<measure-map>是一个 clip 表达式构造,其语法由源码 typographic_reader.cc 中的measure_map_read解析:它接收一个列表表达式,并根据列表首项分发到具体的映射实现。目前支持的映射如下:
;; map a value in the range [0..1] linearly to min..max (linear <min> <max>)linear是当前唯一内置的映射类型,其语义为:把输入区间[0..1]内的数值,线性插值到min..max指定的排版尺寸区间。这与文档 size-map.md 中的定义一致。
linear 的底层实现
measure_map_linear定义在 typographic_map.cc,核心逻辑非常简洁:
- 将输入字符串解析为数值,并通过
std::clamp(value, 0.0, 1.0)强制截断到[0, 1]区间——即输入值小于 0 按 0 处理,大于 1 按 1 处理; - 按
min + (max - min) * value线性插值; - 结果通过
from_unit转换为带单位的排版度量对象。
如果输入无法解析为数值(例如传入了非数字字符串),会返回错误"invalid data; can't map '...' to a typographic unit"。
解析侧 measure_map_read_linear 还做了参数校验:linear恰好需要两个参数,多传或少传都会报错。同时两个参数都会经过measure_readn解析并被当前图层的 DPI 与字号上下文归一化,确保pt、em、px等单位能换算到统一基准。
单位支持
<min>与<max>必须使用 clip 支持的排版单位。根据 units.cc,可用的单位包括:
| 单位 | 含义 | 说明 |
|---|---|---|
pt | 磅(point) | 默认点大小基准单位,源码points.cc的默认点尺寸即4pt |
em | 相对字号 | 相对当前图层字体大小的倍数 |
rem | 相对根字号 | 相对全局根字体大小 |
px | 像素 | 直接对应输出分辨率下的像素 |
mm | 毫米 | 物理长度单位,按 DPI 换算 |
例如(linear 12pt 20pt)表示:输入 0 映射为 12pt,输入 1 映射为 20pt,输入 0.5 则映射为 16pt。
在图表中启用 size-map
size-map不是一个独立的命令,而是作为points和vectors两个绘图命令的选项存在,用于控制sizes数据集到排版单位的映射。
- 在 points.cc 中,
size-map选项通过measure_map_read绑定到MeasureMap; - 在 vectors.cc 中,
vectors命令同样支持size-map,用于按数据控制箭头大小。
关于该选项的官方描述,可参考 points.yaml:"Controls how input data insizesis mapped to typographic units.",即控制sizes中的输入数据如何映射为排版单位。
无 size-map 时的行为
如果不指定size-map,sizes中的每个值会被直接当作排版度量解析(points.cc 中走parse_measure分支),此时你必须自己保证数据列是合法的尺寸字符串(如"2pt"、"1.4em")。只有提供了size-map,纯数值数据列才能被正确解释——这正是上面提到的"坐标系"问题的正式解决方案。
完整可运行示例
仓库测试用例 points_size_map.clp 是一个可直接运行的完整示例,展示了size-map的典型用法:
size: 1024px 512px; dpi: 96; points { >points { >赞【免费下载链接】clip
Create charts from the command line
相关推荐
SAM 图像分割快速上手指南:点一个点就能得到对象掩码
SAM 图像分割快速上手指南:点一个点就能得到对象掩码 Segment Anything 模型(SAM)是 Meta AI 发布的图像分割基础模型:在图像上点一
人工智能计算机视觉基础模型DZNEmptyDataSet与数据映射:映射关系为空时的设计
DZNEmptyDataSet与数据映射:映射关系为空时的设计 你是否曾为应用中的空白屏幕感到困扰?当用户首次使用应用或数据加载失败时,一片空白的界面不仅会让用
UI组件G6 MapNodeSize 数据处理:基于节点中心性动态映射节点大小的完整实践指南
G6 MapNodeSize 数据处理:基于节点中心性动态映射节点大小的完整实践指南 在 G6 图可视化中,节点的大小通常是传达节点重要性或影响力的最直观视觉通
数据可视化前端图表库