2016-04-07 84 views
0

私はChartsフレームワーク(danielgindi/Charts)を使用しています。線グラフの線を非表示にします。 Swift 2

私はセグメントが1,2 &と表示されています。選択によっては、折れ線グラフ内に折れ線グラフが表示されます。 私はswitchステートメントを持っています。そのステートメントは、その行の量を表示するセグメント内で提供されている番号に依存します。例えば。 case1内に1行が表示され、case2,2行などが表示されます。&これは期待どおりに動作します。

このswitch文内にリミットラインを追加し、大文字から小文字に切り替えると、 3〜2、3行目は消えません& 1行目と2行目が重複しているようです。

switch文内に制限線を隠してしまったことはありますか?

私は、次のコードを持っている:私は私の問題への解決策を見つけた

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 
} 

答えて

0

を。セグメントが別の番号を選択していたとき、私はsetChart関数を呼び出して、limitLinesの重複を引き起こしていました。

この問題を解決するために、私はsetChart関数を呼び出す前に限界線を削除しました。

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 
} 

ここで、setChart関数の前にremoveLimitLinesを呼び出して、期待どおりに動作します。

EDIT:

あなたはまた、単に呼び出すことができます。

chartView.leftAxis.removeAllLimitLines() 
関連する問題