Графики iOS ValueFormatter
Я использую плагин iOS графиков (линейный график) и хочу, чтобы стилизовать значения диаграммы (число над каждой точкой) с десятичным числом.
Значение является двойным, но диаграммы по умолчанию округляют его и отображают как целое число.
Я пробовал следующее, но не работает:
let valueformatter = NumberFormatter()
valueformatter.numberStyle = .decimal
valueformatter.locale = Locale.current
lineChartDataSet.valueFormatter = valueformatter as? IValueFormatter
Я пробовал различные другие свойства, но ни один из них не меняет формат числа в наборе данных.
Как я могу изменить формат отображаемого числа?
2 ответа
Решение
Практически там просто нужно добавить следующий класс:
class ChartValueFormatter: NSObject, IValueFormatter {
fileprivate var numberFormatter: NumberFormatter?
convenience init(numberFormatter: NumberFormatter) {
self.init()
self.numberFormatter = numberFormatter
}
func stringForValue(_ value: Double, entry: ChartDataEntry, dataSetIndex: Int, viewPortHandler: ViewPortHandler?) -> String {
guard let numberFormatter = numberFormatter
else {
return ""
}
return numberFormatter.string(for: value)!
}
}
Теперь используйте это как средство форматирования чисел:
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.locale = Locale.current
let valuesNumberFormatter = ChartValueFormatter(numberFormatter: numberFormatter)
lineChartDataSet.valueFormatter = valuesNumberFormatter
lineChartDataSet.valueFont = lineChartDataSet.valueFont.withSize(chartFontPointSize)
lineChartDataSet.valueFormatter = DefaultValueFormatter(decimals: 2)
Это сработало для меня:
Swift 5
let valFormatter = NumberFormatter()
valFormatter.numberStyle = .currency
valFormatter.maximumFractionDigits = 2
valFormatter.currencySymbol = "$"
lineChartPrice.leftAxis.valueFormatter = DefaultAxisValueFormatter(formatter: valFormatter)
let data = PieChartData(dataSet: set)
let formatter = NumberFormatter()
formatter.numberStyle = .percent
formatter.maximumFractionDigits = 2
formatter.multiplier = 1.0
formatter.percentSymbol = "%"
formatter.zeroSymbol = ""
data.setValueFormatter(DefaultValueFormatter(formatter: formatter))