我正在尝试解决以下问题。 我正在构建另一个数学函数绘图器,该函数是在其预定义的 x,y 范围内绘制的,这很好。
现在我正在处理背景和 X、Y 轴的刻度(如果显示任何轴)。
我解决了以下问题。 我的固定宽度为 250 p 跳动缺口应在 12.5 至 50 便士之间。
刻度线应指示单位或半单位范围,我的意思是以下内容。
x 范围 (-5, 5):一刻度 = 1
x 范围 (-1, 1):一刻度 = 0.5 或 0.1,具体取决于每个选项将生成的间隙。
x 范围(0.1,0.3):0.05
给定一个 Xrange 如何获得全单位范围或半单位范围之间的刻度数?
或者也许还有其他方法来解决此类问题。
最佳答案
实现此目的的一种方法是“标准化”最小值和最大值之间的差异,并对该值进行大小写区分。在Python中:
delta = maximum - minimum
factor = 10**math.ceil(math.log(delta,10)) # smallest power of 10 greater than delta
normalised_delta = delta / factor # 0.1 <= normalised_delta < 1
if normalised_delta/5 >= 0.1:
step_size = 0.1
elif normalised_delta/5 >= 0.05:
step_size = 0.05
elif normalised_delta/20 <= 0.01:
step_size = 0.01
step_size = step_size * factor
上面的代码假设您想要最大可能的间隙。对于最小的,您将使用以下 if:
if normalised_delta/20 == 0.005:
step_size = 0.005
elif normalised_delta/20 <= 0.01:
step_size = 0.01
elif normalised_delta/5 >= 0.05:
step_size = 0.05
除了可能有多个合适的值之外,还有一种令人担忧的可能性是没有合适的值。以范围 [0,24] 为例,其中 12.5p 的间隙将给出 1.2 的步长,50p 的间隙将给出步长 4.8。中间没有“单位”或“半单位”。问题是 12.5p 和 50p 之间的差距是 4 倍,而 0.01 和 0.05 之间的差距是 5 倍。因此,您必须稍微扩大允许间隙的范围并相应地调整代码.
澄清一些神奇数字:除以 20 和 5 分别对应于具有最小和最大间隙大小的段数(即 250/12.5 和 250/50)。由于归一化增量在 [0.1,1) 范围内,因此将其除以 20 和 5 分别得到 [0.005,0.05) 和 [0.02,0.2)。这些范围导致第一个范围的可能(标准化)步长为 0.005 和 0.01,第二个范围为 0.05 和 0.1。
关于python - 滴答函数绘图器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/346823/