首页 > 解决方案 > 如何在特定限制上将 yaxis 最小值绘制为不同的颜色?

问题描述

我正在使用iOS 图表绘制折线图,​​但无法绘制如下图所示的相同图表。我尝试通过设置leftAxis.axisMinimum = minValue但它也不起作用。如果给定值在一定限度内是最小值,它应该以红色显示,如附图所示。

func setLineChartWithDateFormat(graphPoints: [GraphPoints], linePosition: CGFloat, minValue: Double = 0, fillColor: UIColor = UIColor(red: 158.0/255.0, green: 188.0/255.0, blue: 136.0/255.0, alpha: 1)) {
        var referenceTimeInterval: TimeInterval = 0
        if let minTimeInterval = (graphPoints.map { ($0.getDateFromDateTime?.timeIntervalSince1970 ?? 0) }).min() {
            referenceTimeInterval = minTimeInterval
        }
        
        let formatter = DateFormatter()
                formatter.locale = Locale(identifier: "en_US_POSIX")
                formatter.dateFormat = "MMM dd"
        
        let xValuesNumberFormatter = ChartXAxisWithFormatter(referenceTimeInterval: referenceTimeInterval, dateFormatter: formatter)
        
        
        
        // Define chart entries
        var entries = [ChartDataEntry]()
        var xAxisValues = [CGFloat]()
        for object in graphPoints {
            let timeInterval = object.getDateFromDateTime?.timeIntervalSince1970 ?? 0
            let xValue = (timeInterval - referenceTimeInterval) / (3600 * 24)
            xAxisValues.append(CGFloat(xValue))
            let yValue = object.price ?? 0
            let entry = ChartDataEntry(x: xValue, y: yValue)
            entry.setValue(object.getDateFromDateTime, forKey: "data")
            entries.append(entry)
        }
      var minValue =  xAxisValues.min()
    
        let chartDataSet = LineChartDataSet(entries: entries, label: "BPM")
        chartDataSet.fillColor = fillColor
        /// Data object that encapsulates all data associated with a LineChart.
        let chartData = LineChartData()
        chartData.addDataSet(chartDataSet)
        chartData.setDrawValues(false)
        chartDataSet.drawCirclesEnabled = false
        chartDataSet.mode = .linear
        chartDataSet.colors = [.white]
        chartDataSet.fillFormatter = LineChartFillFormatter(value: minValue ?? 0)
        
//        let gradientColors = [gradientColor1.cgColor, gradientColor2.cgColor] as CFArray
//        let colorLocations: [CGFloat] = [0.7,0.0]
//        guard CGGradient.init(colorsSpace: CGColorSpaceCreateDeviceRGB(), colors: gradientColors, locations: colorLocations) != nil else {
//            print("Gradient Error")
//            return
//        }
        chartDataSet.drawFilledEnabled = true
        chartDataSet.fillAlpha = 1
        chartDataSet.setDrawHighlightIndicators(true)
        chartDataSet.drawHorizontalHighlightIndicatorEnabled = false
        // lineChart.leftAxis.axisMinimum = minValue
        ///x axis for chart view
        let xAxis: XAxis = self.lineChart.xAxis
        xAxis.labelPosition = .bottomInside
        xAxis.drawGridLinesEnabled = true //true, if want x Axis grid lines
        xAxis.valueFormatter = xValuesNumberFormatter
        xAxis.gridColor = gridColor
        xAxis.axisLineColor = gridColor
        xAxis.labelFont = BSFonts.getFontWithSize(fontType: .iBMPlexSansCond, fontSize: BSFontSize.small)
        xAxis.labelTextColor = axisTextColor
        xAxis.labelPosition = .bottom
        xAxis.spaceMin = 0.5
        xAxis.drawAxisLineEnabled = false
        xAxis.drawLimitLinesBehindDataEnabled = true
        xAxis.granularityEnabled = true
        // xAxis.granularity = 2
        xAxis.labelWidth = UIDevice.current.isIPad ? 30 : 20
        // xAxis.labelCount = 4
        
        ///right axis for chart view
        let rightAxis: YAxis = lineChart.rightAxis
        rightAxis.enabled = false
        
        ///y axis of chart view
        let leftAxis: YAxis = lineChart.leftAxis
        leftAxis.labelPosition = .insideChart
        leftAxis.drawGridLinesEnabled = true //true, if want y axis grid lines
        leftAxis.drawLabelsEnabled = true
        leftAxis.gridColor = gridColor
        leftAxis.axisLineColor = gridColor
        leftAxis.labelFont = BSFonts.getFontWithSize(fontType: .iBMPlexSansCond, fontSize: BSFontSize.small)
        leftAxis.labelTextColor = axisTextColor
        leftAxis.labelPosition = .outsideChart
        //leftAxis.spaceBottom = 0.3
        leftAxis.drawAxisLineEnabled = false
        leftAxis.labelCount = 4
        
        /// The data for the chart
        lineChart.data = chartData
        lineChart.doubleTapToZoomEnabled = false
        lineChart.data?.highlightEnabled = true
    }

标签: iosswiftgraphios-charts

解决方案


推荐阅读