Я интегрирую ios-charts. Я хочу макет y-axis of graph dynamically
на основе ответа json. Например: - если json
содержит 50 значений, тогда я нарисую 10 (50/5) +5 = 15
значений yaxis. Эти 15 значений должны содержать минимальное и максимальное значение json. остальные 13 значений должны иметь фиксированный шаг между ними. Я пишу несколько логик и не могу обеспечить правильные результаты. Я открыт для идей.Динамическая ось y для диаграмм
0
A
ответ
1
Вам нужно найти наименее распространенный множитель и использовать его в качестве основы для выбора правильных значений. Я нашел здесь приятную работу: Ray Wenderlich Algorithms
В приведенном выше примере вы завершите работу с commonMultiple = 150
. originalCount
- это количество значений, которое вы должны были начать с (50).
Тогда было бы что-то вроде этого, я думаю. values
- это массив значений, созданный из вашего json.
var multipliedValues = [Int]()
for value in values {
multipliedValues += [Int](repeating: value, count: commonMultiple/originalCount)
}
Тогда вы готовы выделить подмножество значений:
let numberOfSteps = (originalCount/5)+5
var yValues = [Int]()
for n in 0..<numberOfSteps{
let index = n*commonMultiple/numberOfSteps
yValues.append(multipliedValues[index])
}
Тогда конечная сложная часть, чтобы вставить самые низкие и самые высокие значения. Что-то вроде этого возможно:
let minValue = values.sorted().first!
if !yValues.contains(minValue) {
let minIndex = multipliedValues.index(of: minValue)!/(commonMultiple/numberOfSteps)
yValues[minIndex] = minValue
}
let maxValue = values.sorted().last!
if !yValues.contains(maxValue) {
let maxIndex = multipliedValues.index(of: maxValue)!/(commonMultiple/numberOfSteps)
yValues[maxIndex] = maxValue
}