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

如何在C3.js中无需点击触发指定图例的筛选高亮功能

自动触发C3.js图例筛选高亮的实现方法

嘿,这个需求我刚好实操过,其实不用模拟手动点击,C3.js本身就提供了原生API来实现自动高亮指定系列的效果,非常方便!

核心方法:chart.focus()

C3的focus()方法就是专门用来高亮指定数据系列的,调用后目标系列会保持正常显示,其他系列会自动变暗(和手动点击图例的效果完全一致)。如果要取消高亮,调用chart.revert()即可。

具体实现步骤

1. 先初始化你的C3图表

先按照常规方式创建图表,确保图例是显示状态:

// 初始化C3图表实例
var chart = c3.generate({
    data: {
        columns: [
            ['data1', 30, 200, 100, 400, 150, 250],
            ['data2', 50, 20, 10, 40, 15, 25],
            ['data3', 130, 100, 140, 200, 150, 50]
        ],
        type: 'line' // 这里可以换成你需要的图表类型,比如bar、area等
    },
    legend: {
        show: true // 必须确保图例开启,不过默认就是true
    }
});

2. 初始化完成后自动触发高亮

要确保图表渲染完成后再调用focus(),最可靠的方式是用onrendered回调(避免DOM未加载完成的问题):

// 图表渲染完成后自动高亮data1系列
chart.onrendered = function() {
    chart.focus('data1');
};

3. 其他场景触发高亮

如果不是初始化时自动触发,而是在某个事件(比如按钮点击、数据更新后)触发,直接调用chart.focus('data1')就行:

// 比如点击按钮时触发高亮
document.getElementById('highlight-btn').addEventListener('click', function() {
    chart.focus('data1');
});

补充:如果需要隐藏其他系列而非变暗

如果你想要的是直接隐藏非目标系列(不是变暗),可以用hide()方法:

// 隐藏data2和data3,只显示data1
chart.hide(['data2', 'data3']);
// 恢复显示的话用chart.show(['data2', 'data3'])

亲测这个方法完全符合需求,你可以直接套用到你的项目里试试~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:55:29