如何在Plotly中实现鼠标悬停时增大线条宽度及标记点尺寸?
实现Plotly线条与标记点的悬停放大动画效果
要实现鼠标悬停时线条变宽、标记点放大的平滑动画效果,可以通过Plotly的事件监听和样式重绘功能来完成,具体实现方式如下:
- 绑定交互事件:给图表绑定
plotly_hover和plotly_unhover事件,捕捉鼠标悬停及离开线条的动作 - 动态调整样式+过渡动画:在事件回调里调用
Plotly.restyle方法,修改线条宽度与标记点尺寸,同时通过transition参数设置动画时长,实现平滑的放大/缩小效果
以下是完整的可运行代码:
<head> <script src="https://cdn.plot.ly/plotly-2.24.2.min.js" charset="utf-8"></script> </head> <body> <div id="myDiv"></div> <script> var data = [ { x: ['2013-10-04 22:23:00', '2013-11-04 22:23:00', '2013-12-04 22:23:00'], y: [1, 3, 6], type: 'scatter', mode: "lines+markers", marker: { size: 10 }, line: { width: 4 } } ]; // 初始化图表 const plot = Plotly.newPlot('myDiv', data); // 定义样式参数和动画时长 const defaultLineWidth = 4; const defaultMarkerSize = 10; const hoverLineWidth = 8; const hoverMarkerSize = 16; const animDuration = 300; // 动画时长,单位毫秒 // 鼠标悬停时放大样式 plot.on('plotly_hover', function(eventData) { const traceIndex = eventData.points[0].curveNumber; Plotly.restyle('myDiv', { 'line.width': hoverLineWidth, 'marker.size': hoverMarkerSize }, [traceIndex], { transition: { duration: animDuration } }); }); // 鼠标离开时恢复默认样式 plot.on('plotly_unhover', function(eventData) { const traceIndex = eventData.points[0].curveNumber; Plotly.restyle('myDiv', { 'line.width': defaultLineWidth, 'marker.size': defaultMarkerSize }, [traceIndex], { transition: { duration: animDuration } }); }); </script> </body>
关键代码说明
plotly_hover/plotly_unhover:Plotly内置的交互事件,分别在鼠标悬停到数据点、离开数据点时触发Plotly.restyle:用于动态修改图表样式的核心方法,第三个参数指定要修改的trace索引,第四个参数的transition配置控制动画的平滑度- 样式自定义:你可以根据需求修改
hoverLineWidth、hoverMarkerSize以及animDuration的数值,调整到符合预期的效果
内容的提问来源于stack exchange,提问作者Neret
相关产品推荐
相关产品推荐

