Highcharts 柱形图,线条图,饼图组合(保姆级教程)

从零开始掌握 Highcharts 柱形图,线条图,饼图组合

在数据可视化领域,图表不只是“好看”,更是“说清楚”的关键工具。尤其是当你要展示多维度、多层次的数据时,单一类型的图表往往力不从心。比如,你既想看到每个月的销售趋势,又想对比不同产品的占比,还希望突出某个月的异常值——这时,Highcharts 柱形图,线条图,饼图组合 就成了理想选择。

这就像给一个厨师搭配一桌菜:柱形图是主菜,线条图是汤品,饼图则是甜点。每一种都独立精彩,合在一起则层次分明、营养均衡。

本文将带你一步步构建一个真实的商业数据分析场景:某公司 2023 年各季度的销售额趋势 + 各产品线占比分析。全程使用 Highcharts,代码清晰,注释详细,适合初学者和中级开发者快速上手。


什么是 Highcharts?为什么它适合组合图表?

Highcharts 是一个功能强大、兼容性好的 JavaScript 图表库,支持 20 多种图表类型,包括柱形图、折线图、饼图、面积图等。它的核心优势在于:

  • API 简洁:配置项直观,学习成本低;
  • 响应式设计:适配手机、平板、PC 多端;
  • 可交互性强:支持鼠标悬停、缩放、点击事件;
  • 支持组合图表:多个系列可共存于同一图表区域。

想象一下,你有一个“数据画布”,而 Highcharts 就是你的画笔。你可以用它画出柱子、画出曲线、画出圆饼,甚至让它们在同一个画布上“对话”。


准备工作:引入 Highcharts 库

在使用 Highcharts 之前,你需要先引入它的 CDN 文件。这是整个项目的基础。

<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8" />
  <title>Highcharts 组合图表示例</title>
  <!-- 引入 Highcharts 的 CDN 文件 -->
  <script src="https://code.highcharts.com/highcharts.js"></script>
  <script src="https://code.highcharts.com/modules/exporting.js"></script>
  <script src="https://code.highcharts.com/modules/export-data.js"></script>
  <style>
    #container {
      width: 100%;
      height: 600px;
      margin: 0 auto;
    }
  </style>
</head>
<body>

  <!-- 图表容器 -->
  <div id="container"></div>

</body>
</html>

注释说明:

  • highcharts.js 是核心库,必须引入;
  • exporting.js 支持导出图表为图片或 PDF;
  • export-data.js 支持导出原始数据;
  • #container 是图表的“画布”,所有图表将在此渲染。

创建柱形图与线条图的组合

我们先来搭建主图表:柱形图 + 线条图。柱形图展示销售额,线条图展示增长率。

// 初始化图表配置
var chart = Highcharts.chart('container', {
  // 图表标题
  title: {
    text: '2023 年各季度销售趋势分析'
  },

  // X轴(横轴)标签
  xAxis: {
    categories: ['Q1', 'Q2', 'Q3', 'Q4'] // 四个季度
  },

  // Y轴(纵轴)设置
  yAxis: {
    title: {
      text: '销售额(万元)'
    },
    labels: {
      format: '{value}万'
    }
  },

  // 图表类型:这里是组合类型
  chart: {
    type: 'column' // 默认类型为柱形图
  },

  // 数据系列
  series: [
    // 第一个系列:柱形图 - 销售额
    {
      name: '销售额',
      type: 'column', // 柱形图类型
      data: [230, 260, 310, 280], // 每季度销售额(单位:万元)
      color: '#4CAF50' // 设置绿色,视觉上更友好
    },
    // 第二个系列:线条图 - 增长率
    {
      name: '增长率',
      type: 'line', // 线条图类型
      data: [5.2, 8.7, 12.3, 7.1], // 增长率百分比
      color: '#FF5722',
      marker: {
        enabled: true // 显示数据点
      },
      yAxis: 1 // 使用第二个 Y 轴(右轴)
    }
  ],

  // 右侧 Y 轴(用于增长率)
  yAxis: [
    {
      title: { text: '销售额(万元)' },
      labels: { format: '{value}万' }
    },
    {
      title: { text: '增长率(%)' },
      labels: { format: '{value}%' },
      opposite: true // 右侧对齐
    }
  ],

  // 图例位置
  legend: {
    layout: 'horizontal',
    align: 'center',
    verticalAlign: 'bottom'
  },

  // 工具提示(鼠标悬停时显示)
  tooltip: {
    shared: true, // 允许多系列共享提示框
    formatter: function() {
      var s = '<b>' + this.x + '</b><br/>';
      // 遍历所有系列,显示对应值
      $.each(this.points, function() {
        s += this.series.name + ': ' + this.y + '<br/>';
      });
      return s;
    }
  }
});

