echarts 饼图pie文本过长时显示不全

Daotin 于 2024-06-21 发布 编辑

如下图,文本过长会显示不全:

查看echarts文档,设置了label的宽度无效,设置overflow也无效。

找了一些方案,说设置startAngle也没用,文本一旦过长,依然会有问题。

最后,在网上找到最终方案,就是自己进行文本截断换行

相关的代码如下:

/**
 * 饼图label手动换行
 * @param {*} label 显示的文本
 * @param {*} lineLength 每行显示的字符长度
 * @returns 返回处理后的文本
 */
export function pieLabelFormatter(label, lineLength = 8) {
	// 手动换行
	if (label.length <= lineLength) {
		return `${label}`
	} else if (label.length > lineLength && label.length <= 2 * lineLength) {
		return `${label.slice(0, lineLength)}\n${label.slice(lineLength)}`
	} else if (label.length > 2 * lineLength && label.length <= 3 * lineLength) {
		return `${label.slice(0, lineLength)}\n${label.slice(lineLength, 2 * lineLength)}\n${label.slice(2 * lineLength)}`
	} else if (label.length > 3 * lineLength && label.length <= 4 * lineLength) {
		return `${label.slice(0, lineLength)}\n${label.slice(lineLength, 2 * lineLength)}\n${label.slice(
			2 * lineLength,
			3 * lineLength,
		)}\n${label.slice(3 * lineLength)}`
	} else {
		return `${label.slice(0, lineLength)}\n${label.slice(lineLength, 2 * lineLength)}\n${label.slice(
			2 * lineLength,
			3 * lineLength,
		)}\n${label.slice(3 * lineLength, 4 * lineLength)}\n${label.slice(4 * lineLength)}`
	}
}

使用方式:

series: [
    {
        name: '',
        type: 'pie',
        radius: '40%',
        center: ['50%', '40%'],
        avoidLabelOverlap: true, // 是否启用防止标签重叠策略
        data: this.getSeriesData(),
        label: {
            formatter: this.pieLabelFormatter,
        },
    },
],

最终的显示效果如下: