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

如何禁用Plotly.js双击标记放大功能并保留双击缩小重置特性

问题解答

这个需求可以实现,且不需要修改Plotly源码,根据使用场景有两种对应实现方案:


方式1:配置项直接实现(适配你当前的代码场景)

你给出的示例代码已经在layout中提前定义了xaxis.range和yaxis.range作为初始视图范围,这种场景下只需要在调用Plotly.newPlot时传入配置参数,将doubleClick属性设置为'reset'即可。
该配置的效果是:任何时候双击图表,都会直接重置回你在layout里预先定义的初始坐标轴范围,不会触发默认的自动适配标记放大行为,完全满足保留双击重置、禁用双击放大的要求。

修改后的完整代码如下:

var trace1 = {
  x: [1, 2, 3, 4, 5],
  y: [1, 6, 3, 6, 1],
  mode: 'markers',
  type: 'scatter',
  name: 'Team A',
  text: ['A-1', 'A-2', 'A-3', 'A-4', 'A-5'],
  marker: { size: 12 }
};

var trace2 = {
  x: [1.5, 2.5, 3.5, 4.5, 5.5],
  y: [4, 1, 7, 1, 4],
  mode: 'markers',
  type: 'scatter',
  name: 'Team B',
  text: ['B-a', 'B-b', 'B-c', 'B-d', 'B-e'],
  marker: { size: 12 }
};

var data = [ trace1, trace2 ];

var layout = {
  xaxis: {
    range: [ 0.75, 5.25 ]
  },
  yaxis: {
    range: [0, 8]
  },
  title:'Data Labels Hover'
};

// 新增双击行为配置
var config = {
  doubleClick: 'reset'
};

// 传入配置参数初始化图表
Plotly.newPlot('myDiv', data, layout, config);

方式2:事件监听实现(适配初始范围自动计算的场景)

如果你的图表初始没有写死坐标轴范围,是Plotly首次渲染时自动计算的适配范围,可以通过监听双击事件、判断当前视图状态的方式实现需求,核心逻辑:

  • 图表首次渲染完成后,记录当前自动计算的坐标轴初始范围
  • 禁用默认的双击行为,绑定自定义双击监听逻辑
  • 双击触发时判断当前坐标轴范围是否和初始范围一致:如果一致则不执行任何操作(拦截默认放大),如果不一致则重置回初始范围(保留双击重置特性)

参考代码片段:

// 执行初始渲染
Plotly.newPlot('myDiv', data, layout).then(gd => {
  // 渲染完成后记录初始轴范围
  const initialRange = {
    xaxis: [...gd.layout.xaxis.range],
    yaxis: [...gd.layout.yaxis.range]
  };

  // 禁用默认双击行为
  gd._context.doubleClick = false;

  // 绑定自定义双击逻辑
  gd.on('plotly_doubleclick', () => {
    const currentXRange = gd.layout.xaxis.range;
    const currentYRange = gd.layout.yaxis.range;
    // 判断当前是否处于初始视图
    const isAtInitialView = currentXRange[0] === initialRange.xaxis[0] 
      && currentXRange[1] === initialRange.xaxis[1]
      && currentYRange[0] === initialRange.yaxis[0]
      && currentYRange[1] === initialRange.yaxis[1];
    
    // 非初始视图下执行重置
    if (!isAtInitialView) {
      Plotly.relayout(gd, initialRange);
    }
  })
})

补充说明

doubleClick配置项的可选值及对应行为:

  • 'reset+autosize':默认值,当前处于初始视图时双击会自动放大适配所有数据标记,当前处于放大/平移后的视图时双击重置回初始范围
  • 'reset':双击永远重置回预设/渲染完成时的初始轴范围,不会触发自动放大逻辑
  • 'autosize':双击永远执行自动适配所有标记的放大操作
  • false:完全禁用所有双击相关行为

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:24:34