☰
clip 数据驱动尺寸映射指南:使用 measure-map 的 linear 映射为散点图点大小绑定输入数据
2026/10/6 2:39:25 网站建设 项目流程

【免费下载链接】clip

Create charts from the command line

项目地址:https://gitcode.com/gh_mirrors/cli/clip
点击查看免费下载

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

项目地址:https://gitcode.com/gh_mirrors/cli/clip
点击查看免费下载

相关推荐

上一篇:Kilo 核心工具架构解析:Tool 表示、Location 注册与结算机制深度指南
下一篇:Dashy 发布工作流与 CI/CD 自动化全解:版本管理、GitHub Actions 与 Git 协作规范

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询