我有一个使用Daniel Gindi iOS-charts构建的条形图。它代表一段时间内的历史数据。我遇到的问题是数据是从左到右绘制的(新数据 - >旧数据)。我需要将其绘制为从右到左(旧数据 - >新数据)。我知道我可以颠倒我将数据输入BarChartData
的顺序,但后来我的问题仍然是左对齐。它需要正确对齐。我找到了一个讨论here,讨论了反转x轴的问题以及如何解决它(目前不是框架的一个包含特征),但我无法弄清楚究竟需要什么完成。以下是我需要的例子:
这就是我的图表目前的样子:
这就是我需要的样子:
我的问题
有没有办法颠倒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))
}
}
答案 0 :(得分:1)
在chartLegend.swift
文件中有一个变量:
public var direction = ChartLegendDirection.LeftToRight
尝试在该文件中进行更改,它可能会解决您的问题。
答案 1 :(得分:0)
此库不支持直接从右对齐。
参考 - https://github.com/danielgindi/Charts/issues/738
你必须在库级别实现一些东西才能使它从左到右对齐。
编辑回答
在一些工作之后,我找到了解决方案,希望这会帮助你。
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.
}
}