iOS-Charts - это очень гибкая и простая в использовании сторонняя библиотека, позволяющая настраивать ваши диаграммы.

В последнее время использую в работе iOS-Charts. Это очень гибкая и простая в использовании сторонняя библиотека, позволяющая настраивать диаграммы.

Эта библиотека примерно на 95% похожа на свой аналог для Android, что значительно упрощает разработку приложений для обеих платформ.

Здесь я использую данные о рождаемости в некоторых странах с высоким уровнем дохода, чтобы продемонстрировать, как настроить базовую гистограмму с помощью iOS-Charts.

До начала

Исходный код показан ниже. Если вас немного смущают некоторые классы или функции, которые я использую в этом примере, вот небольшое объяснение обработки необработанных данных, которое не имеет отношения к сегодняшней теме iOS-Charts:

Необработанные данные в этом примере представляют собой массив строк.

CountryItem - это класс, созданный для хранения индекса, страны и коэффициента рождаемости каждой страны. Функция getFormattedItemValue анализирует необработанные данные и возвращает массив CountryItem.

В viewDidLoad() getFormattedItemValue вызывается для обработки необработанных данных, а возвращенные данные сохраняются в items.

Настройка просмотра карты

Во-первых, добавьте UIView в раскадровку и установите для него класс BarChartView.

Не забудьте импортировать Charts в файл кода этого контроллера представления.

Контроллер представления должен соответствовать ChartViewDelegate и установить для делегата представления диаграммы значение self.

Теперь, если вы запустите симулятор, он должен показать «Данные диаграммы недоступны». Если в представлении диаграммы не отображаются эти слова, вы, вероятно, не реализовали его успешно.

Настройка данных

Структура данных диаграммы похожа на снимок экрана:

BarChartData содержит один или несколько наборов данных, и каждый набор данных содержит несколько записей.

В этом примере есть только 1 набор данных. Каждая запись данных представляет данные одной страны. Значение x - это индекс страны, а значение y - их коэффициент рождаемости.

Я определил метод transformToBarChartEntry(), который возвращает элемент BarChartDataEntry со значениями x и y из элемента CountryItem.

let dataEntries = items.map{ $0.transformToBarChartDataEntry() }
let set1 = BarChartDataSet(entries: dataEntries)
let data = BarChartData(dataSet: set)
chartView.data = data

После завершения настройки данных в вашем представлении должна появиться простая гистограмма.

BarValueFormatter() - это настраиваемое средство форматирования, которое я пишу, которое округляет значение y, отображаемое на каждой панели, до двух знаков после запятой.

Таблица стилей

Значение оси X

Ось x показывает значение x каждой записи по умолчанию. Чтобы изменить отображаемые значения, используйте IndexAxisValueFormatter(values: ) и предоставьте массив строк, которые вы хотите отобразить на оси x. Я позволил отображать названия стран на метках оси X.

xAxis.valueFormatter = IndexAxisValueFormatter(values: items.map { $0.country })

Но названия стран слишком длинные, чтобы их можно было втиснуть в таблицу без дублирования. Я настраиваю labelRotationAngle так, чтобы их можно было четко прочитать на диаграмме.

xAxis.labelRotationAngle = -25

Значение оси Y

По умолчанию ось Y отображается с обеих сторон, но оси можно отключить.

let rightAxis = chartView.rightAxis
rightAxis.enabled = false

Максимальное значение осей может быть установлено выше, чем наибольшее значение x или y, поэтому на диаграмме остается некоторое пространство.

И количество этикеток можно регулировать. Я вручную установил его на 6, чтобы гарантировать, что минимальное и максимальное число будут отображаться на метке оси.

leftAxis.setLabelCount(6, force: true)
leftAxis.axisMinimum = 0.0
leftAxis.axisMaximum = 2.5

Лимитная линия

iOS-Charts позволяет добавлять дополнительные линии по обеим осям.

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

Создайте объект ChartLimitLine для дополнительной линии и настройте его свойства. Самое главное, не забудьте использовать addLimitLine() для добавления этого ChartLimitLine объекта к оси.

let highIncomeAvg = 1.6
let highIncomeAverageLine = ChartLimitLine()
highIncomeAverageLine.limit = highIncomeAvg
highIncomeAverageLine.lineColor = .chartAverageColour
highIncomeAverageLine.valueTextColor = .chartAverageColour
highIncomeAverageLine.label = “Average (High Income): \(highIncomeAvg)”
highIncomeAverageLine.labelPosition = .bottomLeft
leftAxis.addLimitLine(highIncomeAverageLine)

Смещение обзора карты

Смещение представления диаграммы можно отрегулировать, чтобы оно выглядело лучше.

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

chartView.setExtraOffsets(left: 10, top: 0, right: 20, bottom: 50)

Вместо этого их можно установить индивидуально. Достигает того же результата.

chartView.extraLeftOffset = 10
chartView.extraTopOffset = 0
chartView.extraRightOffset = 20
chartView.extraBottomOffset = 50

Анимация

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

Используйте animate(), чтобы добавить анимацию к вашей диаграмме.

chartView.animate(yAxisDuration: 1.5 , easingOption: .easeOutBounce)

Руководство по диаграммам для iOS: выделите выбранное значение с помощью настраиваемого маркера

✨ Узнайте, как создать собственный маркер для диаграммы 👇🏻



Использованная литература:

Документация



Смещение маржи графика



Индекс входа



Уровень рождаемости