水平条形图标签

kcl*_*air 5 swift ios-charts

我最近将我的一个客户项目从Swift2iOS-charts 2 升级到Swift3iOS-charts 3。

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

图表用于显示为:

在此输入图像描述

图表现在显示为:

在此输入图像描述

图表核心代码:

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)
}
Run Code Online (Sandbox Code Playgroud)

我希望了解的是:

1)如何让标签出现在图表上的每个条形上

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

如果这些其他问题能够得到解决,那就太棒了,但我们愿意在没有这些问题的情况下交付它:

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

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

我尝试过调整我在此处和其他网站上找到的每个帖子的许多图表属性,但是没有任何方法可以解决问题。任何使图表看起来像旧版本的帮助都会受到我和我的客户的极大赞赏。

Dev*_*B2F 4

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

 barChartMargins.setVisibleXRange(minXRange: 8.0, maxXRange: 8.0)
Run Code Online (Sandbox Code Playgroud)

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

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

 barChartMargins.zoom(scaleX: 1.1, scaleY: 1.0, x: 0, y: 0)
Run Code Online (Sandbox Code Playgroud)

通过向右和向左捏缩放,您将看到在某些情况下会出现所有标签,但不是全部(并且在您有 10 个标签的情况下不会出现)。但如果您首先将 maxXRange 设置为 8 并允许像我在示例中所做的那样滚动,它就会起作用。 在此输入图像描述 这是我使用的完整代码(用 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)



}
Run Code Online (Sandbox Code Playgroud)

顺便提一句。我没有遇到标签位于屏幕之外的问题,但这可能与图表视图的大小和约束有关,或者可能需要使用 barChartMargins.zoom 进行更多缩放