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

ChartJS图表X轴标签重叠问题求助(附代码片段)

解决react-chartjs-2中X轴标签堆叠重叠问题

核心问题定位

你的代码里labels: [ChartData.map((data) => data.id)]是错误根源:ChartData.map()本身会返回一个一维数组(比如[1,2,3,4,5,6,7]),但你给它套了一层额外的数组,最终labels变成了二维数组[[1,2,3,4,5,6,7]]。Chart.js无法正确解析这种结构,导致所有标签被当成单个元素渲染,进而出现堆叠重叠。

修复步骤

1. 修正labels的定义

直接使用map返回的一维数组作为labels,去掉外层多余的方括号:

修改App.js中的useState部分:

const [chartData, setChartData] = useState({
  labels: ChartData.map((data) => data.id), // 移除外层[]
  datasets: [{
      label: "Users Gained",
      data: ChartData.map((data) => data.userGain)
  }],
})

2. 换回年份标签的优化方案

如果想重新用year作为X轴标签,可通过配置Chart.js的X轴刻度选项,避免标签拥挤重叠:

在BarChart.js中添加配置项:

import React from "react"
import { Bar } from 'react-chartjs-2'
import {Chart as ChartJS} from "chart.js/auto"

const BarChart = ({chartData}) => {
  const options = {
    scales: {
      x: {
        ticks: {
          maxRotation: 45, // 标签最大旋转角度
          minRotation: 45, // 标签最小旋转角度
          autoSkip: true, // 自动跳过部分标签避免拥挤
          maxTicksLimit: 7 // 限制最大显示刻度数
        }
      }
    }
  }

  return (
    <>
      <Bar data={chartData} options={options} />
    </>
  )
}

export default BarChart

此时App.js中的labels可改回:

labels: ChartData.map((data) => data.year),

修改后的完整App.js代码

import { useState, useEffect } from "react";
import BarChart from "./components/BarChart";
import { ChartData } from "./Data";
import LineChart from "./components/LineChart";
import React from "react";
import { Bar } from 'react-chartjs-2'

const App = () => {
  const [chartData, setChartData] = useState({
    labels: ChartData.map((data) => data.id),
    datasets: [{
        label: "Users Gained",
        data: ChartData.map((data) => data.userGain)
    }],
  })

  return (
    <>
        <div className="col-12">
            <h1 className="fs-6">WEBSITE VISITORS</h1>
            <BarChart chartData={chartData} />
        </div>
    </>
  )
}

export default App

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:45:29