簡體   English   中英

如何使用 Daniel Gindi 的圖表庫在同一軸上放置相同類型的圖表(即 LineChart)?

[英]How to have charts of the same type (ie LineChart) on the same axis using Daniel Gindi's chart library?

我有一個圖表,將在同一軸上顯示多個折線圖和散點圖。 它們都將具有相同的 x 軸。 我似乎不能有多個 lineCharts 在同一軸內。

我嘗試過實現 CombinedChartView。 我創建了一個函數,該函數接收相應數據集的數組。

    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

    }

我希望所有圖表都顯示在圖表上。 但是,只顯示最后聲明的 lineChart 和 ScatterChart,這意味着圖表上只有 rule7data 和 exsuppressedData。 圖表的其余部分不顯示。

而不是這樣做

    let rule1data = LineChartData()
    rule1data.addDataSet(rule1DataSet)

您可以將多個數據集添加到一個 LineChartData

所以你可以這樣做:

let allLineDatas = LineChartData(dataSets: [rule1DataSet, rule2DataSet,....])


combinedData.lineData = allLineDatas

其他人也一樣。

combinedData.scatterData = allScatterDatas

您可以下載他們的示例項目並在模擬器中運行,您會在那里找到各種示例,然后您可以找到需要集成的示例的代碼

基本上,您創建新的變量。 您創建所需圖表類型的數據集類型的數組。

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)

. . .

然后,將各個數據集附加到上面聲明的 DataSets 數組中,如下所示:

//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)

. . .

對 scatterChart 或您選擇的任何其他圖表也執行此操作。

最后,

// 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM