最稳妥的做法是直接修改 series[i].show 并调用 myChart.setOption();ECharts 无“一键隐藏其他”API,需手动遍历重设 show 状态;常见错误是仅改 legend 选中状态而未同步 series.show,导致 tooltip 仍显示但折线不渲染。

用按钮控制 ECharts 折线图 series 显示/隐藏
直接改 series[i].show 并调用 myChart.setOption() 是最稳妥的做法。ECharts 本身不提供“一键隐藏其他、只留当前”的 API,必须手动遍历并重设每条线的 show 状态。
常见错误是只改了 legend 的选中状态,但没同步更新 series 的 show 字段——这会导致 tooltip 里还显示数据、hover 仍触发,但折线却不画出来,视觉和行为不一致。
- 确保每个
series都有唯一且匹配legend.data的name字段 - 修改
series后必须调用setOption(option, { notMerge: true })或完整重传 option,不能只传 diff - 如果用了 lazy update(如 Vue 的响应式绑定),要强制触发 reactivity,比如用
nextTick再 setOption
纯 HTML + JavaScript 控制多个 div 区域切换(无图表库)
如果你的“折线图”其实是多个独立 关键不是“隐藏线条”,而是“只让一个容器可见”。容易踩的坑是用 ECharts 默认点击图例就会 toggle 对应 series 的显示,但这个行为不可靠:它不触发你自己的逻辑,也不保证 做法是在初始化时设置: 频繁操作 定义两个 class:
实际复杂点在于:不同图表库对“隐藏”的定义不一致——ECharts 的 style.display 即可,不需要任何图表库。visibility: hidden ——它保留占位,可能撑开布局;应该用 display: none。style="display:none",或统一 class 如 chart-panel 并在 CSS 中设 .chart-panel { display: none; }
document.querySelectorAll('.chart-panel').forEach(el => el.style.display = 'none') 清空所有document.getElementById('line-2').style.display = 'block' 显式打开目标data-target="line-2" 属性配合 querySelector 动态取值点击图例时默认联动隐藏/显示,但需禁用自动行为
tooltip 或 axisPointer 同步更新。想精确控制,必须关掉默认行为,自己监听事件。legend: { selectedMode: false },然后手动绑定 myChart.on('legendselectchanged', ...)。
selectedMode: false 关闭图例自动切换,否则你代码改了 show,用户点一下又翻回去params.name,再遍历 option.series 找到对应项,设 show: true,其余设 show: false
params.selected 是当前图例项的选中状态,但你不一定照搬——比如“只留一条”逻辑下,它永远为 true
用 CSS class 控制 visibility 而非 JS 操作 style
element.style.display 容易出错,尤其在组件化环境(Vue/React)里会和框架的 DOM 管理冲突。推荐把显隐逻辑收归 CSS 类,JS 只负责切 class。.line-hidden { display: none; } 和 .line-visible { display: block; },然后用 el.classList.add()/remove() 切换。
style.display = '' 恢复默认值时的不确定性 直接加 class,比操作父容器更精准show: false 会跳过渲染但保留数据,而 Chart.js 的 hidden: true 会影响动画队列,D3 手绘则完全由你控制 opacity 或 display。别指望一套 JS 逻辑通吃所有图表。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











