搜索

首页  >  问答  >  正文

在 Plotly 热图上选择/固定单个像素

<p>在 Plotly 热图上,有时有 2 种选择模式很有用:</p> <ul> <li><p>矩形选择(已在 modbar 中提供)</p> </li> <li><p><strong>选择/固定单个像素</strong>:我试图通过回收我不需要的现有“drawcircle”按钮来实现这一点。单击时,像素应突出显示,或者其顶部有一个彩色圆盘(或红色“图钉”,如 Google 地图 UI)</p> </li> </ul> <p>问题:当在 modbar 中选择 <code>drawcircle</code> 工具时,<code>plotly_click</code> 事件不会触发(因此我们无法获取坐标),并且 <code>plotly_selected </code> 没有给出初始的鼠标点击位置。 (我不想制作真正的圆形,我只想使用第一次单击)。另请参阅 JavaScript 中的事件处理程序</p> <p> <pre class="brush:js;toolbar:false;">const z = Array.from({ length: 50 }, () => Array.from({ length: 50 }, () => Math.floor(Math.random() * 255))); const plot = document.querySelector("#plot"); const data = [{ type: 'heatmap', z: z }]; const layout = { 'yaxis': { 'scaleanchor': 'x' } }; const config = { modeBarButtons: [ ["zoom2d"], ["zoomIn2d"], ["zoomOut2d"], ["autoScale2d"], ["select2d"], ["drawcircle"] ], displaylogo: false, displayModeBar: true }; Plotly.newPlot('plot', data, layout, config); plot.on("plotly_selected", (data) => { console.log(data); }); plot.on('plotly_click', (data) => { console.log(data); });</pre> <pre class="brush:html;toolbar:false;"><script src="https://cdn.plot.ly/plotly-2.16.2.min.js"></script> <div id="plot"></div></pre> </p> <p><strong>如何在 Plotly 热图上使用“选择/固定像素/点”模式栏工具?</strong></p> <p>注意:Python 文档比 JS 版本更完整:添加/删除模式栏按钮</p>
P粉806834059P粉806834059458 天前635

全部回复(1)我来回复

  • P粉662361740

    P粉6623617402023-09-03 09:53:17

    研究了您的示例,我发现您的 console.log 没有提供预期的数据,因为 data 是循环的。但是,由于 data.points 具有单个元素,因此您可以通过 data.points[0].xdata.points[0] 获取坐标。分别为 ydata.points[0].z

    const z = Array.from({
      length: 50
    }, () => Array.from({
      length: 50
    }, () => Math.floor(Math.random() * 255)));
    const plot = document.querySelector("#plot");
    const data = [{
      type: 'heatmap',
      z: z
    }];
    const layout = {
      'yaxis': {
        'scaleanchor': 'x'
      }
    };
    const config = {
      modeBarButtons: [
        ["zoom2d"],
        ["zoomIn2d"],
        ["zoomOut2d"],
        ["autoScale2d"],
        ["select2d"],
        ["drawcircle"]
      ],
      displaylogo: false,
      displayModeBar: true
    };
    Plotly.newPlot('plot', data, layout, config);
    
    plot.on("plotly_selected", (data) => {
      console.log(data);
    });
    plot.on('plotly_click', function(data) {
      console.log({x: data.points[0].x, y: data.points[0].y, z: data.points[0].z});
    });
    <script src="https://cdn.plot.ly/plotly-2.16.2.min.js"></script>
    <div id="plot"></div>

    回复
    0
  • 取消回复