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

极坐标热力图点系列:能否拖拽数据点至新位置?

极坐标图表数据点拖拽实现方案

首先你当前代码里禁用了鼠标交互,这是无法拖拽数据点的核心原因,先把相关配置调整过来:

const pointSeries = polarChart
  .addPointSeries()
  // 启用鼠标交互和光标,这是拖拽功能的前提
  .setMouseInteractions(true)
  .setCursorEnabled(true)
  .setAutoScrollingEnabled(false)
  .setPointSize(10);

接下来通过添加拖拽事件监听,实现数据点的拖拽更新:

// 记录当前被拖拽的点索引与原始数据
let draggingPointIndex: number | null = null;

// 监听拖拽开始事件,锁定目标数据点
pointSeries.onDragStart((_, event) => {
  const targetPoint = event.point;
  if (targetPoint) {
    draggingPointIndex = targetPoint.index;
  }
});

// 监听拖拽过程,实时更新数据点位置
pointSeries.onDrag((_, event) => {
  if (draggingPointIndex === null) return;
  
  // 将鼠标屏幕坐标转换为图表笛卡尔坐标
  const chartCoords = polarChart.screenToCoordinate(event.mousePosition);
  // 从笛卡尔坐标计算极坐标的angle(弧度)和amplitude
  const angle = Math.atan2(chartCoords.y, chartCoords.x);
  const amplitude = Math.sqrt(chartCoords.x ** 2 + chartCoords.y ** 2);
  
  // 更新数据数组并刷新图表
  const updatedData = [...pointSeries.get()];
  updatedData[draggingPointIndex] = { angle, amplitude };
  pointSeries.setData(updatedData);
});

// 监听拖拽结束事件,清除拖拽状态
pointSeries.onDragEnd(() => {
  draggingPointIndex = null;
});

关键说明:

  • screenToCoordinate方法负责将鼠标的像素坐标转换为图表内部的笛卡尔坐标系坐标,再通过三角函数推导极坐标参数。
  • 若需要限制拖拽范围(比如amplitude的最大值),可以在计算出angle和amplitude后添加判断逻辑,过滤不符合要求的数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:57:12