绘制程序,例如matplotlib
,找到绘图轴的n
个圆周间隔。例如,如果x在0.05 - 0.9
范围内,则轴中的圆数为0, 0.2, 0.4, 0.6, 0.8, 1.0
。
我的问题是:这种算法的逻辑是什么(我不需要代码,它可以是任何编程语言)?
我们有一个范围,当我们不知道舍入的精度时,或者如果n个区间可以给出舍入值,则需要在中找到n
个舍入区间。
我的想法:
在范围之上和之下找到x%(图中可接受的填充)内的壁橱圆值。
将n
(例如4-8之间)设置为在最小值和最大值之间有一个圆周间隔。
如果这是一个实用的方法,我仍然不知道如何管理任一步骤的算法。
答案 0 :(得分:3)
如果对代码通常如何工作感兴趣,您可以查看http://vis.stanford.edu/papers/tick-labels及其中的引用。 该算法的实现可用here。
Matplotlib使用略有不同的方式,当然可以直接从MaxNLocator
中获取
matplotlib source code
您可以将此matplotlib定位器用于您喜欢的任何目的(或自行重新实现相应的部分)。
import numpy as np
import matplotlib.ticker as mticker
loc = mticker.MaxNLocator(nbins=10, min_n_ticks=3)
arr = np.array([23, 21, 27])
ticks = loc.tick_values(arr.min(), arr.max())
print(ticks)
### [21. 21.6 22.2 22.8 23.4 24. 24.6 25.2 25.8 26.4 27. ]
arr = np.array([.5, .3, .9])
ticks = loc.tick_values(arr.min(), arr.max())
print(ticks)
### [0.24 0.32 0.4 0.48 0.56 0.64 0.72 0.8 0.88 0.96]
# or use less target bins:
loc2 = mticker.MaxNLocator(nbins=5, min_n_ticks=3)
arr = np.array([.5, .3, .9])
ticks = loc2.tick_values(arr.min(), arr.max())
print(ticks)
### [0.3 0.45 0.6 0.75 0.9 ]