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

Cam*_*mon 1 charts drawing ios swift 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
Run Code Online (Sandbox Code Playgroud)

这是我得到的:

条形图和折线图视图

Cam*_*mon 5

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

public enum DrawOrder: Int
{
    case Bar       // 0
    case Bubble    // 1
    case Line      // 2
    case Candle    // 3
    case Scatter   // 4
}
Run Code Online (Sandbox Code Playgroud)

您可以通过按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
Run Code Online (Sandbox Code Playgroud)

这是唯一需要进行的修改。要记住的一件事很重要,设置数据之前设置绘制顺序。如果您不这样做,则绘制顺序将与以前相同。以下是新结果:

在此处输入图片说明