一尘不染

如何在iOS图表中的X轴上添加字符串?

swift

使用新版本时,我在创建一些图形时遇到了一些麻烦,以前的代码是:

func setChart(dataPoints: [String], values: [Double]) {
    var dataEntries: [BarChartDataEntry] = []

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

    let chartDataSet = BarChartDataSet(yVals: dataEntries, label: "Units Sold")
    let chartData = BarChartData(xVals: months, dataSet: chartDataSet)
    barChartView.data = chartData
}

您可以使用以下行来传递值,例如,月份数组:

let chartData = BarChartData(xVals: months, dataSet: chartDataSet)

新版本发布后,用于实现相同图形的代码为:

func setChart(dataPoints: [String], values: [Double]) {          
    var dataEntries: [BarChartDataEntry] = []

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

    let chartDataSet = BarChartDataSet(values: dataEntries, label: "Units Sold")

    let chartData = BarChartData()
    chartData.addDataSet(chartDataSet)
    barChartView.data = chartData
}

我尝试了几个小时,但找不到修改X轴值的方法,希望有人可以帮助我,谢谢!


阅读 261

收藏
2020-07-07

共1个答案

一尘不染

我找到了解决方案,也许另一个解决方案可以更好地解决此问题,而无需创建新类,这就是我发现的:

首先,您需要创建一个新类,该类将是您的格式化程序类,并添加IAxisValueFormater接口,然后使用stringForValue方法自定义新值,它需要两个参数,第一个是实际值(您可以看到它像索引),第二个是该值所在的轴。

import UIKit
import Foundation
import Charts

@objc(BarChartFormatter)
public class BarChartFormatter: NSObject, IAxisValueFormatter
{
  var months: [String]! = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]

  public func stringForValue(value: Double, axis: AxisBase?) -> String 
  {
    return months[Int(value)]
  }   
}

现在,在文件中,在setChart()函数开始时,您必须创建两个变量,一个用于格式化程序类,一个用于轴类:

let formato:BarChartFormatter = BarChartFormatter()
let xaxis:XAxis = XAxis()

接下来,在for in循环的末尾继续操作,并将索引和轴传递给格式化程序变量:

formato.stringForValue(Double(i), axis: xaxis)

循环后,将格式添加到轴变量中:

xaxis.valueFormatter = formato

最后一步是将新的xaxisformatted添加到barChartView中:

barChartView.xAxis.valueFormatter = xaxis.valueFormatter

这就是setChart()函数中的所有其他行,只是将其保留在原处,希望它能为您提供帮助。

2020-07-07