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

Vue3中使用D3-Hexbin报错:_d3_hexbin__WEBPACK_IMPORTED_MODULE_3__ is not a function

解决D3-Hexbin导入报错TypeError: ... is not a function的问题

核心问题:导入方式错误

d3-hexbin的ES模块采用默认导出而非命名导出,你用import * as d3hexbin会把整个模块对象导入,直接调用d3hexbin()自然会报错(对象不是函数)。

正确导入方案

有两种可行的导入方式,选一种即可:

方案1:直接默认导入hexbin函数

import * as d3 from "d3";
import hexbin from "d3-hexbin";

// 直接使用导入的hexbin函数创建实例
const hex = hexbin().radius(9).extent([
  [0, 0],
  [hexW, hexH]
]);

方案2:将hexbin挂载到D3对象(贴合传统用法)

如果你习惯用d3.hexbin()的写法,可以手动挂载:

import * as d3 from "d3";
import { hexbin } from "d3-hexbin";

// 把hexbin注册到d3对象上
d3.hexbin = hexbin;

// 之后即可用d3.hexbin()创建实例
const hex = d3.hexbin().radius(9).extent([
  [0, 0],
  [hexW, hexH]
]);

代码额外优化点

你当前代码里存在重复创建hexbin实例的冗余:

// 这行是多余的,直接用导入后的hexbin函数即可
let hexbin = d3hexbin(); 
// 后面又重新创建了一次
const hex = hexbin().radius(9)...

删除第一行冗余代码,避免变量名冲突和逻辑混乱。

数据处理验证

最后确认dataHexMap.values()是否是hexbin处理后的正确数据:
通常hexbin需要先传入原始坐标数组生成bin数据:

// 假设rawData是你的经纬度坐标数组,格式如[[lon1, lat1], [lon2, lat2], ...]
const bins = hex(rawData);
// 然后用bins作为data的参数
.selectAll("path")
.data(bins)

如果dataHexMap.values()不是经过hexbin处理的结果,也会导致渲染失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 03:57:14