2016-04-07 6 views
0

Ich verwende die Charts Frameworks (Danielgindi/Charts).Liniendiagramm-Begrenzungslinien ausblenden. Swift 2

Ich habe ein Segment mit 1,2 & 3. Abhängig von der Auswahl sollte das Liniendiagramm die Anzahl der Zeilen innerhalb eines Liniendiagramms anzeigen. Ich habe eine switch-Anweisung, die abhängig von der Nummer innerhalb des Segments, dass diese Menge an Zeilen anzeigt. Z.B. In Fall1 wird 1 Zeile angezeigt, Fall 2, 2 Zeilen usw. werden angezeigt. & Dies funktioniert wie erwartet.

Wenn ich versuche, Grenzlinien innerhalb dieser switch-Anweisung hinzuzufügen und von einem höheren Fall zu einem niedrigeren z. 3 bis 2, die dritte Zeile verschwindet nicht & Zeile 1 und 2 scheinen Duplikate zu haben.

Gibt es trotzdem die Grenzwertlinien innerhalb der switch-Anweisung zu verstecken?

Ich habe den folgenden Code:

func setChart(xValues: [String], valuesLineChart: [[Double]], limitLines: [Double]) { 
    chartView.descriptionText = "" 
    chartView.noDataText = "You need to provide data for the chart." 

    print("valuesLineChart has \(valuesLineChart.count) lines") 

    var dataSets : [LineChartDataSet] = [LineChartDataSet]() 

    switch valuesLineChart.count { 

    case 1 : print("1 within switch") 

    var yVals1 : [ChartDataEntry] = [ChartDataEntry]() 
    for i in 0..<xValues.count { 
     yVals1.append(ChartDataEntry(value: valuesLineChart[0][i], xIndex: i)) 
    } 

    let set1 = LineChartDataSet(yVals: yVals1, label: nil) 
    dataSets.append(set1) 

    //limit lines 
    let limitSet1 = ChartLimitLine(limit: limitLines[0], label: "switch1, limit1") 
    chartView.rightAxis.addLimitLine(limitSet1) 

    case 2 :print("2 within switch") 

    var yVals1 : [ChartDataEntry] = [ChartDataEntry]() 
    for i in 0..<xValues.count { 
     yVals1.append(ChartDataEntry(value: valuesLineChart[0][i], xIndex: i)) 
    } 

    var yVals2 : [ChartDataEntry] = [ChartDataEntry]() 
    for i in 0..<xValues.count { 
     yVals2.append(ChartDataEntry(value: valuesLineChart[1][i], xIndex: i)) 
    } 

    let set1 = LineChartDataSet(yVals: yVals1, label: nil) 
    let set2 = LineChartDataSet(yVals: yVals2, label: nil) 

    dataSets.append(set1) 
    dataSets.append(set2) 

    //limit lines 
    let limitSet1 = ChartLimitLine(limit: limitLines[0], label: "") 
    let limitSet2 = ChartLimitLine(limit: limitLines[1], label: "") 

    chartView.rightAxis.addLimitLine(limitSet1) 
    chartView.rightAxis.addLimitLine(limitSet2) 


    case 3 :print("3 within switch") 

    var yVals1 : [ChartDataEntry] = [ChartDataEntry]() 
    for i in 0..<xValues.count { 
     yVals1.append(ChartDataEntry(value: valuesLineChart[0][i], xIndex: i)) 
    } 

    var yVals2 : [ChartDataEntry] = [ChartDataEntry]() 
    for i in 0..<xValues.count { 
     yVals2.append(ChartDataEntry(value: valuesLineChart[1][i], xIndex: i)) 
    } 

    var yVals3 : [ChartDataEntry] = [ChartDataEntry]() 
    for i in 0..<xValues.count { 
     yVals3.append(ChartDataEntry(value: valuesLineChart[2][i], xIndex: i)) 
    } 

    let set1 = LineChartDataSet(yVals: yVals1, label: nil) 
    let set2 = LineChartDataSet(yVals: yVals2, label: nil) 
    let set3 = LineChartDataSet(yVals: yVals3, label: nil) 

    dataSets.append(set1) 
    dataSets.append(set2) 
    dataSets.append(set3) 

    //limit lines 
    let limitSet1 = ChartLimitLine(limit: limitLines[0], label: "") 
    let limitSet2 = ChartLimitLine(limit: limitLines[1], label: "") 
    let limitSet3 = ChartLimitLine(limit: limitLines[2], label: "") 

    chartView.rightAxis.addLimitLine(limitSet1) 
    chartView.rightAxis.addLimitLine(limitSet2) 
    chartView.rightAxis.addLimitLine(limitSet3) 
    } 

    let data: CombinedChartData = CombinedChartData(xVals: xValues) 
    data.lineData = LineChartData(xVals: xValues, dataSets: dataSets) 
    chartView.data = data 
} 

Antwort

0

