python - 查找范围内的圆间隔

标签 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 之间)以在最小值和最大值之间设置舍入间隔。

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

最佳答案

如果对股票行情的一般工作方式感兴趣,您可以查看 http://vis.stanford.edu/papers/tick-labels以及其中的引用文献。 该算法的实现可用 here

Matplotlib 采用了稍微不同的方式,当然可以直接取自MaxNLocatormatplotlib 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 ]

关于python - 查找范围内的圆间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50688992/

相关文章:

python - 在散点图上绘制 matplotlib.animation 中的垂直线

python - 使用 `scipy.interpolate.griddata` 插值非常慢

python - 设置样式表后如何恢复 matplotlib 默认值

php - 根据 float PHP中的概率选择一个数字

python - 如何使用 BeautifulSoup 从表中获取第一个和第三个 td?

python - 如何在 google colab 中升级到 pytorch-nightly?

python - 决策树显示没有达到我想要的效果

javascript - 每个簇选取 m 个点

android生成随机唯一的颜色代码

python - 为什么这个 Python 脚本会删除 '.txt' 文件,以及所有 '.tmp' 文件?