2017-04-05 2 views
1

선형 차트의 데이터 포인트 레이블에 iOS 차트/차트 라이브러리를 사용하여 실제 번호 대신 맞춤 문자열을 표시하려고합니다. 내 x 및 y 축 레이블을 포맷하는 데 사용한 IAxisFormatter와 같은 것이 있는지 알고 싶습니다.iOS 차트에서 데이터 포인트 라벨을 맞춤 설정하는 방법은 무엇입니까?

내가 스위프트에서 정확히 어떻게하는지 누가 아는 지 궁금한가요? 온라인에서 예제를 찾을 수없는 것 같습니다. 감사!

답변

4

IValueFormatter 프로토콜을 ViewController에 추가하고 stringForValue(_:entry:dataSetIndex:viewPortHandler:) 방법 (1)을 구현해야합니다.

그런 다음 차트 데이터 세트 (2)의 ValueFormatter 대리인으로 ViewController를 설정하십시오. 제 경우 내 데이터 집합 Y의 값을 갖고있는

import UIKit 
import Charts 

class ViewController: UIViewController, IValueFormatter { 

    @IBOutlet weak var lineChartView: LineChartView! 

    // Some data 
    let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] 
    let unitsSold = [20.0, 4.0, 3.0, 6.0, 12.0, 16.0, 4.0, 18.0, 2.0, 4.0, 5.0, 4.0] 

    // (1) Implementation the delegate method for changing data point labels. 
    func stringForValue(_ value: Double, 
         entry: ChartDataEntry, 
         dataSetIndex: Int, 
         implement delegate methodviewPortHandler: ViewPortHandler?) -> String{ 

     return "My cool label " + String(value) 
    } 

    func setChart(dataPoints: [String], values: [Double]){ 
     var dataEntries: [ChartDataEntry] = [] 

     // Prepare data for chart 
     for i in 0..<dataPoints.count { 
      let dataEntry = ChartDataEntry(x: Double(i), y: values[i]) 
      dataEntries.append(dataEntry) 
     } 

     let lineChartDataSet = LineChartDataSet(values: dataEntries, label: "Units Sold") 
     let lineChartData = LineChartData(dataSets: [lineChartDataSet]) 

     // (2) Set delegate for formatting datapoint labels 
     lineChartData.dataSets[0].valueFormatter = self 

     lineChartView.data = lineChartData 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     setChart(dataPoints: months, values: unitsSold) 
    } 
} 
+0

그래 나는 것과 유사한 방법을 사용하여 값 내 축 레이블을 가져 오지. 내 질문에 내가 분명하지 않았을 수도있다. 가능하다면 데이터 포인트에서 실제 라벨을 수정하는 방법을 찾으려고합니다. 귀하의 답변 주셔서 감사합니다! – holycamolie

+1

@ holycamolie, 알겠습니다. 나는 내 대답을 바꾸었다. stringForValue (_ : entry : dataSetIndex : viewPortHandler :) 메소드로 IValueFormatter 프로토콜을 구현해야합니다. 차트 데이터 세트의 valueFormatter 대리자로 설정합니다. – AlexSmet

0

는 X 인덱스

이다

enter image description here

// this shows date string instead of index 
let dates = ["11/01", "11/02", "11/03", "11/04"...etcs] 
chartView.xAxis.valueFormatter = IndexAxisValueFormatter(values:months) 

세트 축의 후 enter image description here

+0

답변에 몇 가지 문맥을 추가하십시오. 코드 전용 답변은 SO에서 "고품질 게시물"로 간주되지 않습니다. 왜 그리고 어떻게 이것이 문제를 해결하는지에 관해서 1-2 문장을 쓸 시간을 가져라. –

+0

내가 너무 많은 코드를 넣으면 대답이 복잡해질 것 같다. 그래서 저는 여기서 대답을 간단하게 유지하는 것이 더 간단하다고 생각합니다. –

+0

코드가 아니라 컨텍스트를 추가하십시오. 단어로 코드 설명하기 –