生成“美观”的数字,用于在一定范围内标记刻度,例如图表上的 y 轴。
改编自 Andrew S. Glassner (1995) 在Graphics Gems, Volume 1 中的伪代码。另请参阅 Tufte 的The Visual Display of Quantitative Information(2001 年版第 149 页),了解有关此主题的讨论。
作为一个开源 Swift 库提供,可集成到其他应用程序中。
SwiftNiceScale 是 OpenAlloc 开源 Swift 软件工具家族的一部分。
let ns = NiceScale(105...543, desiredTicks: 5)!
print("nice range=\(ns.range)")
=> "nice range=100.0...600.0"
print("tick interval=\(ns.tickInterval)")
=> "tick interval=100.0"
print("labels=\(ns.tickValues)")
=> "labels=[100.0, 200.0, 300.0, 400.0, 500.0, 600.0]"
ValueRange
类型在 NiceScale
中声明,其中 T
是您的 BinaryFloatingPoint
数据类型
typealias ValueRange = ClosedRange<T>
init?(_ rawRange: NiceScale<T>.ValueRange, desiredTicks: Int)
- 创建一个新的 NiceScale
实例如果提供的参数无意义,例如范围为零或期望的刻度数少于 2,则初始化将失败并返回 nil
。
初始化值也作为属性提供
let rawRange: NiceScale<T>.ValueRange
- 用于计算美观刻度的源范围
let desiredTicks: Int
- 刻度中期望的刻度数(默认值:10)
计算属性是惰性的,这意味着它们仅在首次需要时才会被计算。
基本属性集...
var range: NiceScale<T>.ValueRange
- 计算出的“美观”范围,应包含用于初始化此对象的“原始”范围。
var extent: T
- 范围边界之间的距离。
var ticks: Int
- 范围内的刻度数。这可能与用于初始化对象的 desiredTicks
不同。
var tickInterval: T
- 范围内刻度之间的距离。
var tickValues: [T]
- 范围内刻度的值。
var tickFractionDigits: Int
- 在刻度标签值中显示的小数位数。
更多处理刻度正负部分的专用属性...
var hasNegativeRange: Bool
- 如果为 true,则范围包括负值。
var hasPositiveRange: Bool
- 如果为 true,则范围包括正值。
var negativeRange: NiceScale<T>.ValueRange
- 范围的负数部分。如果没有,则为 0…0
。
var positiveRange: NiceScale<T>.ValueRange
- 范围的正数部分。如果没有,则为 0…0
。
var negativeExtent: T
- 如果范围有负数部分,则为其下限与 0 之间的距离。一个非负值。
var positiveExtent: T
- 如果范围有正数部分,则为其上限与 0 之间的距离。一个非负值。
var negativeExtentUnit: T?
- negativeExtent,表示为范围 0…1
中的单位值。
var positiveExtentUnit: T?
- positiveExtent,表示为范围 0…1
中的单位值。
func scaleToUnit(T) -> T
- 将值缩放到范围 0…1
中。
func scaleToUnitNegative(T) -> T
- 如果有,将值缩放到范围的负数部分 0…1
中。
func scaleToUnitPositive(T) -> T
- 如果有,将值缩放到范围的正数部分 0…1
中。
此库是 OpenAlloc Project 的成员。
版权所有 2021, 2022 OpenAlloc LLC
根据 Apache License, Version 2.0(“许可证”)获得许可;除非遵守许可证,否则您不得使用此文件。您可以在以下位置获得许可证副本
https://apache.ac.cn/licenses/LICENSE-2.0
除非适用法律要求或以书面形式达成协议,否则根据本许可证分发的软件将按“原样”基础分发,不附带任何形式的明示或暗示的保证或条件。请参阅许可证,了解有关特定语言的管理权限和限制的规定。
也欢迎其他贡献。我们鼓励您提交拉取请求以修复错误、改进文档或提供新功能。
拉取请求不必是生产就绪的功能或修复。它可以是拟议更改的草案,或者仅仅是一个测试,以表明预期的行为是有缺陷的。关于拉取请求的讨论可以从那里开始。
贡献最终应具有足够的测试覆盖率。请参阅当前实体的测试,以了解预期的覆盖率。