2017-10-07 12 views
1

私は図表の描画にcharts frameworkを使用しています。私はすべてのバーの左にいくつかの弦を追加する必要があります。私のコードでは、常に2つのバーがあり、1つはの収入の1つです。費用。私はこれらの文字列をすべてのバーの横に表示したい。Chartsフレームワークの水平バーに文字列ラベル(xAxisラベル)を追加する方法

  let ys1 = [model.totalIncome, abs(model.totalExpense)] 

      var yse1 = ys1.enumerated().map { x, y -> BarChartDataEntry in 
      return BarChartDataEntry(x: Double(x), y: y) 
      } 

      let count = 2 
      let data = BarChartData() 
      let ds1 = BarChartDataSet(values: yse1, label: "") 
      ds1.colors = [UIColor.red, UIColor.blue] 

      // Number formatting of Values 
      ds1.valueFormatter = YAxisValueFormatter() 
      ds1.valueFont = UIFont(fontType: .H6)! 
      ds1.valueTextColor = UIColor.dark_text 

      // Data set 
      data.addDataSet(ds1) 
      horizontalBarChartView.data = data 

      // General setting 
      horizontalBarChartView.xAxis.drawLabelsEnabled = false 
      horizontalBarChartView.setScaleEnabled(false) 

      // Grid 
      horizontalBarChartView.xAxis.drawGridLinesEnabled = false 
      horizontalBarChartView.leftAxis.gridLineDashLengths = [15.0, 15.0] 
      horizontalBarChartView.leftAxis.gridColor = UIColor.palette_28 
      horizontalBarChartView.rightAxis.drawGridLinesEnabled = false 


      // Disable number formatting of leftAxis and rightAxis 
      horizontalBarChartView.leftAxis.enabled = false 
      horizontalBarChartView.rightAxis.enabled = false 

      horizontalBarChartView.xAxis.valueFormatter = 
      IndexAxisValueFormatter(values: ["Income","Expense"]) 
      horizontalBarChartView.xAxis.granularityEnabled = true 
      horizontalBarChartView.xAxis.granularity = 1 


      // setViewPortOffsets 
      let digitCount = Int(data.yMax).digitCount 
      let leftOffcet: CGFloat = digitCount > 2 ? CGFloat((digitCount - 1) * 10) : 10.0 
      horizontalBarChartView.setViewPortOffsets(left: leftOffcet, top: 0, right: 0, bottom: 50) 

      horizontalBarChartView.leftAxis.axisMinimum = 0 

そして、私のビュー:私はコードの下に推測

lazy var horizontalBarChartView: HorizontalBarChartView = { 
     let chartView = HorizontalBarChartView() 
     chartView.contentMode = .scaleAspectFit 
     chartView.drawBordersEnabled = false 
     chartView.drawGridBackgroundEnabled = false 
     chartView.gridBackgroundColor = UIColor.clear 
     chartView.legend.enabled = false 
     chartView.chartDescription = nil 
     chartView.highlighter = nil 
     chartView.clipsToBounds = true 
     chartView.translatesAutoresizingMaskIntoConstraints = false 
     return chartView 
    }() 

は、しかし、それは

に動作していない、これらのラベルを追加する必要がありますが、私のコードを見ることができます以下

Horizontal bar

horizontalBarChartView.xAxis.valueFormatter = IndexAxisValueFormatter(values: ["Income","Expense"]) 
    horizontalBarChartView.xAxis.granularityEnabled = true 
    horizontalBarChartView.xAxis.granularity = 1 

更新

オレンジ色の長方形を参照してください。私はこれらのラベルが必要です。

enter image description here

答えて

1

グラフフレームワークはチャートを描画するための優れたツールです。あなたはそれを完全に勉強するべきです。私はプロジェクト(コピー/貼り付け)で古いコードを使用していたので、グラフにxAxisラベルを描画する際にいくつかの問題が発生しました。

ジャストライン以下のコメント:

horizontalBarChartView.xAxis.drawLabelsEnabled = false 
0

あなたのBarChartDataSetラベルを渡すことができますを作成します。

let data = BarChartData() 
let ds1 = BarChartDataSet(values: yse1, label: "Income") 
ds1.colors = [UIColor.red, UIColor.blue] 

希望します。

+0

このコードを試してみてください、私の更新を参照してください。私はそれらのラベルが必要です。 –

1

私はあなたがこの

chartView.setBarChartData(xValues: xEntries, yValues: yEntries, label: "Income") 

ところ、

のようなコードでこれを使用することができ、この

extension BarChartView { 

    private class BarChartFormatter: NSObject, IAxisValueFormatter { 

     var labels: [String] = [] 

     func stringForValue(_ value: Double, axis: AxisBase?) -> String { 
      return labels[Int(value)] 
     } 

     init(labels: [String]) { 
      super.init() 
      self.labels = labels 
     } 
    } 

    func setBarChartData(xValues: [String], yValues: [Double], label: String) { 

     var dataEntries: [BarChartDataEntry] = [] 

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

     let chartDataSet = BarChartDataSet(values: dataEntries, label: label) 
     let chartData = BarChartData(dataSet: chartDataSet) 

     let chartFormatter = BarChartFormatter(labels: xValues) 
     let xAxis = XAxis() 
     xAxis.valueFormatter = chartFormatter 
     self.xAxis.valueFormatter = xAxis.valueFormatter 

     self.data = chartData 
    } 
} 

の拡張子を使用しています

//You need to add values dynamically 
var yEntries: [Double] = [1000, 200, 500] 
var xEntries: [String] = ["Income1", "Income2", "Income3"] 

これはうまくいきます。

0
self.ChartObj.xAxis.valueFormatter = DefaultAxisValueFormatter(block: {(index, _) in 
      print(index) 
      return YourArray.object(at: Int(index)) as! String 
     }) 
self.ChartObj.xAxis.setLabelCount(YourArray.count, force: true) 

関連する問題