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

Chart.js饼图/环形图中心重叠百分比异常,求移除方案

问题

使用Chart.js 4.4.1结合React开发时,饼图/环形图的中心位置始终显示重叠的百分比数值,尝试过重装依赖、禁用Tooltip,问题仍未解决,需要彻底移除这些重叠数值。

解决思路

这些重叠的百分比是**Chart.js数据标签插件(chartjs-plugin-datalabels)**的默认显示内容,并非Tooltip,因此禁用Tooltip无法解决问题。需要在图表配置中显式关闭数据标签的显示,或者卸载不必要的插件。

具体方案

方案1:在图表配置中禁用数据标签

给Doughnut组件添加options配置,关闭数据标签的显示:

const chartOptions = {
  plugins: {
    datalabels: {
      display: false
    }
  }
};

将该配置传入每个Doughnut组件即可。

方案2:卸载多余插件(如果未使用)

如果项目中不需要chartjs-plugin-datalabels插件,直接卸载即可:

npm uninstall chartjs-plugin-datalabels
修改后的完整代码
import React, { useState, useEffect } from 'react';
import { Doughnut } from 'react-chartjs-2';
import { Chart as ChartJS, ArcElement, Tooltip, Legend } from 'chart.js';

// 注册Chart.js必要组件
ChartJS.register(ArcElement, Tooltip, Legend);

const MonthlyTargetCharts = () => {
    const [consignmentData, setConsignmentData] = useState(null);
    const [nonConsignmentData, setNonConsignmentData] = useState(null);

    // 计算百分比辅助函数
    const calculatePercentage = (value) => (value ? parseFloat(value).toFixed(2) : "0");

    useEffect(() => {
        const fetchData = async () => {
            try {
                const response = await fetch(process.env.REACT_APP_API_MONTHLY_TARGET_PRIMARY);
                if (!response.ok) throw new Error('网络响应异常');
                const jsonData = await response.json();
                if (jsonData.data?.length > 0) {
                    const data = jsonData.data[0];
                    setConsignmentData({
                        labels: ['寄售完成占比', '剩余未完成'],
                        datasets: [{
                            data: [parseFloat(data["percentage of consignment"]), 100 - parseFloat(data["percentage of consignment"])],
                            backgroundColor: ['rgba(255, 99, 132, 0.6)', 'rgba(200, 200, 200, 0.6)'],
                        }],
                    });
                    setNonConsignmentData({
                        labels: ['非寄售完成占比', '剩余未完成'],
                        datasets: [{
                            data: [parseFloat(data["percentage of non consignment"]), 100 - parseFloat(data["percentage of non consignment"])],
                            backgroundColor: ['rgba(54, 162, 235, 0.6)', 'rgba(200, 200, 200, 0.6)'],
                        }],
                    });
                } else console.error('未获取到有效数据');
            } catch (error) {
                console.error('数据请求失败:', error);
            }
        };

        fetchData();
    }, []);

    // 禁用数据标签的图表配置
    const chartOptions = {
        plugins: {
            datalabels: {
                display: false
            }
        }
    };

    return (
        <>
            <h2 className='sales-targets-title' style={{ textDecoration: 'underline' }}>销售目标</h2>
            <div style={{ display: 'flex', justifyContent: 'space-around', flexWrap: 'wrap' }}>
                {consignmentData && (
                    <div className="chart-container consignment">
                        <h2>寄售目标</h2>
                        <Doughnut data={consignmentData} options={chartOptions} key="consignmentChart" />
                        <div style={{ textAlign: 'center' }}>
                            <h3>{calculatePercentage(consignmentData.datasets[0].data[0])}% 已完成</h3>
                        </div>
                    </div>
                )}
                {nonConsignmentData && (
                    <div className="chart-container non-consignment">
                        <h2>非寄售目标</h2>
                        <Doughnut data={nonConsignmentData} options={chartOptions} key="nonConsignmentChart" />
                        <div style={{ textAlign: 'center' }}>
                            <h3>{calculatePercentage(nonConsignmentData.datasets[0].data[0])}% 已完成</h3>
                        </div>
                    </div>
                )}
            </div>
        </>
    );
};

export default MonthlyTargetCharts;

内容的提问来源于stack exchange,提问作者Jr.coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:44:52