Нахождение круглых интервалов в диапазоне - PullRequest
0 голосов
/ 05 июня 2018

Программы для рисования, такие как 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) интервалы между минимальными и максимальными значениями.

Если это целесообразноПодходя к этому, я до сих пор не знаю, как управлять алгоритмом для любого шага.

1 Ответ

0 голосов
/ 05 июня 2018

Если вас интересует, как обычно работают тикеры, вы можете посмотреть http://vis.stanford.edu/papers/tick-labels и ссылки в нем.Реализация этого алгоритма доступна здесь .

Matplotlib использует несколько иной способ, который, конечно, может быть напрямую взят из MaxNLocator в исходном коде matplotlib .

Вы можете использовать этот локатор 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 ]
...