我试图复制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 回答
为什么不只是从这样的范围:
至
其中
padding
是0
和1
之间的数字,例如0.05
.一种非常强大的方法如下:
取范围
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