我绘制了未知数量的系列。为了说明起见,假设有3个。 a
,b
和c
。
[这导致第一个系列a
被“隐藏”在其他系列之后。当每种颜色都分配了不同的颜色时,这一点最为明显。我可以按相反的顺序绘制它们(从c
开始),但图例也将相反。
是否有办法指定a
应该在b
之上,而b
应该在c
之上?
我不确定您使用的是什么图表。但是例如对于LineChartView
,您可以将自定义渲染器定义为LineChartRenderer
类的后代,并覆盖某些功能,例如drawData
。实际上,您可以仅将此函数复制到您的类中,而仅更改数据集的绘制顺序。
class MyCustomRenderer: LineChartRenderer {
// I define my custom initializer for convenience
init(for chart: LineChartView) {
super.init(dataProvider: chart, animator: chart.chartAnimator, viewPortHandler: chart.viewPortHandler)
}
init(view: LineChartView) {
super.init(dataProvider: view, animator: view.chartAnimator, viewPortHandler: view.viewPortHandler)
}
override func drawData(context: CGContext)
{
guard let lineData = dataProvider?.lineData else { return }
// Here you can change the drawing order !
for i in 0 ..< lineData.dataSetCount
{
guard let set = lineData.getDataSetByIndex(i) else { continue }
if set.isVisible
{
if !(set is ILineChartDataSet)
{
fatalError("Datasets for LineChartRenderer must conform to ILineChartDataSet")
}
drawDataSet(context: context, dataSet: set as! ILineChartDataSet)
}
}
}
}
然后使用renderer
属性为图表渲染设置。
myLineChartView.renderer = MyCustomRenderer(for: myLineChartView)