如何根据现有 "step list" 定义匹配轴槽口

How to define matching axis notches from existing "step list"

我需要一种方法来对齐两个单独轴上的刻度线,同时能够控制 "step" 值(刻度线之间的值),其中两个轴都从标记 0 开始并以不同的最大值结束价值。

为什么会出现这个问题:

Flot,JS 图表包有对齐刻度线的选项,但是当我这样做时,我无法控制步长值。但是我可以直接控制步长值,但是我失去了对齐刻度线的能力。然而,我可以恢复定义我自己的最大值和步长值,以获得我需要的东西(对齐刻度线,同时保持所需的步长值),但我需要一些帮助。产生这个问题(继续阅读以了解详细信息)。

例子

设a为A轴上的最大值,b为B轴上的最大值。

在本例中,设 a = 30,b = 82。 假设我想要 6 个刻度线(不包括轴末端的额外刻度线)。实际上,我在尝试了几次之后猜到了 6。

一旦我有了所需数量的刻度线,我就可以这样做:

最终结果

输入:

输出:

视觉:

|---------|---------|---------|---------|---------|---------> A
0         5        10        15        20        25        30

|---------|---------|---------|---------|---------|---------> B
0        15        30        45        60        75        90

摘要 "Demands"

问题(问题)

我该怎么做?

这是我想出的程序。我假设你只想要整数。

  • 选择 4 到 12 之间的报价数
  • 计算 AB 轴所需的步数使用这个刻度数
  • 使用这些步长值计算我们需要将轴 A 和轴 B 延长多少;将这些数字加在一起并记住结果
  • 从头开始重复下一个刻度值
  • 我们选择给出最小分数的刻度数;如果有平局,我们选择较小数量的刻度

以下是一些示例结果:

a=30, b=82 给出 4 个刻度

 0    10    20    30
 0    28    56    84

a=8, b=5 给出 6 个刻度

 0     2     4     6     8    10
 0     1     2     3     4     5

这是伪代码:

a = range of A axis
b = range of B axis

tickList[] = {4,5,6,7,8,9,10,11,12}

// calculate the scores for each number of ticks
for i from 0 to length(tickList)-1
    ticks = tickList[i]

    // find the number of steps we would use for this number of ticks
    Astep = ceiling(a/(ticks-1))
    Bstep = ceiling(b/(ticks-1))

    // how much we would need to extend the A axis
    if (a%Astep != 0)
        Aextend[i] = Astep - a%Astep
    else
        Aextend[i] = 0
    end

    // how much we would need to extend the B axis
    if (b%Bstep != 0)
        Bextend[i] = Bstep - b%Bstep
    else
        Bextend[i] = 0
    end

    // the score is the total extending we would need to do
    score[i] = Aextend[i] + Bextend[i]

end


// find the number of ticks that minimizes the score
bestIdx = 0
bestScore = 1000;

for i from 0 to length(tickList);
    if (score[i] < bestScore)
        bestIdx = i
        bestScore = score[i]
    end
end

bestTick = tickList[bestIdx]
bestAstep = ceiling(a/(bestTick-1))
bestBstep = ceiling(b/(bestTick-1))

A 轴从 0 bestAstepbestAstep*bestTick

B 轴从 0bestBstepbestBstep*bestTick