Highcharts 圆环图(建议收藏)

什么是 Highcharts 圆环图?

在数据可视化的世界里,图形的选择往往决定了信息传达的效率。如果你正在寻找一种既能展示比例关系、又比普通饼图更具视觉吸引力的方式,那么 Highcharts 圆环图就是你值得尝试的工具。

Highcharts 圆环图本质上是饼图的一种变形。它和饼图最大的区别在于中心留白——这个空心区域可以用来展示关键数值、状态标签,甚至作为动态更新的仪表盘。想象一下:一个汽车仪表盘上的燃油百分比,中间显示“75%”,周围是代表剩余油量的彩色环带,这就是典型的圆环图应用场景。

与传统饼图相比,Highcharts 圆环图的优势在于:

  • 中心区域可自定义内容(如数字、图标、文字)
  • 更适合展示“占比”与“总量”双重信息
  • 旋转动画和交互效果更自然
  • 支持多层环形结构,实现复杂数据分组

更重要的是,Highcharts 圆环图在移动端和响应式布局中表现优异,适配性极强。无论你是做报表系统、后台监控,还是前端项目中的数据展示模块,它都能轻松胜任。


如何引入 Highcharts 库

在使用 Highcharts 圆环图之前,首先要确保你已经正确引入了 Highcharts 库。这一步看似简单,却是后续所有功能的基础。

打开你的 HTML 文件,添加以下代码到 <head> 区域:

<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>

注释:highcharts.js 是核心库,负责图表渲染;exporting.js 提供导出为 PNG、PDF 等格式的功能,建议保留。如果你不需要导出功能,可以省略第二行,以减少加载体积。

接下来,在页面中准备一个用于渲染图表的容器:

<div id="container" style="width: 600px; height: 400px; margin: 0 auto;"></div>

注释:id="container" 是图表绑定的元素,必须唯一。widthheight 决定了图表大小,建议设置为固定值或使用 CSS 类控制响应式布局。

此时,你已经完成了环境搭建。接下来,我们正式进入 Highcharts 圆环图的创建流程。


创建基础圆环图

现在我们来写第一个完整的 Highcharts 圆环图代码。它将展示一个简单的用户行为分布数据。

// 初始化图表配置
Highcharts.chart('container', {
    chart: {
        type: 'pie',        // 使用 pie 类型,但通过 innerSize 控制为圆环
        plotBorderWidth: 0  // 去掉外边框,让图形更干净
    },
    title: {
        text: '用户行为分布' // 图表标题
    },
    tooltip: {
        pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>' // 鼠标悬停显示百分比
    },
    plotOptions: {
        pie: {
            allowPointSelect: true,     // 允许点击选中
            cursor: 'pointer',          // 鼠标变成手型
            dataLabels: {
                enabled: true,          // 显示数据标签
                format: '<b>{point.name}</b>: {point.percentage:.1f}%', // 标签内容格式
                distance: -50,          // 标签向内偏移,避免重叠
                style: {
                    color: 'white',
                    fontSize: '12px',
                    textOutline: 'none'
                }
            },
            // 关键设置:将饼图变为圆环图
            innerSize: '60%'           // 内部空心区域大小,60% 表示圆环宽度
        }
    },
    series: [{
        name: '行为类型',
        colorByPoint: true,         // 每个扇区颜色不同
        data: [
            { name: '浏览', y: 45 },
            { name: '收藏', y: 25 },
            { name: '下单', y: 20 },
            { name: '分享', y: 10 }
        ]
    }]
});

注释:

  • type: 'pie' 是基础类型,但通过 innerSize 控制形状。
  • innerSize: '60%' 是生成圆环图的关键参数,值越小,中间空心越大。
  • dataLabels 用于显示每个扇区的名称和占比,distance: -50 让标签向内移动,避免与外部标签冲突。
  • tooltip 提供交互提示,鼠标悬停时显示具体百分比。
  • colorByPoint: true 自动为每个数据点分配不同颜色,提升视觉区分度。

运行这段代码,你会看到一个圆环图,四个扇区分别代表不同用户行为,中心区域留白,非常适合添加总数量或状态说明。


自定义圆环图样式

Highcharts 圆环图的强大之处不仅在于功能,更在于它的高度可定制性。你可以通过调整颜色、动画、字体等细节,让图表更贴合项目风格。

修改颜色与渐变

如果你希望某个扇区使用特殊颜色,可以在 data 数组中直接指定 color 字段:

data: [
    { name: '浏览', y: 45, color: '#FF6B6B' },
    { name: '收藏', y: 25, color: '#4ECDC4' },
    { name: '下单', y: 20, color: '#45B7D1' },
    { name: '分享', y: 10, color: '#96CEB4' }
]

注释:直接在数据项中设置 color,可以精准控制每个扇区的配色。建议使用十六进制颜色码,避免颜色名兼容性问题。

添加动态动画

Highcharts 默认开启动画效果,但你也可以手动控制:

chart: {
    type: 'pie',
    animation: {
        duration: 1500,     // 动画持续时间(毫秒)
        easing: 'easeOutBounce' // 动画缓动函数
    },
    plotBorderWidth: 0
}

