iOS Charts: How to properly scale the bar width based on number of entries?

Viewed 1300

I'm currently using the iOS Charts library, and I'm trying to scale the width of the bar when using a BarChartView, but I'm having a difficult ensuring the width remains almost the same regardless of how many entries there are in the chart.

According to an answer provided here: Changing width of the bar in bar chart

one of the developers stated that the bar's width will shrink with an increasing number of entries.

I have calculated a zoom level factor that I am satisfied with based on the number of entries using a zoomMultiplier like so:

func createBarChart(dataPoints: [Date], values: [Double])
{
    var dataEntries: [BarChartDataEntry] = []

    for index in 0..<dataPoints.count
    {
        let dataEntry = BarChartDataEntry(x: Double(index),
                                                  y: values[index])

        dataEntries.append(dataEntry)
    }

    barChartView.xAxis.valueFormatter = self

    barChartView.xAxis.granularity = 1

    barChartView.xAxis.setLabelCount(dataPoints.count, force: false)

    barChartView.animate(yAxisDuration: 1.0, easingOption: .easeInOutQuad)

    switch dataPoints.count
    {
        case 1...6:
            zoomXMultiplier = 0.0
            barWidthMultiplier = 0.3
            break

        default:
            zoomXMultiplier = CGFloat(dataPoints.count) * 0.168
            barWidthMultiplier = Double(dataPoints.count) * 0.0014 - Double(zoomXMultiplier) * 0.02
            break
    }

    let chartDataSet = BarChartDataSet(values: dataEntries, label: "")
    let chartData = BarChartData(dataSet: chartDataSet)

    barChartView.data = chartData

    barChartView.zoom(scaleX: zoomXMultiplier, scaleY: 0.0, x: 0, y: 0)

    barChartView.barData?.barWidth = barWidthMultiplier
}

However, I can't seem to get the barWidthMultiplier just right, the width of the bar noticeable scales down/up with decreasing/increasing number of data point entries.

Can someone provide any suggestions to help me resolve this issue if possible?

Thanks!

0 Answers
Related