隐藏LineChart数据集。 Swift IOS

问题描述 投票:-2回答:2

如何将折线图数据集设置为在加载时禁用

我正在使用图表框架(danielgindi /图表)。

我想拥有一个包含3种不同数据的lineChartView,可以使用按钮隐藏或显示它们。

例如被点击的button1将在lineChartView上显示/不可见,但其他2个仍在显示数据。

类ViewController:UIViewController {

@IBOutlet weak var chartView: LineChartView!

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!)
    default:
        break
    }
}

func setChart(xValues: [String], valuesLineChart: [[Double]], limitLines: [Double]) {

// chartView.descriptionText =“”chartView.noDataText =“您需要为图表提供数据。”

    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(x: valuesLineChart[0][i], y: Double(i)))
    }

    let set1 = LineChartDataSet(entries: 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(x: valuesLineChart[0][i], y: Double(i)))
    }

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

    let set1 = LineChartDataSet(entries: yVals1, label: nil)
    let set2 = LineChartDataSet(entries: 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(x: valuesLineChart[0][i], y: Double(i)))
    }

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

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

    let set1 = LineChartDataSet(entries: yVals1, label: nil)
    let set2 = LineChartDataSet(entries: yVals2, label: nil)
    let set3 = LineChartDataSet(entries: 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!)
    default:
        break
    }
   let chartData = LineChartData( dataSets: dataSets)
    chartView.data = chartData
}
ios swift charts hidden invisible
2个回答
0
投票

一个技巧是使用多个数据集来实现这一点。当您单击按钮时,只需刷新数据集即可。

尝试将空数据集添加到案例1和2。并使用@objc open func setLabelCount(_ count: Int, force: Bool)确保所有案例具有相同的计数。

希望这会有所帮助


0
投票

这是我的另一个样品。但我仍然无法解决。

@ IBOutlet弱变量lineChartView:LineChartView!

@IBOutlet weak var button1: UIButton!
@IBOutlet weak var button2: UIButton!
@IBOutlet weak var button3: UIButton!
var didTapButton1 = false
var didTapButton2 = false
var didTapButton3 = false




@IBAction func tapButton1(_ sender: Any) {
    if didTapButton1 {
        lineChartView.setLineChartData(xValues: months,
                                       labels: ["1"],
                                       dataSets: [unitsSold],
                                       colors: [UIColor.red])
        didTapButton1 = false

    }
    else {
        lineChartView.setLineChartData(xValues: months,
                                       labels: ["1"],
                                       dataSets: [unitsSold],
                                       colors: [UIColor.clear])
        didTapButton1 = true
    }
}


@IBAction func tapButton2(_ sender: Any) {
    if didTapButton2 {
        lineChartView.setLineChartData(xValues: months,
                                       labels: ["2"],
                                       dataSets: [unitsSold1],
                                       colors: [UIColor.green])
        didTapButton2 = false
    }else {
        let colors = [UIColor.red,UIColor.green]
        lineChartView.setLineChartData(xValues: months,
                                       labels: ["1","2"],
                                       dataSets: [unitsSold,unitsSold1],
                                       colors: colors)
        didTapButton2 = true
    }
}


@IBAction func tapButton3(_ sender: Any) {
}


@IBOutlet var lineSegment: UISegmentedControl!
var dataSetsArray: [LineChartDataSet] = []


let months = ["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23"]

let unitsSold =
    [34.0,61,31,34,52,13,44,12,31,23,61,32,61,31,34,52,13,44,12,31,23,61,32]

let unitsSold1 =
    [44.0,21,32,12,44,32,21,53,21,23,41,63,21,32,12,44,32,21,53,21,23,41,63]

let unitsSold2 =
    [12.0,2,41,3,63,24,31,23,12,64,31,21,2,41,3,63,24,31,23,12,64,31,21]


@IBAction func segmentValueChanged(_ sender: Any) {

    switch self.lineSegment.selectedSegmentIndex {
    case 0:
        let colors = [UIColor.red,UIColor.green,UIColor.blue]
        lineChartView.setLineChartData(xValues: months,
                                       labels: ["1","2","3"],
                                       dataSets: [unitsSold,unitsSold1,unitsSold2],
                                       colors: colors)

    case 1:
        lineChartView.setLineChartData(xValues: months,
                                       labels: ["1"],
                                       dataSets: [unitsSold],
                                       colors: [UIColor.red])

    case 2:
        lineChartView.setLineChartData(xValues: months,
                                       labels: ["2"],
                                       dataSets: [unitsSold1],
                                       colors: [UIColor.green])

    case 3:
        lineChartView.setLineChartData(xValues: months,
                                       labels: ["3"],
                                       dataSets: [unitsSold2],
                                       colors: [UIColor.blue])


    default:
        break
    }
}

}

扩展名LineChartView {func setLineChartData(xValues:[String],标签:[String],dataSets:[Array],颜色:[UIColor]){

    var dataSetsArray: [LineChartDataSet] = []
    let dataSetCount = self.lineData?.dataSets.count
    if dataSetCount != nil && dataSetCount! > 0 {
        self.data = nil
    }

    for i in 0..<dataSets.count {
        let yVals = dataSets[i]
        var dataEntries: [ChartDataEntry] = []

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

        let chartDataSet = LineChartDataSet(entries: dataEntries, label: labels[i])
        chartDataSet.drawHorizontalHighlightIndicatorEnabled = false
        chartDataSet.drawValuesEnabled = false
        chartDataSet.colors = [colors[i]]
        chartDataSet.drawCirclesEnabled = false

        dataSetsArray.append(chartDataSet)

    }

    let chartData = LineChartData(dataSets: dataSetsArray)
    self.data = chartData

    self.animate(xAxisDuration: 3.0,easingOption: .easeInExpo)

}

func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) {
}

}

© www.soinside.com 2019 - 2024. All rights reserved.