I have a graph that will display multiple line charts and scatter charts on the same axis. They will all have identical x-axis. I cannot seem to have multiple lineCharts be inside the same axis.
I have tried implementing CombinedChartView. I have created a function that takes in arrays for the respective dataset.
func customiseChart (rule1x: [Double], rule1y: [Double], rule2x: [Double], rule2y: [Double], rule3x: [Double], rule3y: [Double], rule4x: [Double], rule4y: [Double], rule5x: [Double], rule5y: [Double], rule6x: [Double], rule6y: [Double], rule7x: [Double], rule7y: [Double], suppressedSparksX: [Double], suppressedSparksY: [Double], exsuppressedSparksX: [Double], exsuppressedSparksY: [Double], CombinedChartView: CombinedChartView, labelRule1: String, labelRule2: String, labelRule3: String, labelRule4: String, labelRule5: String, labelRule6: String, labelRule7: String, labelSuppressed: String, labelExsuppressed: String) {
//1) set ChartDataEntry for all the graphs
var rule1ChartEntries: [ChartDataEntry] = []
for i in 0..<rule1y.count {
let entries = ChartDataEntry(x: rule1x[i], y: rule1y[i])
rule1ChartEntries.append(entries)
}
. . .
var rule7ChartEntries: [ChartDataEntry] = []
for i in 0..<rule7y.count {
let entries = ChartDataEntry(x: rule7x[i], y: rule7y[i])
rule7ChartEntries.append(entries)
}
var suppressedScatterChartEntries: [ChartDataEntry] = []
for i in 0..<suppressedSparksY.count {
let entries = ChartDataEntry(x: suppressedSparksX[i], y: suppressedSparksY[i])
suppressedScatterChartEntries.append(entries)
}
var exsuppressedScatterChartEntries: [ChartDataEntry] = []
for i in 0..<exsuppressedSparksY.count {
let entries = ChartDataEntry(x: exsuppressedSparksX[i], y: exsuppressedSparksY[i])
exsuppressedScatterChartEntries.append(entries)
}
//2) set ChartDataSet for all the charts
let rule1DataSet = LineChartDataSet(entries: rule1ChartEntries, label: labelRule1)
rule1DataSet.colors = [NSUIColor.black]
let rule1data = LineChartData()
rule1data.addDataSet(rule1DataSet)
rule1DataSet.drawCirclesEnabled = false
rule1DataSet.drawValuesEnabled = false
let rule2DataSet = LineChartDataSet(entries: rule2ChartEntries, label: labelRule2)
rule2DataSet.colors = [NSUIColor.darkGray]
let rule2data = LineChartData()
rule2data.addDataSet(rule2DataSet)
rule2DataSet.drawCirclesEnabled = false
rule2DataSet.drawValuesEnabled = false
. . .
let rule7DataSet = LineChartDataSet(entries: rule7ChartEntries, label: labelRule7)
rule7DataSet.colors = [NSUIColor.yellow]
let rule7data = LineChartData()
rule7data.addDataSet(rule7DataSet)
rule7DataSet.drawCirclesEnabled = false
rule7DataSet.drawValuesEnabled = false
let suppressedSparkDataSet = ScatterChartDataSet(entries: suppressedScatterChartEntries, label: labelSuppressed)
suppressedSparkDataSet.colors = [NSUIColor.red]
let suppressedData = ScatterChartData()
suppressedData.addDataSet(suppressedSparkDataSet)
let exsuppressedSparkDataSet = ScatterChartDataSet(entries: exsuppressedScatterChartEntries, label: labelExsuppressed)
exsuppressedSparkDataSet.colors = [NSUIColor.blue]
let exsuppressedData = ScatterChartData()
exsuppressedData.addDataSet(exsuppressedSparkDataSet)
// 3) set combinedData
let combinedData = CombinedChartData()
combinedData.lineData = rule1data
combinedData.lineData = rule2data
combinedData.lineData = rule3data
combinedData.lineData = rule4data
combinedData.lineData = rule5data
combinedData.lineData = rule6data
combinedData.lineData = rule7data
combinedData.scatterData = suppressedData
combinedData.scatterData = exsuppressedData
//4) assign all the data into the combined chart
CombinedChartView.data = combinedData
}
I want all the graphs to be displayed on the chart. However, only the last declared lineChart and ScatterChart are displayed, meaning only rule7data and exsuppressedData are on the chart. The rest of the graph isn't displayed.
Basically, you create new vars. You create Arrays of the type of the dataset of the type of chart you want.
var allLineChartDataSets: [LineChartDataSet] = [LineChartDataSet]()
var allScatterDataSets: [ScatterChartDataSet] = [ScatterChartDataSet]()
//1) set ChartDataEntry for all the graphs
var rule1ChartEntries: [ChartDataEntry] = []
for i in 0..<rule1y.count {
let entries = ChartDataEntry(x: rule1x[i], y: rule1y[i])
rule1ChartEntries.append(entries)
. . .
Then, you append your individual data sets into the DataSets arrays declared above like this:
//2) set ChartDataSet for all the charts
let rule1DataSet = LineChartDataSet(entries: rule1ChartEntries, label: labelRule1)
rule1DataSet.colors = [NSUIColor.black]
let rule1data = LineChartData()
rule1data.addDataSet(rule1DataSet)
rule1DataSet.drawCirclesEnabled = false
rule1DataSet.drawValuesEnabled = false
allLineChartDataSets.append(rule1DataSet)
. . .
Do this for the scatterChart as well, or any other chart of your choice.
Lastly,
// 3) set combinedData
let lineChartDataSets = LineChartData(dataSets: allLineChartDataSets)
let scatterChartDataSets = ScatterChartData(dataSets: allScatterDataSets)
let combinedData = CombinedChartData()
combinedData.lineData = lineChartDataSets
combinedData.scatterData = scatterChartDataSets
//4) assign all the data into the combined chart
CombinedChartView.data = combinedData