ios - iOS 图表未显示所有 xAxis 值
问题描述
我正在用Swift 4.2编写iOS 应用程序 我正在使用Charts库来显示Horizontal Bar Chart。我需要设置它的 xAxis 值。仅显示最后一个值。
代码片段:
@IBOutlet var chartView: HorizontalBarChartView!
override func viewDidLoad() {
super.viewDidLoad()
let xAxis = chartView.xAxis
xAxis.labelPosition = .bottom
xAxis.labelFont = .systemFont(ofSize: 10)
xAxis.drawAxisLineEnabled = false
xAxis.drawGridLinesEnabled = false
xAxis.granularity = 1
xAxis.enabled=true
xAxis.setLabelCount(3, force: false) //Not working as per expectations
xAxis.valueFormatter=IndexAxisValueFormatter(values: ["A","B","C"]) //Not working as per expectations
self.setDataCount(3,values:[142000,122400,100110])
chartView.animate(yAxisDuration: 2.5)
}
func setDataCount(_ count: Int, values:[Double]) {
let barWidth = 2.0
let spaceForBar = 4.0
var n=0
let yVals = (0..<count).map { (i) -> BarChartDataEntry in
let val = values[n]
n+=1
return BarChartDataEntry(x: Double(i)*spaceForBar, y: val)
}
let set1 = BarChartDataSet(entries: yVals, label: "DataSet")
set1.drawIconsEnabled = false
let data = BarChartData(dataSet: set1)
data.setValueFont(UIFont(name:"HelveticaNeue-Light", size:10)!)
data.barWidth = barWidth
chartView.data = data
//let xAxis = chartView.xAxis
//xAxis.setLabelCount(3, force: false)
//xAxis.valueFormatter=IndexAxisValueFormatter(values: ["A","B","C"])
}
我试图找到解决方案:
xAxis.valueFormatter=IndexAxisValueFormatter(values: ["A","B","C"])
但这些都不起作用。
解决方案
发生这种情况是因为默认功能IndexAxisValueFormatter
IAxisValueFormatter
您必须像这样编写自己的自定义代码
final class CustomFormatter: IAxisValueFormatter {
var labels: [String] = []
func stringForValue(_ value: Double, axis: AxisBase?) -> String {
let count = self.labels.count
guard let axis = axis, count > 0 else {
return ""
}
let factor = axis.axisMaximum / Double(count)
let index = Int((value / factor).rounded())
if index >= 0 && index < count {
return self.labels[index]
}
return ""
}
}
然后像这样使用它
let customFormater = CustomFormater()
customFormater.labels = ["A","B","C"]
chartView.xAxis.valueFormatter = customFormater
确保数据和标签的大小/数量相同,否则不会给你想要的结果。
推荐阅读
- c# - 使用 JSON 模式正确创建 .NET 类
- ios - 如何快速伪造进度条?
- java - 无法使用android中的自定义相机将捕获的图像保存在文件夹中
- c# - System.Security.Cryptography.CryptographicException:“参数不正确”/Aes 256 Gcm 解密
- excel - Excel VBA:从一个工作表调用一个函数,该函数在不同工作表上搜索数据
- php - Laravel 回显通知 + 套接字 io ,未收到通知
- c - Question about the equivalence of pointers and arrays in C
- java - 如何在 Android Studio 中计算工作日?
- android - 设备锁定时启动活动 android 8+
- haskell - Haskell - 使用滑动窗口在 2D 网格上进行模式匹配