条形图:横向布局与标签优化

横向条形图非常适合展示排名数据、过长的类别名称或进度指标。通过沿X轴延伸条形,这种视觉结构为类别标签提供了充足的横向空间,无需倾斜或截断文本。无论您是在构建前10名排行榜表格、调查结果分解,还是横向性能对比,条形图都能在桌面和移动屏幕上提供清晰的可读性。

横向条形的原理

在 Apache ECharts 中,柱状图和条形图使用完全相同的‘bar’系列类型。转换为横向布局的方法是将类别数据直接分配给垂直轴(yAxis),并将水平轴(xAxis)定义为数值轴。图表引擎会旋转渲染方向,从左到右水平绘制条形。

1. 基础设置

要创建一个基本的横向条形图,请在type: 'category'上设置yAxis并提供您的数据数组,同时在type: 'value'上设置xAxis:

option = {
    tooltip: {
        trigger: 'axis',
        axisPointer: { type: 'shadow' }
    },
    xAxis: {
        type: 'value'
    },
    yAxis: {
        type: 'category',
        data: ['巴西', '印度尼西亚', '美国', '印度', '中国']
    },
    series: [
        {
            type: 'bar',
            data: [214, 273, 331, 1380, 1411]
        }
    ]
};

 

高级结构技术

横向条形图支持多个数据组、目标高亮以及自定义角部处理,适用于现代仪表板设计。

1. 多系列横向对比

将多个对象放置在系列 数组以按类别标签创建分组的水平条形图:

option = {
    legend: {
        data: ['2025目标', '2025实际']
    },
    xAxis: {
        type: 'value'
    },
    yAxis: {
        type: 'category',
        data: ['项目A', '项目B', '项目C', '项目D']
    },
    series: [
        {
            name: '2025目标',
            type: 'bar',
            data: [80, 95, 70, 85]
        },
        {
            name: '2025实际',
            type: 'bar',
            data: [85, 90, 75, 92]
        }
    ]
};

 

2. 圆角端帽与高亮样式

使用以下方式应用右侧圆角:borderRadius在水平条形图上(指定[右上角, 右下角, 左下角, 左上角]):

option = {
    xAxis: {
        type: 'value'
    },
    yAxis: {
        type: 'category',
        data: ['直接搜索', '邮件活动', '社交媒体', '付费搜索']
    },
    series: [
        {
            type: 'bar',
            data: [
                120,
                200,
                {
                    value: 450,
                    itemStyle: {
                        color: '#fac858'
                    }
                },
                280
            ],
            itemStyle: {
                color: '#91cc75',
                borderRadius: [0, 6, 6, 0] // 仅对右侧端帽进行圆角处理
            }
        }
    ]
};

 

微调布局与间距

由于水平类别标签的文本长度各不相同,调整左侧边距和标签对齐方式可防止标签被截断。

1. 容器网格边距

使用grid配置块,为长Y轴标签分配足够的空间:

option = {
    grid: {
        left: '15%',  // 为较长的类别文本增加左侧边距
        right: '8%',
        bottom: '10%',
        containLabel: true
    },
    xAxis: {
        type: 'value'
    },
    yAxis: {
        type: 'category',
        data: [
            '企业基础设施现代化',
            '云迁移第二阶段',
            '数据库优化',
            'API网关重构'
        ]
    },
    series: [
        {
            type: 'bar',
            data: [75, 60, 90, 40],
            barWidth: '50%'
        }
    ]
};

 

战略最佳实践

  • 有意地对数据进行排序: 尽可能将水平条形图按升序或降序排列。排序列表能让读者立即看出表现最佳的项目。
  • 使用containLabel: true: 始终包含 containLabel: true网格 配置以防止过长的类别标题溢出画布边缘。
  • 直接数值标签: 为了清晰的排行榜,建议在每个条形图的末端直接显示数据值,使用 label: { show: true, position: 'right' } 并完全隐藏数值底部坐标轴。
滚动至顶部