如何在Charts框架中的水平条上添加string标签(xAxis标签)

我正在使用图表框架绘制图表。 我需要在每个酒吧的左边添加一些string。 在我的代码总是有两个酒吧,一个是收入 ,一个是消费 。 我想把这些string显示在每个小节的旁边。

单杠

下面你可以看到我的代码:

let ys1 = [model.totalIncome, abs(model.totalExpense)] var yse1 = ys1.enumerated().map { x, y -> BarChartDataEntry in return BarChartDataEntry(x: Double(x), y: y) } let count = 2 let data = BarChartData() let ds1 = BarChartDataSet(values: yse1, label: "") ds1.colors = [UIColor.red, UIColor.blue] // Number formatting of Values ds1.valueFormatter = YAxisValueFormatter() ds1.valueFont = UIFont(fontType: .H6)! ds1.valueTextColor = UIColor.dark_text // Data set data.addDataSet(ds1) horizontalBarChartView.data = data // General setting horizontalBarChartView.xAxis.drawLabelsEnabled = false horizontalBarChartView.setScaleEnabled(false) // Grid horizontalBarChartView.xAxis.drawGridLinesEnabled = false horizontalBarChartView.leftAxis.gridLineDashLengths = [15.0, 15.0] horizontalBarChartView.leftAxis.gridColor = UIColor.palette_28 horizontalBarChartView.rightAxis.drawGridLinesEnabled = false // Disable number formatting of leftAxis and rightAxis horizontalBarChartView.leftAxis.enabled = false horizontalBarChartView.rightAxis.enabled = false horizontalBarChartView.xAxis.valueFormatter = IndexAxisValueFormatter(values: ["Income","Expense"]) horizontalBarChartView.xAxis.granularityEnabled = true horizontalBarChartView.xAxis.granularity = 1 // setViewPortOffsets let digitCount = Int(data.yMax).digitCount let leftOffcet: CGFloat = digitCount > 2 ? CGFloat((digitCount - 1) * 10) : 10.0 horizontalBarChartView.setViewPortOffsets(left: leftOffcet, top: 0, right: 0, bottom: 50) horizontalBarChartView.leftAxis.axisMinimum = 0 

而我的观点:

  lazy var horizontalBarChartView: HorizontalBarChartView = { let chartView = HorizontalBarChartView() chartView.contentMode = .scaleAspectFit chartView.drawBordersEnabled = false chartView.drawGridBackgroundEnabled = false chartView.gridBackgroundColor = UIColor.clear chartView.legend.enabled = false chartView.chartDescription = nil chartView.highlighter = nil chartView.clipsToBounds = true chartView.translatesAutoresizingMaskIntoConstraints = false return chartView }() 

我想下面的代码应该添加这些标签,但是,它不工作

  horizontalBarChartView.xAxis.valueFormatter = IndexAxisValueFormatter(values: ["Income","Expense"]) horizontalBarChartView.xAxis.granularityEnabled = true horizontalBarChartView.xAxis.granularity = 1 

更新

看橙色的矩形。 我需要这些标签。

在这里输入图像说明

图表框架是绘制图表的好工具。 你应该好好研究一下。 我在我们的项目中使用了一个旧代码(复制/粘贴),因此在我的图表中绘制xAxis标签时出现了一些问题。

只要评论下面的行:

  horizontalBarChartView.xAxis.drawLabelsEnabled = false 

当你创build你的BarChartDataSet你可以传递标签。

 let data = BarChartData() let ds1 = BarChartDataSet(values: yse1, label: "Income") ds1.colors = [UIColor.red, UIColor.blue] 

希望这可以帮助。

我正在使用这个扩展

 extension BarChartView { private class BarChartFormatter: NSObject, IAxisValueFormatter { var labels: [String] = [] func stringForValue(_ value: Double, axis: AxisBase?) -> String { return labels[Int(value)] } init(labels: [String]) { super.init() self.labels = labels } } func setBarChartData(xValues: [String], yValues: [Double], label: String) { var dataEntries: [BarChartDataEntry] = [] for i in 0..<yValues.count { let dataEntry = BarChartDataEntry(x: Double(i), y: yValues[i]) dataEntries.append(dataEntry) } let chartDataSet = BarChartDataSet(values: dataEntries, label: label) let chartData = BarChartData(dataSet: chartDataSet) let chartFormatter = BarChartFormatter(labels: xValues) let xAxis = XAxis() xAxis.valueFormatter = chartFormatter self.xAxis.valueFormatter = xAxis.valueFormatter self.data = chartData } } 

你可以像这样在代码中使用它

 chartView.setBarChartData(xValues: xEntries, yValues: yEntries, label: "Income") 

哪里,

 //You need to add values dynamically var yEntries: [Double] = [1000, 200, 500] var xEntries: [String] = ["Income1", "Income2", "Income3"] 

希望这个作品。

  self.ChartObj.xAxis.valueFormatter = DefaultAxisValueFormatter(block: {(index, _) in print(index) return YourArray.object(at: Int(index)) as! String }) self.ChartObj.xAxis.setLabelCount(YourArray.count, force: true) 

试试这个代码