Algorithm 确定Y轴标签和位置的算法?
给定一个y轴值数组,如Algorithm 确定Y轴标签和位置的算法?,algorithm,language-agnostic,charts,Algorithm,Language Agnostic,Charts,给定一个y轴值数组,如[-3400,-100050012003790],如何确定“良好”的y轴标签并将其放置在网格上 ^ ---(6,000)-|--- | ---(4,000)-|--- | ---(2,000)-|--- | <------(0)-+----------------------------------------> | --(-2,000)-|---
[-3400,-100050012003790]
,如何确定“良好”的y轴标签并将其放置在网格上
^
---(6,000)-|---
|
---(4,000)-|---
|
---(2,000)-|---
|
<------(0)-+---------------------------------------->
|
--(-2,000)-|---
|
--(-4,000)-|---
V
^
---(6,000)-|---
|
---(4,000)-|---
|
---(2,000)-|---
|
|
--(-2,000)-|---
|
--(-4,000)-|---
v
您可以按照以下方式进行操作:
n
)。结果可能没有这么多标签,但很接近。我将有n=6
min
)和最大值(max
),其余的数字无关紧要。(min=-3400
,max=3790
)uglyStep=(max-min)/(n-2)
。我们将底部和顶部的标签减去2。(uglyStep=1797
)uglyStep
的数量级计算为magnize=10^floor(log10(uglyStep))
。(震级=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
,这是相当模糊的。你能再解释一下吗?另外,如果你只有一个一维数组的值,为什么你要显示两个轴?出于好奇,为什么你自己要这样做?100%(几乎)能够进行绘图的工具都会按照默认值处理此问题。您确实需要提供更多信息,了解其用途、约束条件、大小等。您甚至还没有说明为什么仅将文本粘贴在给定的y值上的天真解决方案不起作用。