You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Highcharts Wordcloud中按类别分组并显示各分类权重最大的词

实现Highcharts词云的分组展示功能

刚好做过类似的需求,Highcharts的wordcloud模块虽然没有原生的分组配置,但我们可以通过颜色区分+结构化数据+自定义tooltip/图例的组合,实现和你参考示例一样的分组效果——按总统类别区分词群、按相对字号展示词频、突出各组最高频词。具体实现步骤如下:

1. 准备结构化的分组词频数据

给每个词项添加group字段标记所属分组,weight直接用百分比数值(Highcharts会自动按相对值计算字号):

const wordCloudData = [
  { name: 'I', weight: 70, group: '巴拉克·奥巴马' },
  { name: 'the', weight: 35, group: '巴拉克·奥巴马' },
  { name: 'and', weight: 22, group: '巴拉克·奥巴马' },
  { name: 'will', weight: 49, group: '乔治·布什' },
  { name: 'of', weight: 28, group: '乔治·布什' },
  { name: 'a', weight: 19, group: '乔治·布什' },
  { name: 'will', weight: 65, group: '罗纳德·里根' },
  { name: 'to', weight: 32, group: '罗纳德·里根' },
  { name: 'we', weight: 25, group: '罗纳德·里根' }
];

2. 配置分组颜色映射

为每个分组分配专属颜色,确保视觉上的分组区分:

const groupColors = {
  '巴拉克·奥巴马': '#2ecc71', // 绿色
  '乔治·布什': '#3498db',    // 蓝色
  '罗纳德·里根': '#e74c3c'   // 红色
};

3. 完整的Highcharts词云实现代码

通过自定义颜色回调、tooltip格式化、手动生成图例,完成分组展示:

<!DOCTYPE html>
<html>
<head>
  <title>分组词云示例</title>
  <script src="https://code.highcharts.com/highcharts.js"></script>
  <script src="https://code.highcharts.com/modules/wordcloud.js"></script>
</head>
<body>
  <div id="container" style="width: 800px; height: 600px;"></div>

  <script>
    // 分组词频数据
    const wordCloudData = [
      { name: 'I', weight: 70, group: '巴拉克·奥巴马' },
      { name: 'the', weight: 35, group: '巴拉克·奥巴马' },
      { name: 'and', weight: 22, group: '巴拉克·奥巴马' },
      { name: 'will', weight: 49, group: '乔治·布什' },
      { name: 'of', weight: 28, group: '乔治·布什' },
      { name: 'a', weight: 19, group: '乔治·布什' },
      { name: 'will', weight: 65, group: '罗纳德·里根' },
      { name: 'to', weight: 32, group: '罗纳德·里根' },
      { name: 'we', weight: 25, group: '罗纳德·里根' }
    ];

    // 分组颜色映射
    const groupColors = {
      '巴拉克·奥巴马': '#2ecc71',
      '乔治·布什': '#3498db',
      '罗纳德·里根': '#e74c3c'
    };

    Highcharts.chart('container', {
      title: {
        text: '国情咨文高频词分组词云'
      },
      tooltip: {
        // 自定义tooltip,显示词、分组、频率
        formatter: function() {
          return `<b>${this.point.name}</b><br>
                  所属分组: ${this.point.group}<br>
                  出现频率: ${this.point.weight}%`;
        }
      },
      series: [{
        type: 'wordcloud',
        data: wordCloudData,
        name: '词频',
        // 根据分组动态分配颜色
        color: function(point) {
          return groupColors[point.group];
        },
        // 可选:调整词云旋转方向和布局
        rotation: {
          from: -90,
          to: 0,
          orientations: 2
        }
      }],
      legend: {
        enabled: true,
        title: {
          text: '总统分组'
        },
        // 自定义图例项的颜色和文字
        labelFormatter: function() {
          const groupName = this.name;
          return `<span style="color: ${groupColors[groupName]}">${groupName}</span>`;
        },
        // 从颜色映射中提取分组作为图例项
        data: Object.keys(groupColors).map(group => ({ name: group }))
      }
    });
  </script>
</body>
</html>

关键细节说明

  • 字号控制:weight字段直接传入百分比数值,Highcharts会自动按相对权重渲染字号,比如70%的"I"会比65%的"will"稍大,完全符合需求。
  • 分组区分:通过color回调函数绑定每个词的分组颜色,配合图例,用户能清晰区分不同总统的词群。
  • 交互增强:自定义tooltip展示完整的词频和分组信息,提升用户体验。

如果需要更极致的分组布局(比如把同一组的词聚集在一起),Highcharts原生不支持,但可以尝试拆分多个series叠加,或者自定义布局算法,不过一般来说颜色区分+图例的方案已经能满足大部分场景需求。

内容的提问来源于stack exchange,提问作者Ams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:11:00