注释:animation.duration 控制动画时长,easing 定义动画曲线。easeOutBounce 会让扇区“弹跳”进入,适合强调数据加载过程。

设置中心文字

这是圆环图最具价值的功能之一:在中心区域显示重要信息。

plotOptions: {
    pie: {
        innerSize: '60%',
        center: ['50%', '50%'], // 中心点位置(百分比)
        dataLabels: {
            enabled: true,
            format: '<div style="text-align:center; font-size:20px; color:#333;">{point.y}</div>',
            style: {
                fontWeight: 'bold'
            }
        }
    }
}

注释:

  • center 设置中心坐标,'50%' 表示水平垂直居中。
  • dataLabelsformat 可以包含 HTML 标签,因此能插入 <div> 实现复杂排版。
  • 这里显示的是原始数值(point.y),你也可以改为 point.total 或自定义文本。

例如,你可以在中心显示“总用户:1000”,让数据意义更直观。


高级技巧:多层圆环图与响应式设计

当数据结构更复杂时,Highcharts 圆环图支持多层嵌套——也就是“同心圆”效果。这在展示层级关系时非常有用。

创建多层圆环图

series: [{
    name: '第一层',
    innerSize: '40%',  // 内层圆环大小
    data: [
        { name: 'A', y: 30 },
        { name: 'B', y: 20 },
        { name: 'C', y: 50 }
    ]
}, {
    name: '第二层',
    innerSize: '70%',
    data: [
        { name: 'X', y: 40 },
        { name: 'Y', y: 60 }
    ]
}]

注释:

  • 每个 series 代表一层圆环。
  • innerSize 值越大,圆环越窄;越小,越宽。
  • 通过合理设置层级,可以展示“大类 → 子类”结构,如“地区 → 城市”、“部门 → 员工数量”。

实现响应式布局

为了让图表在手机和平板上依然美观,建议添加响应式配置:

responsive: {
    rules: [{
        condition: {
            maxWidth: 500
        },
        chartOptions: {
            plotOptions: {
                pie: {
                    innerSize: '50%'
                }
            },
            title: {
                text: '移动设备显示'
            }
        }
    }]
}

注释:

  • responsive 是 Highcharts 的响应式机制。
  • 当屏幕宽度小于 500px 时,自动应用新的配置。
  • 可以动态调整 innerSizetitlelegend 位置等,提升移动端体验。

实际应用案例:销售业绩看板

假设你正在开发一个销售系统,需要在后台展示各区域的业绩占比。Highcharts 圆环图是理想选择。

Highcharts.chart('container', {
    chart: {
        type: 'pie',
        animation: {
            duration: 1000,
            easing: 'easeOutQuart'
        }
    },
    title: {
        text: '2024 年 Q2 区域销售业绩'
    },
    tooltip: {
        pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
    },
    plotOptions: {
        pie: {
            innerSize: '70%',
            allowPointSelect: true,
            cursor: 'pointer',
            dataLabels: {
                enabled: true,
                format: '<b>{point.name}</b><br>{point.percentage:.1f}%',
                distance: -30,
                style: {
                    fontSize: '12px',
                    color: 'white'
                }
            },
            // 中心显示总销售额
            center: ['50%', '50%'],
            dataLabels: {
                enabled: true,
                format: '<div style="font-size:24px; font-weight:bold;">¥{point.total}</div>',
                style: {
                    color: '#333',
                    textOutline: 'none'
                }
            }
        }
    },
    series: [{
        name: '区域',
        data: [
            { name: '华东', y: 180000, color: '#FF6B6B' },
            { name: '华南', y: 220000, color: '#4ECDC4' },
            { name: '华北', y: 150000, color: '#45B7D1' },
            { name: '西南', y: 100000, color: '#96CEB4' },
            { name: '西北', y: 80000, color: '#FFD166' }
        ]
    }],
    credits: {
        enabled: false  // 关闭 Highcharts 水印
    }
});

注释:

  • point.total 是所有数据项的总和,可用于显示“总销售额”;
  • credits: { enabled: false } 隐藏默认水印,提升专业感;
  • 每个区域配色明确,便于快速识别。

这个案例充分展示了 Highcharts 圆环图在真实项目中的价值:不仅美观,而且信息密度高,交互友好。


总结与建议

Highcharts 圆环图是一种兼具美感与实用性的数据可视化工具。它在展示占比关系、强调关键指标方面表现突出,特别适合用于报表、后台管理、仪表盘等场景。

通过本文的学习,你已经掌握了:

  • 如何引入并初始化 Highcharts
  • 如何创建基础圆环图
  • 如何自定义颜色、动画和中心内容
  • 如何实现多层环形与响应式布局
  • 如何应用于真实业务场景

记住,优秀的数据可视化不是“炫技”,而是让数据“说话”。Highcharts 圆环图正是这样一个桥梁——它用直观的图形,把枯燥的数字变成可感知的信息。

如果你还在为如何展示“占比”发愁,不妨试试 Highcharts 圆环图。它或许就是你项目中那个“点睛之笔”。