Мой способ - использовать заполненные линейные графики для цветов фона. Вам необходимо добавить два дополнительных набора данных, один для красной области и другой для зеленой области. Кроме того, вам нужно использовать пользовательский FillFormatter
для заполнения зеленой области сверху до линии графика.
В этом примере я определяю addFillingArea
и используйте его для добавления двух дополнительных наборов данных.
override func viewDidLoad() {
super.viewDidLoad()
// ...
let chartData = LineChartData()
addFillingArea(to: chartData, withColor: .red, xFirstValue: 0, xLastValue: 11, yValue: 6)
addFillingArea(to: chartData, withColor: .green, xFirstValue: 0, xLastValue: 11, yValue: 12, fillFormatter: TopToLineFillFormatter())
// add your data to chartData here
lineChartView.data = chartData
// ...
}
func addFillingArea(to chartData: ChartData, withColor color: UIColor, xFirstValue: Double, xLastValue: Double, yValue: Double, fillFormatter: IFillFormatter? = nil) {
let dataEntries = [
ChartDataEntry(x: xFirstValue, y: yValue),
ChartDataEntry(x: xLastValue, y: yValue)
]
let chartDataSet = LineChartDataSet(values: dataEntries, label: nil)
chartDataSet.setColor(.clear)
chartDataSet.drawValuesEnabled = false
chartDataSet.drawCirclesEnabled = false
chartDataSet.drawFilledEnabled = true
chartDataSet.fillAlpha = 0.5
chartDataSet.fill = Fill(CGColor: color.cgColor)
chartDataSet.fillFormatter = fillFormatter
chartData.addDataSet(chartDataSet)
}
class TopToLineFillFormatter: NSObject, IFillFormatter {
func getFillLinePosition(dataSet: ILineChartDataSet, dataProvider: LineChartDataProvider) -> CGFloat {
var fillMin: CGFloat = 0.0
fillMin = CGFloat( dataProvider.chartYMax )
return fillMin
}
}