iOS图表反转X轴方向

时间:2016-07-20 07:19:35

标签: ios swift charts ios-charts

我有一个使用Daniel Gindi iOS-charts构建的条形图。它代表一段时间内的历史数据。我遇到的问题是数据是从左到右绘制的(新数据 - >旧数据)。我需要将其绘制为从右到左(旧数据 - >新数据)。我知道我可以颠倒我将数据输入BarChartData的顺序,但后来我的问题仍然是左对齐。它需要正确对齐。我找到了一个讨论here,讨论了反转x轴的问题以及如何解决它(目前不是框架的一个包含特征),但我无法弄清楚究竟需要什么完成。以下是我需要的例子:

这就是我的图表目前的样子:

enter image description here

这就是我需要的样子:

enter image description here

我的问题

有没有办法颠倒x轴?

有没有办法正确对齐图表?

以下是我的一些代码并尝试解决此问题:

class ViewController: UIViewController {

    @IBOutlet weak var barChartView: BarChartView!

    //...

    func plotChart() {

        // Create history data
        //...

        barChartView.data = chartData  // 'chartData' is the BarChartData() containing all of the history information

        // No efect
        barChartView.legend.direction = .RightToLeft

        // Chart breaks
        barChartView.leftAxis.axisMinValue = 30
        barChartView.leftAxis.axisMaxValue = 0

        // Breaks the ability to zoom
        barChartView.setVisibleXRangeMinimum(CGFloat(40))
        barChartView.setVisibleXRangeMaximum(CGFloat(1))

    }

}

2 个答案:

答案 0 :(得分:1)

chartLegend.swift文件中有一个变量:

public var direction = ChartLegendDirection.LeftToRight

尝试在该文件中进行更改,它可能会解决您的问题。

答案 1 :(得分:0)

此库不支持直接从右对齐。

参考 - https://github.com/danielgindi/Charts/issues/738

你必须在库级别实现一些东西才能使它从左到右对齐。

编辑回答

在一些工作之后,我找到了解决方案,希望这会帮助你。

Download sample code

import UIKit

class ViewController: UIViewController {


  @IBOutlet weak var barChartView: BarChartView!

        override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        let months = ["7/23/2016", "7/22/2016", "7/21/2016", "7/20/2016", "7/19/2016", "7/18/2016", "7/17/2016"]
        let unitsSold = [0.0, 0.0, 0.0, 0.0, 20.0, 50.0, 30.0]

        setChart(months, values: unitsSold)

    }


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

        var dataEntries: [BarChartDataEntry] = []

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

        let chartDataSet = BarChartDataSet(yVals: dataEntries, label: "")
        let chartData = BarChartData(xVals: dataPoints, dataSet: chartDataSet)
        barChartView.data = chartData

        barChartView.leftAxis.enabled = false
        barChartView.descriptionText = ""
        barChartView.xAxis.labelPosition = .Bottom

    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

enter image description here