123432198765
123432198765

Reputation: 276

iOS Charts: Where are the values actually coming from?

I have the following Xaxis formatter:

extension ChartXAxisFormatter: IAxisValueFormatter {

    func stringForValue(_ value: Double, axis: AxisBase?) -> String {
        guard let referenceTimeInterval = referenceTimeInterval,
        let selectedFrame = selectedFrame
        else {
            return ""
        }
        
        let date = Date(timeIntervalSince1970: value * 3600 * 24 + referenceTimeInterval)
        
        if(selectedFrame == .week) {
            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "E"
            return dateFormatter.string(from: date).capitalized
        }
        else if(selectedFrame == .month) {
            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "dd"
            return dateFormatter.string(from: date).capitalized
        }
        else {
            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "MMM"
            return dateFormatter.string(from: date).capitalized
        }
    }

}

And I call it like so: xAxis.valueFormatter = ChartXAxisFormatter(referenceTimeInterval: referenceTimeInterval, selectedFrame: selectedFrame)

However, this is just formatting the values, it isn't actually deciding what values appear in the xAxis.

When I run it, I get something like: 5 5 6 6 6 7

I can fix this by setting xAxis.granularity = 1 but I get 5 6 without the 7.

What is actually deciding what values appear? How can I get just the unique values?

For example if I had access to what values it uses I can call something like Array(Set(array))

Upvotes: 1

Views: 167

Answers (1)

Sharath Sriram
Sharath Sriram

Reputation: 170

Refer to XAxisRenderer in the Charts library. It has a computeAxisValues function that actually calculates the values that appear on the axis. The entries array of the axis stores the values that will be displayed.

If you want to format it, you'll have to subclass the XAxisRenderer and override the computeAxisValues function

Upvotes: 0

Related Questions