ChartView icon indicating copy to clipboard operation
ChartView copied to clipboard

V2 Y axis scale

Open bcbeta opened this issue 5 years ago • 0 comments

v2 ticket

Currently I am having issues with very flat Y axis scales-

89697107-e765d400-d8d7-11ea-9cd7-2bbe3793f625

Based on #113, I've replaced

extension CGPoint {
     static func getStep(frame: CGRect, data: [Double]) -> CGPoint {
      let padding: CGFloat = 30.0

       // stepWidth
       var stepWidth: CGFloat = 0.0
       if data.count < 2 {
           stepWidth = 0.0
       }
       stepWidth = frame.size.width / CGFloat(data.count - 1)

       // stepHeight
       var stepHeight: CGFloat = 0.0

       var min: Double?
       var max: Double?
       if let minPoint = data.min(), let maxPoint = data.max(), minPoint != maxPoint {
           min = minPoint
           max = maxPoint
       } else {
           return .zero
       }
       if let min = min, let max = max, min != max {
           if min <= 0 {
               stepHeight = (frame.size.height - padding) / CGFloat(max - min)
           } else {
               stepHeight = (frame.size.height - padding) / CGFloat(max + min)
           }
       }

       return CGPoint(x: stepWidth, y: stepHeight)
   }
}

With

extension CGPoint {
    static func getStep(frame: CGRect, data: [Double]) -> CGPoint {
        let padding: CGFloat = 30.0

        // stepWidth
        var stepWidth: CGFloat = 0.0
        if data.count < 2 {
            stepWidth = 0.0
        }
        stepWidth = frame.size.width / CGFloat(data.count - 1)

        // stepHeight
        var stepHeight: CGFloat = 0.0

        var min: Double?
        var max: Double?
        if let minPoint = data.min(), let maxPoint = data.max(), minPoint != maxPoint {
            min = minPoint
            max = maxPoint
        } else {
            return .zero
        }
        if let min = min, let max = max, min != max {
            if min <= 0 {
                stepHeight = (frame.size.height - padding) / CGFloat(max - min)
            } else {
                stepHeight = (frame.size.height - padding) / CGFloat(max - min)
            }
        }

        return CGPoint(x: stepWidth, y: stepHeight)
    }
}

This does improve the scale as below, but still not as tall as I would like. It would be great if we could customize the scale with custom min and max Y values.

Screen Shot 2020-08-19 at 7 46 23 PM

bcbeta avatar Aug 20 '20 01:08 bcbeta