2016-04-28 64 views
0

我有一個組合圖表,使用線條和條形圖顯示yValues。 在某些情況下,線條和條形圖值會重疊,是否有辦法設置yValues標籤的垂直間距,使它們不在彼此的頂部(如圖像中的Jan到Oct)?在組合圖表中更改yValue標籤垂直間距(ios-charts)

Combined Chart Image

我使用圖表框架(原IOS-圖表),這裏是代碼來設置CombineChartView:

 let xValues = getXAxisLabelsForYear(year) 
     let runningTotalsByMonth = getRunningTotalByMonthForYear(year)! 
     var yValsBar = [BarChartDataEntry]() 
     var yValsLine = [ChartDataEntry]() 

     for i in 0 ..< xValues.count { 
      let yBarDataEntry = BarChartDataEntry(value: monthlyWinnings[i], xIndex: i) 
      yValsBar.append(yBarDataEntry) 
      let yLineDataEntry = ChartDataEntry(value: runningTotalsByMonth[i], xIndex: i) 
      yValsLine.append(yLineDataEntry) 
     } 
     let barChartDataSet = BarChartDataSet(yVals: yValsBar, label: "Monthly Winnings") 

     //setup bar chart 
     var barChartColors = [UIColor]() 
     for i in monthlyWinnings { 
      if i >= 0.0 { 
       barChartColors.append(myGreen) 
      } else { 
       barChartColors.append(UIColor.redColor()) 
      } 
     } 
     barChartDataSet.colors = barChartColors 
     barChartDataSet.barShadowColor = UIColor.clearColor() 
     barChartDataSet.valueFont = UIFont.systemFontOfSize(10.0) 

     //setup line chart 
     let lineChartDataSet = LineChartDataSet(yVals: yValsLine, label: "Cumulative Winnings") 
     var lineChartColors = [UIColor]() 
     for i in runningTotalsByMonth { 
      if i >= 0.0 { 
       lineChartColors.append(myGreen) 
      } else { 
       lineChartColors.append(UIColor.redColor()) 
      } 
     } 
     lineChartDataSet.colors = lineChartColors 
     lineChartDataSet.circleColors = [UIColor.blueColor()] 
     lineChartDataSet.drawCircleHoleEnabled = false 
     lineChartDataSet.circleRadius = 5 
     lineChartDataSet.lineWidth = 2 
     lineChartDataSet.valueFont = UIFont.systemFontOfSize(10.0) 

     //combine data 
     let data = CombinedChartData(xVals: xValues) 
     data.barData = BarChartData(xVals: xValues, dataSet: barChartDataSet) 
     data.lineData = LineChartData(xVals: xValues, dataSet: lineChartDataSet) 

     combinedChartView.data = data 

     //format the chart 
     combinedChartView.xAxis.setLabelsToSkip(0) 
     combinedChartView.xAxis.labelPosition = .Bottom 
     combinedChartView.descriptionText = "" 
     combinedChartView.rightAxis.drawLabelsEnabled = false 
     combinedChartView.rightAxis.drawGridLinesEnabled = false 
     combinedChartView.drawGridBackgroundEnabled = false 
     combinedChartView.leftAxis.drawZeroLineEnabled = true 
     combinedChartView.xAxis.drawGridLinesEnabled = false 
     combinedChartView.xAxis.wordWrapEnabled = true 
+0

您使用的自動佈局或手動設置框架? –

+0

如果你可以發佈一些關於你如何設置這些值的更多信息,那也會有所幫助..在一個視圖中,條形圖和標籤/線條點和標籤是否都是分開的? –

回答

0

可以使用

chartView.drawValueAboveBarEnabled = false 

,並設置一些顏色

barChartDataSet.valueTextColor = UIColor.someColor() 

看起來像這樣畫下欄的頂部條形圖值: Image

0

見上面我的意見,但這樣的事情可能工作如果你不使用自動佈局:

let labelA = UILabel() 
let labelB = UILabel() 

let padding: CGFloat = 5.0 // or whatever 

if CGRectIntersectsRect(labelA.frame, labelB.frame) { 
    // If the minY of labelA is <= labelB's that means labelA is ABOVE labelB 
    if labelA.frame.minY <= labelB.frame.minY { 
     // Set it above, with some (optional) padding 
     labelA.frame.origin.y = labelB.frame.origin.y - padding - labelA.frame.height 
    } else { 
     labelB.frame.origin.y = labelA.frame.origin.y - padding - labelB.frame.height 
    } 
} 

當然,你需要額外的代碼來檢查它是否過高等邊緣情況。

+0

對不起,我應該指定這與Charts框架(以前的ios-charts)有關。我相應地更新了我的問題,併發布了相關代碼以生成圖表。 – Flip

+0

Gotcha ..看起來像@keyv有一個很好的解決方案! –