Как правильно отображать метки на нижней оси (xVals) на диаграмме iOS?

Я следовал очень простому руководству по чартам iOS.

Значения на моей диаграмме теперь отображаются правильно, однако метка внизу не отображается.

    override func viewDidLoad() {

    results =  ["Won", "Drawn", "Lost"]
    let games = [totalWins, totalDraws, totalLosses]
    setChart(dataPoints: results, values: games)

    }

    // CHART FUNCTION ************

    func setChart(dataPoints: [String], values: [Double]){

    barChartView.noDataText = "you need to provide some data for the chart."

    var dataEntries: [BarChartDataEntry] = Array()

    for i in 0..<dataPoints.count {
        let dataEntry = BarChartDataEntry(x: Double(i), y: values[i])
        dataEntries.append(dataEntry)
    }


    let chartDataSet = BarChartDataSet(values: dataEntries, label: "Games Played")

    //let chartData = BarChartData(xVals: self.results, dataSet: dataEntries)
    let chartData = BarChartData()
    self.barChartView.xAxis.labelPosition = XAxis.LabelPosition.bottom
    barChartView.leftAxis.granularityEnabled = true
    barChartView.rightAxis.enabled = false
    barChartView.leftAxis.granularity = 1.0
    chartData.addDataSet(chartDataSet)
    barChartView.data = chartData

}

// END OF CHART FUNCTION ***********

Как видите, он отображает цифры, а не «Выиграл, Ничья, Проиграл».

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

Я считаю, что это потому, что мне нужно назначить метки в такой команде:

let chartData = BarChartData(xVals: self.results, dataSet: dataSet)
chartView.data = chartData

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

Временное изображение:

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


person RDowns    schedule 05.01.2017    source источник


Ответы (3)


У вас есть обмен значениями x и y.

let dataEntry = BarChartDataEntry(x: Double(i), y: values[i])

И чтобы получить ось X внизу, вы должны добавить следующее.

self.barChartView.xAxis.labelPosition = XAxis.LabelPosition.bottom

Пожалуйста, найдите мой рабочий код для примера набора данных.

class BarChartViewController: UIViewController {
  @IBOutlet weak var barChartView: BarChartView!
      override func viewDidLoad() {
      super.viewDidLoad()
      let values = [11.00, 90.95, 250.00, 40.90, 60.88, 99.99, 25.00]
      setChart(values: values)
    }

    func setChart(values: [Double]) {
        var daysEntries: [BarChartDataEntry] = []

        for i in 0..<values.count {
            let dataEntry = BarChartDataEntry(x : Double(i), y : values[i])
            daysEntries.append(dataEntry)
        }

        let data = BarChartData()

        let ds1 = BarChartDataSet(values: daysEntries, label: "Days")
        ds1.colors = [NSUIColor.red]

        data.addDataSet(ds1)

        self.barChartView.data = data
        self.barChartView.gridBackgroundColor = NSUIColor.white
        self.barChartView.chartDescription?.text = "Barchart Days and Gross"
        self.barChartView.rightAxis.enabled = true
        self.barChartView.xAxis.labelPosition = XAxis.LabelPosition.bottom
        self.barChartView.xAxis.axisRange = 5.0
    }

    override func viewWillAppear(_ animated: Bool) {
        self.barChartView.animate(xAxisDuration: 1.0, yAxisDuration: 1.0)
    }
}

Спасибо, Шрирам.

person Sri    schedule 05.01.2017
comment
Спасибо, Шрирам, что исправил значения данных на диаграмме, хотя мои метки все еще не отображаются. Я обновил вопрос тем, что у меня есть сейчас. - person RDowns; 05.01.2017
comment
Привет, RDowns, я обновил свой ответ рабочим кодом, который охватывает сценарии. - person Sri; 05.01.2017
comment
Спасибо, я получаю сообщение об ошибке с вашим кодом: Отсутствует аргумент для параметра «dataPoints» при вызове строки: setChart (значения: значения) - person RDowns; 05.01.2017
comment
Я заставил ваш код работать, изменив строку на setChart(dataPoints: results, values: values) - результаты переменных указывали на временную переменную - пусть результаты = [One, Two, Three] - но это все еще не показывает мне, как чтобы пометить нижнюю ось текстом .... Я обновлю свой вопрос скриншотом вашего вывода, чтобы увидеть, правильно ли я это сделал, как вы ожидаете. В вашем примере я бы хотел, чтобы пн, вт, ср, чт... внизу не 1,2,3,4,5,6... - person RDowns; 05.01.2017

У меня была такая же проблема, и я исправил ее с помощью этих трех строк:

self.xAxis.granularity = 1
self.xAxis.granularityEnabled = true
self.xAxis.labelCount = // number of points on X axis 
person Maryam Fekri    schedule 16.04.2017

Я надеюсь, что это поможет вам контролировать положение меток xAxis.

  • Первый метод

    chartView.setExtraOffsets(left: 20, top: 0, right: 0, bottom: 0)
    
  • Второй способ

    chartView.xAxis.avoidFirstLastClippingEnabled = true
    
person Li Jin    schedule 29.07.2020