eChart饼环pie中间显示总数_2个以上0值不挤掉

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>环饼图显示总数</title>

<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script>

<style>

#main { width: 600px; height: 400px; margin: 0 auto; }

</style>

</head>

<body>

<div id="main"></div>

<script type="text/javascript">

var chartDom = document.getElementById('main');

var myChart = echarts.init(chartDom);

const data = [

{value: 335, name: '直接访问'},

{value: 310, name: '邮件营销'},

{value: 234, name: '联盟广告'},

{value: 0, name: '视频广告'},

{value: 0, name: '搜索引擎'}

];

const total = data.reduce((sum, item) => sum + item.value, 0);

var option = {

tooltip: {

trigger: 'item',

// 关键修复:1.确保0值也显示提示

formatter: function(params) {

return `{params.name}: {params.value}`;

}

},

legend: {

top: '5%',

left: 'center'

},

series: [{

name: '访问量统计',

type: 'pie',

radius: ['40%', '70%'],

//关键修复:2.确保0值也显示提示,强制显示0值项

stillShowZeroSum: true,

//关键修复:3.确保0值也显示提示 设置最小角度使0值可见

minAngle: 1, // 最小角度5度(可调整)

avoidLabelOverlap: false,

// 关键修改:禁用普通状态下的标签显示

label: {

show: false, // 关闭每个扇形的标签

position: 'center'

},

// 关键修改:只在高亮状态显示中心标签

emphasis: {

disabled: false, // 确保高亮效果可用

scale: true, // 启用放大效果

scaleSize: 5, // 放大尺寸

label: {

show: false,

position: 'center',

formatter: `总访问量\n{total|${total}}`, // 只显示总数

fontSize: 18,

fontWeight: 'normal',

rich: {

total: {

fontSize: 28,

fontWeight: 'bold',

color: '#333',

lineHeight: 40

}

}

}

},

labelLine: {

show: false

},

data: data

}]

};

myChart.setOption(option);

// 添加自定义中心标签(非交互状态时显示)

const centerText = document.createElement('div');

centerText.style.position = 'absolute';

centerText.style.textAlign = 'center';

centerText.style.pointerEvents = 'none';

centerText.innerHTML = `

<div style="font-size: 18px; color: #666;">总访问量</div>

<div style="font-size: 28px; font-weight: bold; color: #333;">${total}</div>

`;

// 将中心标签定位到图表中心

chartDom.appendChild(centerText);

// 监听图表尺寸变化,保持居中

const resizeObserver = new ResizeObserver(() => {

const { width, height } = chartDom.getBoundingClientRect();

centerText.style.width = width + 'px';

centerText.style.top = (height / 2 - 30) + 'px';

});

resizeObserver.observe(chartDom);

</script>

</body>

</html>