Метка BarChartView xAxis не отображает все метки

У меня есть BarChartView с 31 полосой и, следовательно, 31 меткой. Все добавляю и настраиваю по примерам и работает как надо - разве что BarChartView отображает только каждую 3-ю метку. Итак, я пытаюсь распечатать 1, 2, 3, 4, 5, 6,..., 30, 31, но он печатает 1, 4, 7, 11,..., 31. Как я могу это изменить? Мне даже не нужно печатать все метки, все, что мне действительно нужно, это первая и последняя метка, то есть 1 и 31, но я не могу понять, как это установить.

Я пробовал установить метку nil для каждого бара, который не является первым или последним, но это тоже ничего не дает. Я считаю, что причина, по которой он печатает каждую третью этикетку, заключается в том, что он не может вместить их все, верно? Моя настройка для BarChartView:

    barChartView.descriptionText = ""
    barChartView.noDataTextDescription = ""
    barChartView.drawGridBackgroundEnabled = false
    barChartView.xAxis.drawAxisLineEnabled = false
    barChartView.xAxis.drawGridLinesEnabled = false
    barChartView.xAxis.drawLabelsEnabled = true
    barChartView.drawBordersEnabled = false
    barChartView.leftAxis.enabled = false
    barChartView.rightAxis.enabled = false
    barChartView.legend.enabled = false
    barChartView.xAxis.labelPosition = .Bottom
    barChartView.xAxis.labelTextColor = UIColor.whiteColor()
    barChartView.xAxis.labelFont = UIFont(name: timesNewRoman, size: barChartView.xAxis.labelFont.pointSize)!
    barChartView.dragEnabled = false
    barChartView.highlightEnabled = false
    barChartView.scaleXEnabled = false
    barChartView.scaleYEnabled = false

и я добавляю xValues вот так:

for (index, value) in plotData.enumerate() {
        var xValue: String?
        xValue = index == 0 || index == plotData.count-1 ? "\(index + 1)" : nil


        barChartData.addXValue(xValue)
        let dataEntry = BarChartDataEntry(value: Double(value), xIndex: index)

        dataEntries.append(dataEntry)
}

person ClockWise    schedule 15.02.2016    source источник


Ответы (2)


Итак, для оси x есть axisLabelModulus и AxisModulusCustom для управления модулем при отображении меток оси x.

По умолчанию он рассчитывается автоматически.

public var axisLabelModulus = Int(1)
/// Is axisLabelModulus a custom value or auto calculated? If false, then it's auto, if true, then custom.
/// 
/// **default**: false (automatic modulus)
private var _isAxisModulusCustom = false

вы можете использовать setLabelsToSkip(), чтобы указать, сколько меток нужно пропустить.

/// Sets the number of labels that should be skipped on the axis before the next label is drawn. 
/// This will disable the feature that automatically calculates an adequate space between the axis labels and set the number of labels to be skipped to the fixed number provided by this method. 
/// Call `resetLabelsToSkip(...)` to re-enable automatic calculation.
public func setLabelsToSkip(count: Int)
person Wingzero    schedule 16.02.2016
comment
@Wingzero В какую версию библиотеки включена эта функция? - person Abdul Rehman; 22.09.2016
comment
@Wingzero Можете ли вы сказать мне, в каком классе написаны эти функции и свойства (спасибо) - person Abdul Rehman; 22.09.2016
comment
ты должен уметь искать - person Wingzero; 22.09.2016
comment
@Wingzero Я искал это, но не смог найти. Использование 2.2.5 - person Abdul Rehman; 22.09.2016
comment
@AbdulRehmanWarraich это просто неправда. сначала проверьте свою библиотеку - person Wingzero; 22.09.2016
comment
Я смотрю это в каждом классе, но не мог найти это. Я нашел публичную функцию setLabelCount(count: Int, force: Bool) AxisBase.swift . - person Abdul Rehman; 22.09.2016
comment
@AbdulRehmanWarraich, тогда вам следует проверить код своей библиотеки с помощью веток github. - person Wingzero; 22.09.2016
comment
Пожалуйста, скажите мне версию библиотеки, где я могу ее найти. - person Abdul Rehman; 22.09.2016
comment
@Wingzero Я скачал свежую копию Master с github и искал общедоступную функцию func setLabelsToSkip, но не смог ее найти. (Абдул Рехман) - person Syed Uzair Ahmed; 22.09.2016
comment
вы должны быть в курсе того, чем занимается наша библиотека. вы должны использовать ветку chart2.2.5... - person Wingzero; 22.09.2016
comment
Отметим, что эта функция недоступна в текущей версии (3.4.0). - person Womble; 19.02.2020

In

pod 'Charts', '~> 3.0'

использовать это:

public func setLabelCount(count: Int, force: Bool) 
person Irfan    schedule 31.10.2016
comment
Чтобы отобразить все метки, установите количество точек данных. Вы можете указать большое число, например 9999999, и для каждой точки данных будет использоваться одна метка. Но это не работает, если у вас есть сгруппированные наборы и вам нужна одна метка для каждого набора. Есть ли простой способ, как старый способ сделать это, или обновление количества меток каждый раз, когда мои данные меняются, это единственный способ? - person Vlad V; 04.08.2017