查找范围内的圆形间隔

时间:2018-06-04 21:25:21

标签: python algorithm matplotlib rounding

绘制程序,例如matplotlib,找到绘图轴的n个圆周间隔。例如,如果x在0.05 - 0.9范围内,则轴中的圆数为0, 0.2, 0.4, 0.6, 0.8, 1.0

我的问题是:这种算法的逻辑是什么(我不需要代码,它可以是任何编程语言)?

我们有一个范围,当我们不知道舍入的精度时,或者如果n个区间可以给出舍入值,则需要在中找到n个舍入区间。

我的想法:

  1. 在范围之上和之下找到x%(图中可接受的填充)内的壁橱圆值。

  2. n(例如4-8之间)设置为在最小值和最大值之间有一个圆周间隔。

  3. 如果这是一个实用的方法,我仍然不知道如何管理任一步骤的算法。

1 个答案:

答案 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 ]