Компенсация оси Y на графике в SwiftUI Charts

Вопрос или проблема

Во-первых, я долго работал с SwiftUI, но это первый раз, когда я на самом деле начал создавать приложение высокого качества с его помощью, так что вполне возможно (даже вероятно), что ответ является простым. Я всё равно был бы признателен за помощь. У меня очень мало гордости, когда я учу что-то новое.

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

Текущий вывод выглядит следующим образом:

Основной график

Что здорово, но проблема, с которой я сталкиваюсь, сейчас, следующая:

введите описание изображения здесь

Обратите внимание, сколько мало места между метками оси и краем графика.

Я хотел бы дать этому больше места, но я несколько озадачен, как это правильно сделать.

Спасибо заранее за любую помощь!

Вот код для секции графика:

struct UserTypesChart: View {
    @State var data: [RCVST_DataProvider.RowPlottableData]
    
    var body: some View {
        GroupBox("SLUG-USER-TOTALS-CHART-TITLE".localizedVariant) {
        Chart(data) { inRowData in
                ForEach(inRowData.data, id: \.userType) { inUserTypeData in
                    BarMark(
                        x: .value("SLUG-BAR-CHART-USER-TYPES-X".localizedVariant, inRowData.date),
                        y: .value("SLUG-BAR-CHART-USER-TYPES-Y".localizedVariant, inUserTypeData.value)
                    )
                    .foregroundStyle(by: .value("SLUG-BAR-CHART-USER-TYPES-LEGEND".localizedVariant, inUserTypeData.userType.localizedString))
                }
            }
        }
        .chartYAxisLabel("Пользователи", spacing: 12)
        .chartYAxis {
            AxisMarks(preset: .aligned, position: .leading) { _ in
                AxisGridLine()
                AxisValueLabel(anchor: .trailing)
            }
        }
        .chartXAxisLabel("Дата", alignment: .bottom)
        .chartXAxis {
            AxisMarks(preset: .aligned, position: .bottom) { _ in
                AxisGridLine()
                AxisValueLabel()
            }
        }
        .padding()
    }
}

.

Ответ или решение

Чтобы оптимально настроить отступы вдоль оси Y в графике, созданном с использованием SwiftUI Charts, важно учитывать несколько ключевых аспектов. Мы рассмотрим, как можно отрегулировать пространство между метками осей и краем графика, чтобы улучшить визуальное восприятие вашего приложения.

Анализ текущего кода

Ваша текущая реализация графика с использованием структуры UserTypesChart выглядит хорошо и позволяет отображать количество пользователей в системе. Однако, проблема заключается в том, что расстояние между метками оси Y и краем графика слишком мало. Для устранения этого недостатка можно использовать различные методы настройки отступов и параметров графика.

Способы усовершенствования отступов оси Y

  1. Увеличение отступа от вертикальной оси:
    В SwiftUI Charts можно управлять расположением меток осей, а также пространством между ними с помощью параметров, таких как padding.

  2. Использование свойства chartYAxis:
    Мы можем добавить дополнительные отступы при помощи .chartYAxis, добавив дополнительный padding. Например:

    .chartYAxis {
       AxisMarks(preset: .aligned, position: .leading) { _ in
           AxisGridLine()
           AxisValueLabel(anchor: .trailing)
               .padding(.leading, 20) // Увеличим отступ слева для меток оси Y.
       }
    }

    Данный код увеличит отступ для меток оси Y, позволяя им «дышать» и улучшая читаемость.

  3. Регулировка отступов обеих осей:
    Возможность пошагово настраивать отступы для обеих осей (X и Y) поможет еще больше улучшить вывод. В вашем коде вы уже используете .chartXAxis и .chartYAxis. Подобным образом, вы также можете применить padding к меткам оси X:

    .chartXAxis {
       AxisMarks(preset: .aligned, position: .bottom) { _ in
           AxisGridLine()
           AxisValueLabel().padding(.bottom, 10) // Увеличиваем нижний отступ для оси X.
       }
    }
  4. Общие отступы для всего графика:
    Чтобы обеспечить общее увеличение пространства, можно также использовать padding() на уровне всего графика, как это вы уже делаете:

    .padding()

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

Итоговый код

Предлагаю следующий финализированный фрагмент кода с внедренными изменениями:

struct UserTypesChart: View {
    @State var data: [RCVST_DataProvider.RowPlottableData]

    var body: some View {
        GroupBox("SLUG-USER-TOTALS-CHART-TITLE".localizedVariant) {
            Chart(data) { inRowData in
                ForEach(inRowData.data, id: \.userType) { inUserTypeData in
                    BarMark(
                        x: .value("SLUG-BAR-CHART-USER-TYPES-X".localizedVariant, inRowData.date),
                        y: .value("SLUG-BAR-CHART-USER-TYPES-Y".localizedVariant, inUserTypeData.value)
                    )
                    .foregroundStyle(by: .value("SLUG-BAR-CHART-USER-TYPES-LEGEND".localizedVariant, inUserTypeData.userType.localizedString))
                }
            }
        }
        .chartYAxisLabel("Users", spacing: 12)
        .chartYAxis {
            AxisMarks(preset: .aligned, position: .leading) { _ in
                AxisGridLine()
                AxisValueLabel(anchor: .trailing)
                    .padding(.leading, 20) // Увеличенный отступ для меток оси Y.
            }
        }
        .chartXAxisLabel("Date", alignment: .bottom)
        .chartXAxis {
            AxisMarks(preset: .aligned, position: .bottom) { _ in
                AxisGridLine()
                AxisValueLabel()
                    .padding(.bottom, 10) // Увеличенный отступ для меток оси X.
            }
        }
        .padding() // Общий отступ для графика
    }
}

Заключение

Таким образом, вы сможете значительно улучшить читаемость и визуальную составляющую вашего графика, добавив нужные отступы. Экспериментируйте с величинами отступов, чтобы достичь желаемого внешнего вида. SwiftUI Charts предоставляет гибкие инструменты для настройки, что позволяет вам создавать красивый и интуитивно понятный интерфейс приложения.

Оцените материал
Добавить комментарий

Капча загружается...