Как сделать так, чтобы на Графиках всегда отображались линии сетки? - PullRequest
0 голосов
/ 10 мая 2018

Я использую диаграммы 3.1.1 и не могу понять, как сделать так, чтобы на диаграмме всегда отображались линии сетки по оси X:

enter image description here

В этом примере я хочу, чтобы диаграмма отображала линии сетки xAxis и метки после 25 апреля, то есть 26 апреля, 27 апреля, 28 апреля, 29 апреля, 30 апреля, 1 мая.

Я создал этот класс для генерации достаточного количества дат, чтобы заполнить пробелы, если для каждого последующего дня, который я хочу показать, нет точки данных:

class AxisValuesGenerator: NSObject {
    var days: [String]? = []

    func generatexAxisDates(liftEvents: [LiftEvent]) -> [String]? {
        var dates: [Date] = []
        let intervalBetweenDates: TimeInterval = 3600 * 24 // 3600 = 1 hour
        let firstDate = (liftEvents.first?.date)! // - intervalBetweenDates
        var lastDate = liftEvents.last?.date

        if Double(liftEvents.count) < 7 {
            let daysToAdd = intervalBetweenDates * Double(7 - liftEvents.count)
            lastDate = lastDate?.addingTimeInterval(daysToAdd)
            for _ in 0...6 {
                dates = self.intervalDates(from: firstDate, to: lastDate!, with: intervalBetweenDates)
            }
        } else {
            dates = self.intervalDates(from: firstDate, to: lastDate!, with: intervalBetweenDates)
        }

        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "MMM d"

        days = dates.map {dateFormatter.string(from: $0)}

        return days

    }

func intervalDates(from startDate: Date, to endDate:Date, with interval:TimeInterval) -> [Date] {
    guard interval > 0 else { return [] }

    var dates:[Date] = [startDate]
    var currentDate = startDate

    while currentDate <= endDate {
        currentDate = currentDate.addingTimeInterval(interval)
        dates.append(currentDate)
    }

    return dates
}

и он генерирует нужные мне даты:

▿ Optional<Array<String>>   ▿ some : 7 elements
   - 0 : "Apr 25"
   - 1 : "Apr 26"
   - 2 : "Apr 27"
   - 3 : "Apr 28"
   - 4 : "Apr 29"
   - 5 : "Apr 30"
   - 6 : "May 1"
   - 7 : "May 2"

но диаграмма не отображает их.

Как я могу получить диаграмму для отображения недостающих линий сетки?

UPDATE:

Я пытался установить setVisibleXRange и setLabelCount (принудительно) следующим образом:

chartView.setVisibleXRange(minXRange: 2.0, maxXRange: 6.0)

let leftAxis = chartView.leftAxis
        leftAxis.setLabelCount(7, force: true)

и диаграмма отображается правильно, если у меня есть 6 или более значений для построения графика. Но вы можете видеть, что только с двумя значениями я могу форсировать линии, но метки xAxis неверны:

enter image description here

1 Ответ

0 голосов
/ 10 мая 2018

Настройка данных и настройка просмотра диаграммы - это две разные вещи. Графики предоставляют множество элементов управления для настройки способа отображения ваших данных.

Попробуйте что-то вроде этого на вашем графике:

chartView.xAxis.forceLabelsEnabled = true
chartView.xAxis.labelCount = 7

Чтобы показать метки x, где нет значения y, я использовал «пустое» значение y (в моем случае это было 0, но может быть и другим). Чтобы убедиться, что вы видите правильный диапазон Y, используйте параметр левой / правой оси

chartView.leftAxis.axisMinimum = 5

Вот как это выглядит для меня: enter image description here

...