在iOS图表中更改组合图表的绘图顺序

时间:2016-05-26 23:09:58

标签: ios swift charts drawing ios-charts

我使用Danielgindi中的图表框架向用户显示数据。我想要做的是使用CombinedChartView在彼此之上显示两个图表。这两个图表是BarChartDataSetLineChartDataSet。我可以成功显示两组数据,但我似乎无法控制绘图顺序。栏BarChartDataSet始终位于LineChartDataSet后面。我希望这个顺序可以颠倒,后面有LineChartDataSet(包括我应用的任何填充)。

我的问题

如何更改CombinedChartView的绘制顺序,使折线图位于后面而不是前面?

这是我的代码:

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

这是我得到的:

Bar and line chart view

1 个答案:

答案 0 :(得分:4)

在查看source code之后,我找到了一个允许您更改绘制顺序的解决方案。类CombinedChartView有一个公共枚举,负责绘制顺序:

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

您可以按照希望绘制对象的顺序为drawOrder设置Ints数组来更改绘制顺序。在下面的示例中(取自上面的代码),条形图将位于行的前面:

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

这是唯一需要进行的修改。有一点需要记住,在设置数据之前设置绘图顺序。如果你不这样做,抽奖顺序将保持不变。以下是新结果:

enter image description here