给定一组y值,如[-3400, -1000, 500, 1200, 3790]
,如何确定“好的”Y轴标签并将它们放在网格上?
^
---(6,000)-|---
|
---(4,000)-|---
|
---(2,000)-|---
|
<------(0)-+---------------------------------------->
|
--(-2,000)-|---
|
--(-4,000)-|---
V
答案 0 :(得分:4)
您可以按以下方式执行此操作:
n
)。结果可能没有这么多标签,但它会很接近。我将要n = 6
。min
)和最大值(max
),其余数字无关紧要。 (min = -3400
,max = 3790
)uglyStep = (max - min) / (n - 2)
。我们在底部和顶部减去两个标签。 (uglyStep = 1797
)uglyStep
为magnitude = 10 ^ floor(log10(uglyStep))
的数量级。 (magnitude = 1000
)uglyStep
之间差异最小的数字。这将是prettyStep
。 (prettyStep = 2000
)bottom = floor(min / prettyStep) * prettyStep
和top = ceil(max / prettyStep) * prettyStep
。注意/
表示正常的数学除法,而不是类似C的整数除法。 (bottom = -4000
,top = 4000
)bottom
整除的top
和prettyStep
之间的每个数字都会有一个标签。 (-4000, -2000, 0, 2000, 4000
)如果您不希望min
和max
非常接近bottom
和top
,则可能需要进行一些修改。
此外,它有时表现得有点奇怪,例如对于min = 0
和max = 3002
,它会选择0, 500, 1000, 1500, 2000, 2500, 3000, 3500
,但对于max = 3005
,它会使用0, 1000, 2000, 3000, 4000
。