You need to enable JavaScript to run this app. Recharts柱状图相同name的X轴条目重复,如何合并对应柱形数据?
优惠活动
大模型
产品
解决方案
定价
更多

Recharts柱状图相同name的X轴条目重复,如何合并对应柱形数据?

解决方案

问题根因

Recharts默认将data数组的每一个元素对应为一个X轴条目,你当前的数据源存在两个name为Page A的独立对象,因此会渲染出两个重复的X轴项。要实现相同name下的柱形聚合展示,根据实际展示需求,可选以下两种方案:

方案1:合并同name的数值(累加后展示一组柱形)

如果你需要把同个Page A的uv、pv值累加后展示,先对数据源做去重聚合处理即可,处理代码示例:

const processedData = Object.values(data.reduce((acc, cur) => {
  if (acc[cur.name]) {
    // 已存在同name的条目,累加数值
    acc[cur.name].uv += cur.uv
    acc[cur.name].pv += cur.pv
  } else {
    // 不存在则新增条目
    acc[cur.name] = {...cur}
  }
  return acc
}, {}))

之后把BarChart的data属性替换成processedData即可,最终只会渲染一个Page A的X轴项,展示累加后的uv、pv柱形。

方案2:同X轴项并列展示多组柱形(不累加数值)

如果你需要保留两组Page A的原始数值,在同一个X轴刻度下并列展示,处理方式是先把同name的数值映射为新的字段:

const processedData = Object.values(data.reduce((acc, cur) => {
  if (acc[cur.name]) {
    // 同name的第二组数据,映射为uv2、pv2字段
    acc[cur.name].uv2 = cur.uv
    acc[cur.name].pv2 = cur.pv
  } else {
    acc[cur.name] = {...cur}
  }
  return acc
}, {}))

然后修改组件代码,新增对应字段的Bar组件即可:

<BarChart width={730} height={250} data={processedData}>
  <CartesianGrid strokeDasharray="3 3" />
  <XAxis dataKey="name" />
  <YAxis />
  <Legend />
  <Bar dataKey="uv" fill="#8884d8" name="第一组uv" />
  <Bar dataKey="pv" fill="#82ca9d" name="第一组pv" />
  <Bar dataKey="uv2" fill="#ffc658" name="第二组uv" />
  <Bar dataKey="pv2" fill="#ff8042" name="第二组pv" />
</BarChart>

如果需要堆叠展示,给对应的Bar组件添加stackId属性即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 08:06:03