2017-05-26 138 views
2

我最近升级我的客户项目之一,从Swift2和iOS-图表2 Swift3和iOS,图表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)我如何删除gridlin e在图表的左侧重叠?

2)如何保持图表底部截断?

我已经尝试调整许多图表属性,我发现这里和其他网站上的每个帖子,但是,没有任何修复问题。任何帮助图表出现像旧版本的帮助都会得到我和我的客户的高度赞赏。

回答

1

我测试了一下,发现当有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

+0

可能需要更多缩放。请您将答案标记为接受if这个答案帮助你? – DevB2F