注释说明:

  • series 中的两个对象分别代表两个图表类型;
  • type: 'column'type: 'line' 决定了图表形态;
  • yAxis: 1 表示使用第二个 Y 轴(右轴),避免单位混淆;
  • shared: true 让提示框同时显示两个系列的数据,体验更佳;
  • formatter 自定义提示框内容,提升用户体验。

添加饼图:展示各产品线占比

现在我们想在图表右侧添加一个饼图,显示每个产品在总销售额中的占比。这需要使用 Highcharts 的 paneseries 混合模式

// 在原有配置基础上,新增饼图配置
series: [
  // 已有柱形图与线条图
  {
    name: '销售额',
    type: 'column',
    data: [230, 260, 310, 280],
    color: '#4CAF50'
  },
  {
    name: '增长率',
    type: 'line',
    data: [5.2, 8.7, 12.3, 7.1],
    color: '#FF5722',
    marker: { enabled: true },
    yAxis: 1
  },

  // 新增:饼图系列
  {
    name: '产品线占比',
    type: 'pie', // 设置为饼图
    data: [
      { name: 'A 型产品', y: 230 },
      { name: 'B 型产品', y: 150 },
      { name: 'C 型产品', y: 120 },
      { name: 'D 型产品', y: 100 }
    ],
    center: ['75%', '50%'], // 设置饼图中心位置(相对容器)
    size: '50%', // 饼图大小
    showInLegend: true,
    legend: {
      enabled: true
    },
    // 饼图样式
    plotOptions: {
      pie: {
        allowPointSelect: true,
        cursor: 'pointer',
        dataLabels: {
          enabled: true,
          format: '<b>{point.name}</b>: {point.percentage:.1f}%'
        }
      }
    }
  }
],

注释说明:

  • type: 'pie' 声明这是一个饼图;
  • center: ['75%', '50%'] 表示饼图位于容器的 75% 水平位置、50% 垂直位置,与主图表错开;
  • size: '50%' 控制饼图大小,避免过大遮挡;
  • dataLabels 显示每个扇区的名称和占比,增强可读性;
  • allowPointSelect 允许点击扇区,可配合事件使用。

布局优化:使用 pane 实现更优雅的组合

上述方式虽然可行,但布局略显粗糙。更推荐使用 pane 来管理多个图表区域。pane 就像一个“图层管理器”,让你清晰划分主图与子图。

// 添加 pane 配置
chart: {
  type: 'column',
  // 定义多个图层
  panes: [
    {
      // 主图图层(左上角)
      startAngle: 0,
      endAngle: 360,
      size: '70%'
    },
    {
      // 饼图图层(右上角)
      startAngle: 0,
      endAngle: 360,
      size: '30%',
      center: ['75%', '50%']
    }
  ]
},

注释说明:

  • panes 数组定义了多个绘图区域;
  • size 控制图层大小;
  • center 定义图层中心点,支持百分比定位;
  • 通过 pane,你可以更精确地控制每个图表的布局,避免重叠或错位。

实际应用建议:何时使用这种组合?

在真实项目中,这种组合非常实用,尤其适合以下场景:

  • 企业月度/季度报表(柱形图趋势 + 饼图占比);
  • 用户行为分析(线条图增长 + 柱形图对比);
  • 产品销售分析(柱形图对比 + 饼图拆解);

小贴士:不要堆砌图表!组合的目的是“讲一个完整的故事”。每个图表都应有明确目的,避免信息过载。


总结:掌握 Highcharts 柱形图,线条图,饼图组合

本文从零开始,带你构建了一个完整的 Highcharts 组合图表方案。你学会了:

  • 如何引入 Highcharts 库;
  • 如何配置柱形图与线条图的双轴组合;
  • 如何添加饼图并精确定位;
  • 如何使用 pane 管理多图层布局;
  • 如何通过 tooltipdataLabels 提升可读性。

Highcharts 柱形图,线条图,饼图组合 不仅美观,更强大。它让你的数据不再沉默,而是“会说话”。无论是汇报 PPT 还是后台管理系统,它都能成为你的得力助手。

记住:好的可视化,不是“堆更多图”,而是“讲清楚一件事”。从今天起,用 Highcharts 把你的数据讲得明明白白。