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

Apache ECharts:能否用分段型VisualMap将多类别映射至旭日图多数据值?

在Apache ECharts中使用分段VisualMap实现旭日图多类别高亮映射

原生的分段型(piecewise)VisualMap确实只支持单值与数据项的映射,无法直接通过values: [[CAT-1,CAT-3]]这种多值格式实现你要的多类别关联高亮。但可以通过数据预处理+VisualMap事件监听的方式达成需求,具体实现步骤如下:

1. 数据结构改造

给旭日图的每个数据项添加一个存储对应类别的字段(比如categories),用来标记该主题所属的CAT分组,示例数据结构:

const sunburstData = [
  {
    name: 'TH-A',
    value: 1, // 保留原有value字段(VisualMap需要依赖数值类型的字段触发)
    categories: ['CAT-1', 'CAT-2']
  },
  {
    name: 'TH-B',
    value: 1,
    categories: ['CAT-2', 'CAT-3']
  },
  {
    name: 'TH-C',
    value: 1,
    categories: ['CAT-1', 'CAT-3']
  },
  {
    name: 'TH-D',
    value: 1,
    categories: ['CAT-1', 'CAT-2']
  },
  {
    name: 'TH-E',
    value: 1,
    categories: ['CAT-3']
  }
];

2. 配置分段VisualMap

将VisualMap的分段项设置为你需要的CAT类别,用数值代替类别名称(因为VisualMap的分段值需要是数值类型,后续通过名称映射):

visualMap: {
  type: 'piecewise',
  pieces: [
    { value: 1, label: 'CAT-1' },
    { value: 2, label: 'CAT-2' },
    { value: 3, label: 'CAT-3' }
  ],
  selectedMode: 'multiple', // 开启多选
  outOfRange: {
    opacity: 0.3 // 默认置灰样式
  }
}

3. 监听VisualMap选中事件,自定义高亮逻辑

通过监听visualMapSelected事件,获取当前选中的CAT项,遍历旭日图所有节点,判断节点的categories是否包含选中的CAT,然后通过dispatchAction执行高亮/置灰操作:

myChart.on('visualMapSelected', function(params) {
  // 获取当前选中的CAT标签集合
  const selectedCats = [];
  Object.keys(params.selected).forEach(key => {
    if (params.selected[key]) {
      // 根据value映射回CAT名称
      const catLabel = params.pieces.find(p => p.value == key).label;
      selectedCats.push(catLabel);
    }
  });

  // 收集需要高亮的节点名称
  const highlightNames = sunburstData.filter(item => {
    return item.categories.some(cat => selectedCats.includes(cat));
  }).map(item => item.name);

  // 先重置所有节点样式
  myChart.dispatchAction({
    type: 'downplay',
    seriesName: '旭日图' // 替换成你的series名称
  });

  // 高亮符合条件的节点
  if (highlightNames.length > 0) {
    myChart.dispatchAction({
      type: 'highlight',
      seriesName: '旭日图',
      name: highlightNames
    });
  }
});

关键逻辑说明

  • 选中单个CAT(比如CAT-1)时,自动筛选出所有包含该CAT的主题(TH-A、TH-C、TH-D)并高亮;
  • 选中多个CAT(比如CAT-1+CAT-3)时,筛选出包含任一选中CAT的主题(TH-A、TH-B、TH-C、TH-E)并高亮;
  • 未选中任何CAT时,所有节点保持置灰状态(可根据需求调整默认样式)。

这种方式完全适配你提出的所有需求场景,绕过了原生VisualMap单值映射的限制,实现了多类别关联的高亮效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 08:12:54