2016-09-26 9 views
0

Я интегрирую ios-charts. Я хочу макет y-axis of graph dynamically на основе ответа json. Например: - если json содержит 50 значений, тогда я нарисую 10 (50/5) +5 = 15 значений yaxis. Эти 15 значений должны содержать минимальное и максимальное значение json. остальные 13 значений должны иметь фиксированный шаг между ними. Я пишу несколько логик и не могу обеспечить правильные результаты. Я открыт для идей.Динамическая ось y для диаграмм

ответ

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 
}