123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- //
- // IHLineChartModel.swift
- // Inhealth
- //
- // Created by weclouds on 2019/12/16.
- // Copyright © 2019 weclouds. All rights reserved.
- //
- import UIKit
- import Charts
- struct LineChartRawData {
- var yData:[Double]!
- init(yData:[Double]) {
- self.yData = yData
- }
- }
- struct YRawData {
- var yData:[Double]
-
- }
- struct LineChartRawDataWithLabel {
- var data:LineChartRawData
- }
- class IHLineChartModel: NSObject {
- static var share = IHLineChartModel()
-
- fileprivate func getLineDataSet(_ rawData:LineChartRawData) -> LineChartDataSet? {
- var yChartVals = [ChartDataEntry]()
- for (index, val) in rawData.yData.enumerated() {
- yChartVals.append(ChartDataEntry(x: Double(index), y: val))
- }
-
- var lineDataSet:LineChartDataSet? = nil
- lineDataSet = LineChartDataSet(entries: yChartVals)
- configDataSet(lineDataSet!)
-
- lineDataSet?.setColor(UIColor(hexString: "#573F95")!)
- lineDataSet?.circleColors = [.clear]
- return lineDataSet
- }
-
-
- fileprivate func configDataSet(_ lineDataSet :LineChartDataSet) {
- lineDataSet.drawIconsEnabled = false
- lineDataSet.lineWidth = 1.5
- lineDataSet.circleRadius = 3
- lineDataSet.drawCircleHoleEnabled = true
- lineDataSet.circleHoleRadius = 1.5
- lineDataSet.circleHoleColor = .clear
- lineDataSet.valueFont = .systemFont(ofSize: 9)
- lineDataSet.formLineDashLengths = [5, 2.5]
- lineDataSet.formLineWidth = 1.5
- lineDataSet.formSize = 15
- lineDataSet.resetCircleColors(0) //删除第一个点
- lineDataSet.drawValuesEnabled = false
- lineDataSet.drawFilledEnabled = false
- lineDataSet.mode = .cubicBezier
-
-
- lineDataSet.highlightEnabled = true //不启用十字线
- lineDataSet.highlightColor = UIColor.clear
- // lineDataSet.highlightLineWidth = 2
- let valueFormatter = NumberFormatter()
- valueFormatter.numberStyle = .decimal
- valueFormatter.maximumFractionDigits = 3
- lineDataSet.drawFilledEnabled = false
- }
- fileprivate func gLineChartSetData(_ chartView:LineChartView, xVals:[String], rawDatas:[LineChartRawDataWithLabel]) {
-
- var dataSets = [LineChartDataSet]()
- for i in 0..<rawDatas.count {
- let rawData = rawDatas[i]
- let set = getLineDataSet(rawData.data)
- if let set = set {
- dataSets.append(set)
- }
- }
- let data = LineChartData(dataSets: dataSets)
-
- chartView.data = data
-
- chartView.xAxis.valueFormatter = IndexAxisValueFormatter(values: xVals)
-
- // let marker = BalloonMarker(color: .clear,
- // font: .systemFont(ofSize: 12),
- // textColor: .black,
- // insets: UIEdgeInsets(top: 8, left: 8, bottom: 20, right: 8))
- let marker = XYMarkerView(color: UIColor(hexString: "#573F95")!, font: .systemFont(ofSize: 12), textColor: .white, insets: UIEdgeInsets(top: 5, left: 5, bottom: 5, right: 5), xAxisValueFormatter: IndexAxisValueFormatter(values: xVals))
- marker.chartView = chartView
- marker.minimumSize = CGSize(width: 80, height: 20)
- chartView.marker = marker
-
-
- // chartView.xAxis.labelCount = xVals.count
- chartView.xAxis.granularity = 1.0
- // chartView.xAxis.axisMinimum = 0
- // chartView.xAxis.axisMaximum = Double(xVals.count - 1)
- // chartView.xAxis.forceLabelsEnabled = true
- // chartView.xAxis.granularityEnabled = true
- }
-
- fileprivate func gChangeToYLineData(_ rawDatas:[YRawData]) -> [LineChartRawDataWithLabel] {
- var yLineDatas = [LineChartRawDataWithLabel]()
- var index:Int = 0
- for rawData in rawDatas {
- let yLineData = LineChartRawDataWithLabel(data: LineChartRawData(yData: rawData.yData))
- yLineDatas.append(yLineData)
- index += 1
- }
- return yLineDatas
- }
- open func gRealChartSetData(_ chartView:LineChartView, xVals:[String], rawDatas:[YRawData]) {
- let yLineDatas = gChangeToYLineData(rawDatas)
- gLineChartSetData(chartView, xVals: xVals, rawDatas: yLineDatas)
- }
- }
|