ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

d3 symlog 对称对数比例尺完整指南:d3.scaleSymlog 处理含零宽范围数据

d3 symlog 对称对数比例尺完整指南:d3.scaleSymlog 处理含零宽范围数据 d3 symlog 对称对数比例尺完整指南d3.scaleSymlog 处理含零宽范围数据【免费下载链接】d3Bring data to life with SVG, Canvas and HTML. :bar_chart::chart_with_upwards_trend::tada:项目地址: https://gitcode.com/GitHub_Trending/d3/d3在 d3Data-Driven Documents仓库当前版本为 7.9.0的量化比例尺体系中symlog 比例尺用于解决一个经典难题当数据值跨越多个数量级、且包含零或正负混合时log 比例尺会因log(0) -∞而失效。本文围绕官方文档 Symlog scales 展开完整覆盖d3.scaleSymlog的构造规则、constant常数的作用与用法并结合 d3 的连续比例尺模型补充底层原理与实战细节读完后可独立使用 symlog 比例尺完成位置、颜色等视觉编码。什么是 symlog面向宽范围数据的双对称对数变换symlogsymmetric logarithmic对称对数比例尺源自 Webber 提出的A bi-symmetric log transformation for wide-range data双对称对数变换研究其目标是把宽范围wide-range数据压缩到适合线性显示的区间同时保持对称性对正数和负数采用镜像的对数压缩。与 log 比例尺 最关键的区别是symlog 比例尺的 domain 可以包含零。在 log 比例尺文档 中有明确警告——log 比例尺的 domain 必须严格为正或严格为负不能包含或跨越零而 symlog 变换在零点平滑|x|很小时近似线性变换在零点附近斜率有限因此可以直接对包含 0 的区间如[0, 100]做编码这也是它与 pow 比例尺、log 比例尺并列作为宽范围量化数据方案的核心理由见 d3-scale 总览。从源码结构看symlog 比例尺的内部流程与 log 比例尺一致先对输入 domain 值施加对称对数变换把宽范围数据压缩再执行与 线性比例尺 相同的平移加缩放的线性映射把变换后的值映射到 range。这一推断的依据是 log 比例尺文档 对同类结构的描述a logarithmic transform is applied to the input domain value before the output range value is computed而 symlog 文档中同样以 domain、range、interpolator 等与线性比例尺相同的术语描述其构造参数。d3.scaleSymlog(domain,range)构造一个对称对数比例尺调用d3.scaleSymlog会构造一个新的连续比例尺continuous scale其初始状态为指定的 domain 与 rangeconstant 为1symlog 常数下文详述使用 d3-interpolate 的默认 interpolatorclamping钳制处于禁用状态。官方示例来自 Symlog scalesconst x d3.scaleSymlog([0, 100], [0, 960]);注意 domain 是[0, 100]——这里直接包含了零这正是 symlog 相对 log 比例尺的典型用法。参数缺省规则与 scaleLinear 等连续比例尺保持一致若只传一个参数该参数被解释为range若domain或range未指定各自默认为[0, 1]。例如只用 range 构造、domain 回退为[0, 1]的场景const color d3.scaleSymlog([red, blue]) // default domain of [0, 1]由于连续比例尺统一由 d3-scale 的 continuous 基类提供映射能力symlog 比例尺继承了一整套与线性比例尺同名的方法其中最常用的包括方法说明文档位置symlog(value)给定 domain 值返回 range 中的对应值未开启 clamping 时超出 domain 的值会按变换外推linear.mdsymlog.invert(value)反向映射仅 range 为数值时可用颜色 range 返回 NaN对称对数变换可逆因此位置类编码可以反解鼠标位置对应的数据值linear.mdsymlog.domain(domain) / .range(range)设置/读取 domain 与 rangelinear.mdsymlog.interpolate(interpolate)设置输出 interpolator默认使用 d3-interpolate 的 interpolatelinear.mdsymlog.clamp(clamp)启用/禁用钳制把超出 domain 的输入限制在 domain 端点上linear.mdsymlog.ticks(count) / .tickFormat(count,specifier)生成刻度值与人类可读的刻度标签配合 d3-axis 绘制坐标轴linear.mdsymlog.nice()把 domain 扩展到更整齐的数值linear.mdsymlog.copy()深拷贝当前比例尺含 constantlinear.md继承自 continuous 比例尺的映射还满足双向一致性对于 range 中的有效值ysymlog(symlog.invert(y))约等于y对 domain 中的有效值xsymlog.invert(symlog(x))约等于x受浮点精度限制可能不完全精确见 linear.md 的说明。symlog.constant(constant)控制对称对数变换的拐点constant是 symlog 比例尺独有的配置项const x d3.scaleSymlog([0, 100], [0, 960]).constant(2);若传入constant把该比例尺的 symlog 常数设置为指定数值并返回比例尺本身可链式调用默认值为 1若未传参返回当前 symlog 常数值x.constant() // 2symlog 常数的作用在于调节对称对数变换的形态常数决定了近似线性段与对数压缩段之间的过渡位置。常数越大变换在越宽的值域内接近线性、对数压缩开始得越晚常数越小压缩越早发生。由于 symlog 比例尺本质上是对变换后的值做线性映射改变 constant 会重新计算变换与反变换实现位于 d3-scale 包的symlog.js官方文档中的 Source 指向该文件因此设置constant等价于更换比例尺的变换核而不影响已设置的 domain/range。实战建议constant 的取值应与数据相对其零点的尺度匹配。若数据大多集中在零点附近、只有少数极端值需要被压缩取较小的 constant接近或小于数据的典型量级若数据整体远离零点只希望在极大值处放缓则取较大的 constant。调整后可用scale.ticks()与scale(x)抽查若干关键数据点确认压缩效果符合预期。symlog 与其他宽范围比例尺的选型对照结合 d3-scale 总览、log 比例尺 与 pow 比例尺 的文档三者都面向宽范围量化数据差异在于对 domain 的约束比例尺domain 约束变换独有参数log必须严格为正或严格为负不能含零或跨零对数变换y m·log(x) bbase默认 10只影响 ticks 选择不影响编码symlog可以包含零、可正负混合对称对数变换双对称零点平滑constant默认 1pow通常要求 domain 同号避免 0 到负数的分数次幂无定义幂变换exponent选型上的直接结论数据含零或跨零、且动态范围大时优先 symlog数据严格为正、希望按数量级均匀分布刻度时log 更直接其 ticks/tickFormat 会按数量级生成 1、2、…、10、20… 这类刻度而 symlog 沿用 continuous 基类的默认刻度逻辑。相关变体scaleSequentialSymlog 与 scaleDivergingSymlogsymlog 变换不仅用于位置编码也可用于颜色编码。d3 提供了两种带对称对数变换的变体d3.scaleSequentialSymlog返回带 symlog 变换的 sequential 比例尺把连续的量化 domain 映射到一个颜色插值器文档描述其为 analogous to a symlog scale适合单色相渐变的宽范围可含零数据着色d3.scaleDivergingSymlog返回带 symlog 变换的 diverging 比例尺range 固定为三个元素适合以零为中心的对称数据如偏差、残差做红-白-蓝式双色编码。这两个变体与d3.scaleSymlog的差异在于输出侧位置类 symlog 比例尺输出数值 range可invert、可接 d3-axis 出轴sequential/diverging 变体输出连续颜色插值器不暴露 invert 与 interpolate见 sequential.md 与 diverging.md 的说明。在 d3 仓库中的位置与验证方式本仓库是 d3 的聚合入口package.json 声明version: 7.9.0并通过依赖d3-scale: ^4.0.2引入比例尺模块src/index.js 中的export * from d3-scale使d3.scaleSymlog、d3.scaleSequentialSymlog等 API 直接挂在全局d3命名空间下完整 API 清单可在 docs/api.md 的 Symlog scales 一节查到d3.scaleSymlogcreate a symmetric logarithmic scale与*symlog*.constantset the constant of a symlog scale两条条目文档链接的完整性由 test/docs-test.js 守护它爬取docs目录下所有 Markdown 的相对链接与锚点并断言无断链因此本文引用的各docs/d3-scale/*.md锚点如#symlog_constant、#scaleSymlog在仓库 CI 中是可验证的。小结d3.scaleSymlog([0, 100], [0, 960])是处理含零宽范围数据的最短路径domain 允许包含 0正负对称压缩单参数构造时参数被解释为 range未指定的 domain/range 各默认[0, 1]constant默认 1是调节线性段与对数段过渡位置的唯一专属旋钮可读可写、可链式调用它继承 continuous 比例尺的 domain/range/invert/interpolate/clamp/ticks/tickFormat/nice/copy 全套能力可与 d3-axis、d3-brush 交互配合颜色编码场景请改用d3.scaleSequentialSymlog/d3.scaleDivergingSymlog变体。【免费下载链接】d3Bring data to life with SVG, Canvas and HTML. :bar_chart::chart_with_upwards_trend::tada:项目地址: https://gitcode.com/GitHub_Trending/d3/d3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表