You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chart图表X轴存在重复值时未按数据集实际数据正常绘制的问题

解决方案

问题根源是两个数据集使用了完全相同的X坐标值,Charts库默认会将相同X值的数据点渲染在同一横轴位置,你之前调整的仅为X轴标签的显示逻辑,没有修改数据本身的X坐标排布,因此不生效。可以按照以下步骤修复:

步骤1:对两个数据集的X值做偏移处理

给不同数据集的X值增加固定的小数偏移,让相同逻辑X值的点在横轴上左右错开,保留整数部分作为标签匹配的依据:

// 处理dataset1,X值统一减0.2
for i in 0..<dataset1.entryCount {
    let entry = dataset1.entryForIndex(i)
    entry?.x = Double(i) - 0.2
}
// 处理dataset2,X值统一加0.2
for i in 0..<dataset2.entryCount {
    let entry = dataset2.entryForIndex(i)
    entry?.x = Double(i) + 0.2
}

偏移量可以根据你想要的间距自行调整,只要保证两个数据集的偏移量一正一负,且总和不超过1即可。

步骤2:简化X轴格式化器逻辑

直接取X值的整数部分匹配标签索引,不需要按轴最大长度计算比例:

class CustomLabelsAxisValueFormatter : NSObject, IAxisValueFormatter {
    var labels: [String] = []
    func stringForValue(_ value: Double, axis: AxisBase?) -> String {
        let index = Int(value.rounded())
        guard index >= 0, index < labels.count else { return "" }
        return labels[index]
    }
}
// 初始化格式化器
let formatter = CustomLabelsAxisValueFormatter()
formatter.labels = arrStrDates // 你的X轴标签数组
lineView.xAxis.valueFormatter = formatter

步骤3:调整X轴基础配置

lineView.xAxis.granularityEnabled = true
lineView.xAxis.granularity = 1.0
// 额外补充配置,避免X轴两端留白异常
lineView.xAxis.axisMinimum = -0.5
lineView.xAxis.axisMaximum = Double(arrStrDates.count) - 0.5

步骤4:重新加载数据

处理完数据集后重新赋值给图表即可生效:

let data = LineChartData()
data.dataSets.append(dataset1)
data.dataSets.append(dataset2)
chartView.data = data
chartView.notifyDataSetChanged()

内容的提问来源于stack exchange,提问作者Jinesh Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:15:03