2016-05-26 14 views
0

Ich verwende das Charts-Framework von Danielgindi, um dem Benutzer Daten zu präsentieren. Ich möchte zwei Diagramme übereinander anzeigen, die CombinedChartView verwenden. Die beiden Diagramme sind BarChartDataSet und LineChartDataSet. Ich kann beide Datensätze erfolgreich anzeigen, jedoch kann ich die Zeichnungsreihenfolge nicht steuern. Die Leiste BarChartDataSet wird immer hinter der LineChartDataSet gezeichnet. Ich möchte, dass diese Reihenfolge umgekehrt wird, und habe die LineChartDataSet in der Rückseite (einschließlich aller Füllungen, die ich darauf anwende).Zeichnungsreihenfolge für kombinierte Charts in iOS-Charts ändern

Meine Frage

Wie kann ich die Zeichnungsreihenfolge für CombinedChartView ändern Sie die Liniendiagramme in den Rücken und nicht vorne zu machen?

Hier ist mein Code:

// barDataEntries and lineDataEntries are generated in a different section and are not relevant to this question. Any data will do. 
// barDataEntries is of type [BarChartDataEntry]() 
// lineDataEntries is of type [ChartDataEntry]() 
let barChartSet = BarChartDataSet(yVals: barDataEntries, label: "The Bars") 
let lineChartSet = LineChartDataSet(yVals: lineDataEntries, label: "The Line") 
barChartSet.barShadowColor = UIColor(red: 1, green: 0, blue: 0, alpha: 0) // If alpha is > 0, then grey bars will appear. 

// Cosmetic changes for the line chart 
lineChartSet.mode = .CubicBezier 
lineChartSet.lineWidth = 5.0 
lineChartSet.drawCirclesEnabled = false 
lineChartSet.drawFilledEnabled = true 
lineChartSet.colors = [UIColor(red: 0, green: 0, blue: 1, alpha: 0.0)] 
lineChartSet.fillColor = UIColor(red: 1, green: 0, blue: 0, alpha: 1.0) 
lineChartSet.fillAlpha = 0.8 

// Organizing data for statsChartViewController 
let data = CombinedChartData(xVals: xAxis) 
data.lineData = LineChartData(xVals: xAxis, dataSets: [lineChartSet]) 
data.barData = BarChartData(xVals: xAxis, dataSets: [barChartSet]) 

// statsChartViewController is of type CombinedChartView 
statsChartViewController.data = data 
statsChartViewController.leftAxis.axisMinValue = 0 

Hier ist, was ich erhalte:

Bar and line chart view

+0

Können Sie zeigen, wie Sie die Charts zu Ihrem Finale UIView Hinzufügen sind? – AnthonyR

+0

Das Diagramm (technisch gesehen nur eines) wird in einem Storyboard als 'View' definiert, das auf die Klasse 'CombinedChartView' gesetzt wird. In 'ViewController' (enthält den oben erwähnten Code) ist die' View' aus dem Storyboard mit einem IBOutlet '@IBOutlet verbunden. Weak var statsChartViewController: CombinedChartView!' Das 'BarChartDataSet' und 'LineChartDataSet' sind nicht einzeln platziert das Storyboard; nur 'CombinedChartView' ist. – Camon

Antwort

2

Nach einem Blick obwohl die source code, ich habe eine Lösung gefunden, die Sie die Zeichnungsreihenfolge ändern können . Die Klasse CombinedChartView hat eine öffentliche ENUM, die für die Zeichnungsreihenfolge verantwortlich ist:

public enum DrawOrder: Int 
{ 
    case Bar  // 0 
    case Bubble // 1 
    case Line  // 2 
    case Candle // 3 
    case Scatter // 4 
} 

Sie können, indem eine Reihe von Ints für drawOrder in der gewünschten Reihenfolge die Objekte gezeichnet werden soll die Zeichnungsreihenfolge ändern. Im Beispiel unten (aus dem obigen Code genommen), werden die Stäbe vor den Linien:

// 2 is the line and 0 is the bar. 2 is drawn first, then 0 follows. 
statsChartViewController.drawOrder = [2, 0] 
statsChartViewController.data = data 

Dies ist die einzige Änderung, die vorgenommen werden muss. Eine Sache, die Sie nicht vergessen sollten, ist die Zeichnungsreihenfolge vor festzulegen. Wenn Sie dies nicht tun, bleibt die Zeichenreihenfolge unverändert. Hier sind die neuen Ergebnisse:

enter image description here