如何将折线图数据集设置为在加载时禁用
我正在使用图表框架(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
}
一个技巧是使用多个数据集来实现这一点。当您单击按钮时,只需刷新数据集即可。
尝试将空数据集添加到案例1和2。并使用@objc open func setLabelCount(_ count: Int, force: Bool)
确保所有案例具有相同的计数。
希望这会有所帮助
这是我的另一个样品。但我仍然无法解决。
@ 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) {
}
}