Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 确定Y轴标签和位置的算法?_Algorithm_Language Agnostic_Charts - Fatal编程技术网

Algorithm 确定Y轴标签和位置的算法?

Algorithm 确定Y轴标签和位置的算法?,algorithm,language-agnostic,charts,Algorithm,Language Agnostic,Charts,给定一个y轴值数组,如[-3400,-100050012003790],如何确定“良好”的y轴标签并将其放置在网格上 ^ ---(6,000)-|--- | ---(4,000)-|--- | ---(2,000)-|--- | <------(0)-+----------------------------------------> | --(-2,000)-|---

给定一个y轴值数组,如
[-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
  • 决定,你认为“漂亮”是什么数字?您是否只想看到像1、2、5、10、20、50…这样的步骤(在本例中,漂亮的数字是1、2和5),还是像1、2、4、5、6、8、10…这样的步骤也很好?我只考虑1, 2和5。
  • 找出序列的最小值(
    min
    )和最大值(
    max
    ),其余的数字无关紧要。(
    min=-3400
    max=3790
  • 计算标签之间理想但难看的步长,如
    uglyStep=(max-min)/(n-2)
    。我们将底部和顶部的标签减去2。(
    uglyStep=1797
  • uglyStep
    的数量级计算为
    magnize=10^floor(log10(uglyStep))
    。(
    震级=1000
  • 选择最好的漂亮的一步,将大小乘以所有漂亮的数字,再乘以10。然后选择与
    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值上的天真解决方案不起作用。