如何设置y轴最小值Swift 3

时间:2017-07-15 16:05:39

标签: swift ios-charts

我正在尝试使用以下代码在swift 3中设置最小y轴值300:

在viewDidLoad中:

    barChartView.noDataText = "No information available."
    barChartView.xAxis.labelPosition = .bothSided
    barChartView.animate(xAxisDuration: 1.5, yAxisDuration: 1.5)
    let ll = ChartLimitLine(limit: 300, label: "Target")
    barChartView.rightAxis.addLimitLine(ll)
    barChartView.chartDescription?.enabled = false
    barChartView.leftAxis.axisMinimum = 300;
    updateChartWithData(dataPoints: stringOfDate, values: totalNumber)




 func updateChartWithData(dataPoints: [String], values: [Int]) {
    var dataEntries: [BarChartDataEntry] = []
    for i in 0..<values.count {
        let dataEntry = BarChartDataEntry(x: Double(i), y: Double(values[i]))
        dataEntries.append(dataEntry)
    }
    let chartDataSet = BarChartDataSet(values: dataEntries, label: "Total Number")
    let chartData = BarChartData(dataSet: chartDataSet)
    barChartView.data = chartData
}

但是,当我使用此代码时,最小值不会设置为300,条形图中的条形图不再显示。

2 个答案:

答案 0 :(得分:1)

如果我设置

barChartView.leftAxis.axisMinimum = 0

我得到: enter image description here

然后,如果我设置:

barChartView.leftAxis.axisMinimum = 13

我得到: enter image description here

在第二个图表中,隐藏了所有值小于13的条形图。您没有在代码中显示数据点,但我认为它们必须都低于300,这就是隐藏它们的原因。

答案 1 :(得分:0)

我们无法固定条的最小 y 位置,当最小值非常低且最大值非常高时,我们也面临这个问题,然后条在最小值处的 y 位置下降,所以我找到了这个解决方案我们必须映射小范围内的值,例如最小值 1 和最大值 100000,然后映射范围 1 到 5 中的值。

范围映射公式:

// to convert in to the range of 1 to 5
private func convertRange(value:CGFloat) -> Int{
    let newStart:CGFloat = 1.0
    let newEnd:CGFloat   = 5.0
    let originalStart:CGFloat = CGFloat(viewModel.offerMin)
    let originalEnd:CGFloat   = CGFloat(viewModel.offerMax)
    let scale = (newEnd - newStart) / (originalEnd - originalStart);
    return Int((newStart + ((value - originalStart) * scale)));
}