ich eine Lösung für mein Problem gefunden. Wenn das Segment eine andere Nummer auswählte, erinnerte ich mich an die setChart-Funktion, die Duplikationen von limitLines verursachte.

Um dieses Problem zu lösen, entfernte ich die Grenzwertlinien vor dem Abruf der setChart-Funktion;

var limitSet1 : ChartLimitLine? 
var limitSet2 : ChartLimitLine? 
var limitSet3 : ChartLimitLine? 
var limitLineArray : [Double] 

func removeLimitLines { 
    switch (limitLineArray.count) { 
      case 1: print("there was 1 limit line, need to remove this from chart view") 
      chartView.rightAxis.removeLimitLine(limitSet1!) 
      case 2: print("there was 2 limit line, need to remove this from chart view") 
      chartView.rightAxis.removeLimitLine(limitSet1!) 
      chartView.rightAxis.removeLimitLine(limitSet2!) 
      case 3: print("there was 3 limit line, need to remove this from chart view") 
      chartView.rightAxis.removeLimitLine(limitSet1!) 
      chartView.rightAxis.removeLimitLine(limitSet2!) 
      chartView.rightAxis.removeLimitLine(limitSet3!) 
    } 
} 

func setChart(xValues: [String], valuesLineChart: [[Double]], limitLines: [Double]) { 
chartView.descriptionText = "" 
chartView.noDataText = "You need to provide data for the chart." 

print("valuesLineChart has \(valuesLineChart.count) lines") 

var dataSets : [LineChartDataSet] = [LineChartDataSet]() 

switch valuesLineChart.count { 

case 1 : print("1 within switch") 

var yVals1 : [ChartDataEntry] = [ChartDataEntry]() 
for i in 0..<xValues.count { 
    yVals1.append(ChartDataEntry(value: valuesLineChart[0][i], xIndex: i)) 
} 

let set1 = LineChartDataSet(yVals: yVals1, label: nil) 
dataSets.append(set1) 

//limit lines 
limitSet1 = ChartLimitLine(limit: limitLines[0], label: "switch1, limit1") 
chartView.rightAxis.addLimitLine(limitSet1) 

case 2 :print("2 within switch") 

var yVals1 : [ChartDataEntry] = [ChartDataEntry]() 
for i in 0..<xValues.count { 
    yVals1.append(ChartDataEntry(value: valuesLineChart[0][i], xIndex: i)) 
} 

var yVals2 : [ChartDataEntry] = [ChartDataEntry]() 
for i in 0..<xValues.count { 
    yVals2.append(ChartDataEntry(value: valuesLineChart[1][i], xIndex: i)) 
} 

let set1 = LineChartDataSet(yVals: yVals1, label: nil) 
let set2 = LineChartDataSet(yVals: yVals2, label: nil) 

dataSets.append(set1) 
dataSets.append(set2) 

//limit lines 
limitSet1 = ChartLimitLine(limit: limitLines[0], label: "") 
limitSet2 = ChartLimitLine(limit: limitLines[1], label: "") 

chartView.rightAxis.addLimitLine(limitSet1) 
chartView.rightAxis.addLimitLine(limitSet2) 


case 3 :print("3 within switch") 

var yVals1 : [ChartDataEntry] = [ChartDataEntry]() 
for i in 0..<xValues.count { 
    yVals1.append(ChartDataEntry(value: valuesLineChart[0][i], xIndex: i)) 
} 

var yVals2 : [ChartDataEntry] = [ChartDataEntry]() 
for i in 0..<xValues.count { 
    yVals2.append(ChartDataEntry(value: valuesLineChart[1][i], xIndex: i)) 
} 

var yVals3 : [ChartDataEntry] = [ChartDataEntry]() 
for i in 0..<xValues.count { 
    yVals3.append(ChartDataEntry(value: valuesLineChart[2][i], xIndex: i)) 
} 

let set1 = LineChartDataSet(yVals: yVals1, label: nil) 
let set2 = LineChartDataSet(yVals: yVals2, label: nil) 
let set3 = LineChartDataSet(yVals: yVals3, label: nil) 

dataSets.append(set1) 
dataSets.append(set2) 
dataSets.append(set3) 

//limit lines 
limitSet1 = ChartLimitLine(limit: limitLines[0], label: "") 
limitSet2 = ChartLimitLine(limit: limitLines[1], label: "") 
limitSet3 = ChartLimitLine(limit: limitLines[2], label: "") 

chartView.rightAxis.addLimitLine(limitSet1) 
chartView.rightAxis.addLimitLine(limitSet2) 
chartView.rightAxis.addLimitLine(limitSet3) 
} 

let data: CombinedChartData = CombinedChartData(xVals: xValues) 
data.lineData = LineChartData(xVals: xValues, dataSets: dataSets) 
chartView.data = data 
} 

Nun rufe ich die removeLimitLines vor der setChart Funktion und es funktioniert wie erwartet.

EDIT:

Sie können auch anrufen einfach nur:

chartView.leftAxis.removeAllLimitLines()