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

Rechart堆叠柱状图数值显示异常问题排查求助

Rechart堆叠柱状图stackOffset='expand'后标签显示错误问题解决

问题场景

使用Rechart构建堆叠柱状图时,设置stackOffset='expand'后,部分柱子的标签显示为1而非对应的百分比,组件代码及数据如下:

组件代码

function StackedBarChart({...props}){
    const {dataChart:{data,keys}} = props;

    const renderBars = () =>{
        return keys.map((item,index)=>(
            <Bar
                key={index}
                dataKey={item}
                stackId='a'
                fill={index%2?'blue':'red'}
                label
            />
        ))
    }

    return(
        <ResponsiveContainer width='100%' height={400}>
            <BarChart
                data={data}
                stackOffset='expand'
                >
                <XAxis dataKey="name" />
                <YAxis />
                {renderBars()}
            </BarChart>
        </ResponsiveContainer>
    )
}

数据

const dataChart = {
  data: [{
      name: 'Page A',
      count: 4000,
      price: 2400,
    },
    {
      name: 'Page B',
      count: 3000,
      price: 1398,
    },
    {
      name: 'Page C',
      count: 2000,
      price: 9800,
    },
  ],
  keys: ['price', 'count']
};

问题原因

当设置stackOffset='expand'时,Rechart会自动将每个堆叠项的数值转换为该组总和的比例值(范围0-1),默认的label直接显示了这个转换后的比例值,所以会出现显示1的情况(代表该项目占比100%)。

解决方法

自定义label内容,基于原始数据计算对应的百分比后再显示:

修改renderBars函数中的Bar组件配置,替换默认的label为自定义函数:

const renderBars = () =>{
    return keys.map((item,index)=>(
        <Bar
            key={index}
            dataKey={item}
            stackId='a'
            fill={index%2?'blue':'red'}
            label={({ value, payload }) => {
                // 计算当前分组的所有数据项总和
                const total = keys.reduce((sum, key) => sum + payload[key], 0);
                // 将比例值转换为百分比,保留1位小数
                const percentage = `${(value * 100).toFixed(1)}%`;
                return percentage;
            }}
        />
    ))
}

如果需要显示原始数值而非百分比,也可以直接返回原始值:

label={({ payload, dataKey }) => payload[dataKey]}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:45:45