首页 文章

计算折线图的最小/最大Y轴值

提问于
浏览
1

我试图复制Excel在计算折线图的Y轴边界方面的“正确”感觉 .

举个例子,假设我目前有一个包含三个数据点的图表 . (0,100),(1,500),(2,930) .

我目前使用的简单代码将Y轴最小值设置为100,将Y轴最大值设置为930.这样做的目的是防止没有0值的数据集偏移图表的大小 . 这有效,但我觉得它可能会好得多 .

对于上面的示例,Excel绘制了0到1000范围内的数据点 . 我正在尝试创建一个绘制相同“感觉良好”范围的通用算法 . 然而,事实证明这有点棘手 .

我觉得我需要一些信息:

  • 上限值和下限值的数量级(10的幂) .

  • 始终采用数据点的上限/下限 - 当数据点与绘制的最大/最小范围共享相同的值时,不是很清楚 .

从那里我有点失落 .

如果我将930作为最大数据点值,我知道它的数量级为3.因此,我将其中一个加到其最大值而将其余值加零 - 得到1000 .

如果我将1030作为最大数据点值,我知道它的数量级为4.如果我将其中的一个加到其最大值并将其余值归零,则结果为2000. Excel绘制1200作为绘图时的最大范围(0,100 ),(1,500),(2,930),(3,1030) .

这个问题在较大的值下会迅速降低 - 总是增加最大值并不完全正确,但有时也是如此 . 有没有人有这方面的经验可以让我们对更好的方法有所了解?

2 回答

  • 1

    为什么不只是从这样的范围:

    (1-padding) * minimum_value // minimum > 0
    (1+padding) * minimum_value // minimum < 0
    

    (1+padding) * maximum_value // maximum > 0
    (1-padding) * maximum_value // maximum < 0
    

    其中 padding01 之间的数字,例如 0.05 .

  • 3

    一种非常强大的方法如下:

    • 取范围 r = max - min

    • 假设填充大约 . 百分之五(必要时调整数字), pad = r * 0.05

    • pad 直到下一个 (1,2,5)*10^n (例如 0.23 将四舍五入为 0.5 ,而 5.5 将四舍五入为 10 ) .

    • axis_min = floor(min/pad-1)*pad

    • axis_max = ceil(max/pad+1)*pad

相关问题