作品集 / 实验报告

数据可视化 / 实验二 · 第 9 题

饼图标签优化

比较内部标签、外部文字对齐和引导线末端对齐。

实验目的

掌握 formatter、position 和 alignTo 对标签的控制。

实验数据

类别金额 / 万元
研发500
市场350
人力280
运营200
其他120

实现要点

  1. 标签格式为“项目(金额万元)”,例如研发(500万元)。
  2. 三种效果分别使用 inside、outside + edge、outside + labelLine。

运行结果

标签显示在扇形内部
图 1 标签显示在扇形内部 下载截图 ↓ 运行此效果 ↗
外部标签文字对齐
图 2 外部标签文字对齐 下载截图 ↓ 运行此效果 ↗
引导线末端对齐
图 3 引导线末端对齐 下载截图 ↓ 运行此效果 ↗

完整配置

mode 支持 inside、edge、labelLine,可通过运行结果下的入口分别查看。

var mode = new URLSearchParams(location.search).get('mode') || 'inside';
var modes = {
    inside: { name: '标签显示在扇形内部', position: 'inside', alignTo: 'none' },
    edge: { name: '外部标签文字对齐', position: 'outside', alignTo: 'edge' },
    labelLine: { name: '引导线末端对齐', position: 'outside', alignTo: 'labelLine' }
};
var setting = modes[mode] || modes.inside;
var myChart = echarts.init(document.getElementById('chart'));
var option = {
    title: {
        text: '某公司年度支出构成',
        subtext: '单位:万元  |  ' + setting.name,
        left: 'center',
        top: 30
    },
    tooltip: {
        trigger: 'item',
        formatter: '{b}:{c} 万元({d}%)'
    },
    legend: {
        bottom: 30,
        data: ['研发', '市场', '人力', '运营', '其他']
    },
    series: [{
        name: '年度支出',
        type: 'pie',
        radius: '55%',
        center: ['50%', '50%'],
        data: [
            { value: 500, name: '研发' },
            { value: 350, name: '市场' },
            { value: 280, name: '人力' },
            { value: 200, name: '运营' },
            { value: 120, name: '其他' }
        ],
        label: {
            show: true,
            formatter: '{b}({c}万元)',
            position: setting.position,
            alignTo: setting.alignTo,
            edgeDistance: '12%',
            distanceToLabelLine: 8,
            fontSize: 16,
            color: '#222'
        },
        labelLine: {
            show: setting.position === 'outside',
            length: 25,
            length2: 35
        },
        emphasis: {
            itemStyle: {
                shadowBlur: 10,
                shadowOffsetX: 0,
                shadowColor: 'rgba(0, 0, 0, 0.5)'
            }
        }
    }]
};
myChart.setOption(option);