我试图复制Excel在计算折线图的Y轴边界方面的'正确'感觉。
作为一个例子,假设我目前有一个包含三个数据点的图表。 (0,100),(1,500),(2,930)。
我目前使用的简单代码将Y轴最小值设置为100,将Y轴最大值设置为930.这样做的目的是防止没有0值的数据集偏移图表的大小。这有效,但我觉得它可能会好得多。
对于上面的例子,Excel绘制了0到1000范围内的数据点。我正在尝试创建一个绘制相同“感觉良好”范围的通用算法。然而,事实证明这有点棘手。
我觉得我需要一些信息:
从那里我有点失落。
如果我将930作为最大数据点值,我知道它的数量级为3.因此,我将其中一个加到其最大值,其余为0,结果为1000。
如果我将1030作为最大数据点值,我知道它的数量级为4.如果我将其中的一个加到其最大值而其余部分为零,则结果为2000. Excel绘制时将1200绘制为最大范围( 0,100),(1,500),(2,930),(3,1030)。
这个问题在较大的值时会迅速降低 - 总是增加最大值并不完全正确,但有时也是如此。有没有人有这方面的经验可以让我们对更好的方法有所了解?
答案 0 :(得分: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
答案 1 :(得分: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
其中padding
是0
和1
之间的数字,例如0.05
。