水平条形图标签

时间:2017-05-26 16:19:54

标签: swift ios-charts

我最近将我的一个客户端项目从Swift2和iOS-charts 2升级到Swift3和iOS-charts 3。

经过几天的手动调整后,大部分代码都按预期运行,但是,我的水平条形图仍然存在问题。

用于显示为的图表:

enter image description here

图表现在显示为:

enter image description here

图表的核心代码:

func drawMarginChart() {
    let labels = marginObject!.getLabelsForChart()
    let values = marginObject!.getValuesForChart()

    var dataEntries = [ChartDataEntry]()

    for i in 0..<values.count {
        let entry = BarChartDataEntry(x: Double(i), y: values[i])
        dataEntries.append(entry)
    }

    let barChartDataSet = BarChartDataSet(values: dataEntries, label: "")
    barChartDataSet.drawValuesEnabled = false
    barChartDataSet.colors = ChartColorTemplates.joyful()

    let barChartData = BarChartData(dataSet: barChartDataSet)
    barChartMargins.data = barChartData
    barChartMargins.legend.enabled = false

    barChartMargins.xAxis.valueFormatter = IndexAxisValueFormatter(values: labels)
    barChartMargins.xAxis.granularityEnabled = true
    barChartMargins.xAxis.granularity = 1

    barChartMargins.animate(xAxisDuration: 3.0, yAxisDuration: 3.0, easingOption: .easeInOutBounce)
}

我希望找到的是:

1)如何为图表上的每个条形图显示标签

2)如何让图表自动调整大小以显示标签

如果可以解决这些其他问题,那就太棒了,但我们愿意在没有这些问题的情况下发货:

1)如何删除图表左侧的网格线重叠?

2)如何防止图表底部截断?

我已尝试调整我在此处和其他网站上发现的每个帖子的许多图表属性,但是,没有任何方法可以解决问题。任何使图表显示为旧版本的帮助都会得到我和我的客户的高度赞赏。

1 个答案:

答案 0 :(得分:2)

我测试了一下,并发现当有8个值和标签时一切正常。如果有9个或更多值和标签,则只显示一半标签。您可以使用以下方法设置屏幕的可见值数量:

 barChartMargins.setVisibleXRange(minXRange: 8.0, maxXRange: 8.0)

这意味着如果您的值大于maxXRange,则图表将可滚动。

通过使用此代码缩放,您将看到所有标签:

 barChartMargins.zoom(scaleX: 1.1, scaleY: 1.0, x: 0, y: 0)

通过向右和向左缩放缩放,您将看到所有标签在某些情况下出现,但不是全部(并非在您的情况下有10个标签)。但是,如果您首先将maxXRange设置为8并允许像我在示例中所做的那样滚动,则它会起作用。 enter image description here 这是我使用的完整代码(使用iPhone 5和6Plus测试),最后一行解决了截断问题:

 func drawMarginChart() {

    let values = [1000, 2000, 3000, 5000, 7000, 8000, 15000, 21000, 22000, 35000]
    let labels = ["Blue Yonder Airlines", "Aaron Fitz Electrical", "Central Communications", "Magnificent Office Images", "Breakthrough Telemarke", "Lawrence Telemarketing", "Vancouver Resort Hotels", "Mahler State University", "Astor Suites", "Plaza One"]



    var dataEntries = [ChartDataEntry]()

    for i in 0..<values.count {
        let entry = BarChartDataEntry(x: Double(i), y: Double(values[i]))

        dataEntries.append(entry)
    }

    let barChartDataSet = BarChartDataSet(values: dataEntries, label: "")
    barChartDataSet.drawValuesEnabled = false
    barChartDataSet.colors = ChartColorTemplates.joyful()

    let barChartData = BarChartData(dataSet: barChartDataSet)
    barChartMargins.data = barChartData
    barChartMargins.legend.enabled = false

    barChartMargins.xAxis.valueFormatter = IndexAxisValueFormatter(values: labels)
    barChartMargins.xAxis.granularityEnabled = true
    barChartMargins.xAxis.granularity = 1

    barChartMargins.animate(xAxisDuration: 3.0, yAxisDuration: 3.0, easingOption: .easeInOutBounce)

    barChartMargins.chartDescription?.text = ""


    barChartMargins.zoom(scaleX: 1.1, scaleY: 1.0, x: 0, y: 0)

    let rightAxis = barChartMargins.rightAxis
    rightAxis.drawGridLinesEnabled = false

    let leftAxis = barChartMargins.leftAxis
    leftAxis.drawGridLinesEnabled = false

    let xAxis = barChartMargins.xAxis
    xAxis.drawGridLinesEnabled = false
    barChartMargins.setVisibleXRange(minXRange: 8.0, maxXRange: 8.0)

    barChartMargins.setExtraOffsets (left: 0, top: 20.0, right:0.0, bottom: 20.0)



}

顺便说一下。我没有遇到标签在屏幕外的问题,但这可能与您的chartview的大小和约束有关,或者可能需要使用barChartMargins.zoom进行更多缩放