创建额外的 D3.js 符号

2024-04-14

D3 已经具有很多功能symbols https://github.com/mbostock/d3/wiki/SVG-Shapes#wiki-symbol,但我想添加一个自定义的。这样我就可以打电话d3.svg.symbol().type('custom')在我的代码中。


这不能直接完成,因为无法从 API 访问符号定义数组。

在源码中可以看到HERE https://github.com/mbostock/d3/blob/a10b22654c9275da1050e1513bbd834646c0bde3/src/svg/symbol.js#L49-L100符号定义存储在d3.map called d3_svg_symbols。该映射中唯一暴露给公共 API 的部分是键数组。这是通过调用来完成的.keys()地图方法,HERE https://github.com/mbostock/d3/blob/a10b22654c9275da1050e1513bbd834646c0bde3/src/svg/symbol.js#L102.

d3.svg.symbolTypes = d3_svg_symbols.keys();

定义本身永远不会公开,因此您无法像您希望的那样直接添加定义。

不过,您可以毫无困难地构建一个解决方法。一种方法是创建自定义符号的映射,并基于内置符号的现有函数创建一个函数。例如:

// DEFINE A COUPLE OF CUSTOM SYMBOLS
var customSymbolTypes = d3.map({
  'custom-symbol-1': function(size) {
    // returns a path-data string
  },
  'custom-symbol-2': function(size) {
    // returns a path-data string
  }
});


// CREATE A CUSTOM SYMBOL FUNCTION MIRRORING THE BUILT-IN FUNCTIONALITY
d3.svg.customSymbol = function() {
  var type,
      size = 64; // SET DEFAULT SIZE
  function symbol(d,i) {
    // GET THE SYMBOL FROM THE CUSTOM MAP
    return customSymbolTypes.get(type.call(this,d,i))(size.call(this,d,i));
  }
  // DEFINE GETTER/SETTER FUNCTIONS FOR SIZE AND TYPE
  symbol.type = function(_) {
    if (!arguments.length) return type;
    type = d3.functor(_);
    return symbol;
  };
  symbol.size = function(_) {
    if (!arguments.length) return size;
    size = d3.functor(_);
    return symbol;
  };
  return symbol;
};

然后,您可以创建一个函数来检查某个符号是否在内置符号列表中,如果不在,则假设它是自定义符号:

function getSymbol(type, size) {
  // SIZE DEFAULTS TO 64 IF NOT GIVEN
  size = size || 64;
  // IF TYPE IS ONE OF THE BUILT-IN TYPES, CALL THE BUILT-IN FUNCTION
  if (d3.svg.symbolTypes.indexOf(type) !== -1) {
    return d3.svg.symbol().type(type).size(size)();
  } 
  // OTHERWISE, CALL THE CUSTOM SYMBOL FUNCTION
  else {
    return d3.svg.customSymbol().type(type).size(size)();
  }
}

HERE http://jsbin.com/xohox/1/edit?js,output是此方法的实际演示。

我承认,必须像这样重新实现整个符号函数似乎有点疯狂。可能值得在 github 页面上提出功能请求,要求能够提供可以读入内置方法的符号定义的自定义映射。无论如何,我希望现在能有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建额外的 D3.js 符号 的相关文章

  • 具有水平和垂直组合布局的可折叠树

    我正在尝试在 D3 中创建一个可折叠树 它结合了水平 第一级和第二级 和垂直 3 级 布局 这里有一个jsfiddle http jsfiddle net artemkolotilkin z7tb23Lo 到目前为止我所得到的 除了一件事之
  • 如何运行 D3 示例

    例如https observablehq com d3 zoomable treemap https observablehq com d3 zoomable treemap 如果将脚本片段粘贴到
  • 将元素添加到 D3 圆包节点

    我正在尝试制作一个可缩放的圆形包装图 我希望每个子圆圈包含一个较小的图表 该图表始终具有相同的结构 即 4 列 只有条形的高度会改变 我尝试添加一个简单的rect到目前为止我的图表 但矩形没有添加到圆圈中并且是静态的 JS var marg
  • 如何在没有 DOM 的情况下将 javascript 作为 node.js 脚本运行?

    https github com jasondavies d3 cloud https github com jasondavies d3 cloud是一个使用 D3 库的 javascript 文字云 这是一个交互式演示 http www
  • 将任何 D3.js 图表与 DC.js 集成

    我试图弄清楚如何轻松地将任何 D3 js 图表与 DC js 库集成 以便在所有图表之间使用交叉过滤功能 我也确实理解以前曾问过这种性质的问题 添加链接以供参考 DC js 监听图表组渲染 https stackoverflow com q
  • 分配函数后如何删除 onmouseout 事件?

    我有一个问题 我正在为 onmouseout 事件分配一个函数 但运行该事件后 我需要将其删除 将非常感谢您的帮助 这取决于你的代码 如果你用 d3 这样做 那么你可以说 在 onmouseout 事件函数中 element on mous
  • 将文本放置在矩形的中心

    在下面的代码中 文本没有放置在矩形的中心 我使用的是 attr dx x bandwidth 2 attr dy y bandwidth 2 有没有办法将文本中心放置在矩形中 而不是反复试验 目前它看起来像这样 朝底部和朝右 以下是我的代码
  • D3 v4 在同一元素上进行画笔和缩放(鼠标事件不冲突)

    我的目标是构建一个使用两者的 D3 v4 图表d3 zoom https github com d3 d3 zoom and d3 brush https github com d3 d3 brush一起 如下 当鼠标位于 x 轴上时 用户
  • D3 向对象添加超链接?

    我正在尝试制作 D3 图 它将代表我网站的菜单 我尝试按照此处的其他指南添加超链接 但它们都不起作用 每个对象都会有一个不同的 URL 指向 主页 关于 联系方式等 如果添加超链接 我可以拖动对象吗 这意味着如果我按住单击 如果我单击该对象
  • d3.js 堆叠条形图 - 修改堆叠顺序逻辑

    我想创建一个堆积条形图 其中矩形的顺序由数据值确定 即最大到最小 最高到最短 最富有到最贫穷等 据我所知 在堆叠数据后 initial秩序似乎得到保留 这可以在我的代码片段中看到 硬编码数据让我们可以看到之前和之后发生的情况d3 stack
  • 避免在 ES6 的函数内定位 this 的对象作用域

    例如 我正在使用 D3 js 运行一个项目 导入特定模块并调用它们的函数 Setup TypeScript ES6 导入特定的 D3 组件 角6 我有一个对象 在本例中是一个角度指令 并在 SVG 画布上绘制一些圆圈 并希望它们在拖动事件上
  • 需要js、d3 和 nvd3 集成

    我面临整合的问题要求 questions tagged requirejs with d3 questions tagged d3 and nvd3 questions tagged nvd3 我找到了一个使用 require 的简单解决方
  • 未捕获的类型错误:无法读取未定义的属性“albersUsa”

    以前可能有人问过这个问题 但我希望我能得到针对我遇到的问题的答案 我是 d3 的新手 我现在正在尝试绘制一个纬度 经度 当我成功完成第一个纬度 经度时 我将完成其余的工作 感谢专家的任何帮助 谢谢 尝试在特定区域绘制蜂窝基站 这是代码
  • 如何使用 d3.format 获取可本地化或可定制的 si 代码

    使用 SI 代码绘制图表正是我们想要的 我们的 y 轴值往往是较大的货币值 例如 10 411 504 201 20 缩写这个 至少在美国语言环境中 这应该转换为 10 4B 但是使用 d3 format 的 s 类型表示 SI 代码 这将
  • 如何精确缩放已翻译的d3地图

    我有一张已翻译的地图 以使其正确适合画布 我正在尝试实现一种缩放它的方法 它确实有效 但是当您放大时它会远离中心 而不是以鼠标甚至画布为中心 这是我的代码 function map data total views var xy d3 ge
  • dc lineChart 单击时弹出数据点信息

    我正在尝试检测折线图数据点上的点击 Per this answer dc scatter plot binding onClick event https stackoverflow com a 22772340 1873386 I am
  • Dimple.js - 将数据标签添加到条形图的每个条形

    我使用的是dimple js 它基于d3 js 是否可以向本示例中提到的条形图的每个条形添加数据标签http dimplejs org examples viewer html id bars vertical http dimplejs
  • 如何处理 d3 中 Beeswarm 图中的碰撞?

    我一直在玩这个例子here https gf neocities org co2bs co2bee html一会儿 我想做的是突出显示图中的单个节点 圆圈 通过使用边框使其变大 稍后我也想在其中添加文本或字母 目前 我已经圈了Bhutan图
  • D3 强制布局,较大的节点聚集在中心

    我一直在修改将用于标签云的强制布局 每个标签都由一个
  • 多个链接 dc.js 图表的 d3-tooltips

    我正在寻找修改 dc js 的开箱即用工具提示 似乎有一个解决方案使用d3 js 工具提示 https github com Caged d3 tip as in 这个问题 https stackoverflow com questions

随机推荐

  • Scala 中的“Prolog 风格”:与过程代码混合?

    继续Scala 中的 prolog 风格 是什么 https stackoverflow com questions 73611934 what is prolog style in scala 我想在 Scala 3 中结合逻辑推理和过程
  • 如何刷新 Kendo UI 网格

    我正在尝试刷新 Kendo UI 网格 但尚未成功 有人可以告诉我我错过了什么或我做错了什么吗 我有以下代码 cshtml btnRefresh click function e ajax type POST url Url Content
  • iOS消费API设计

    我将为 Web 应用程序开发一个 iOS 应用程序 网络应用程序使用代码点火器 我将创建一个 iOS 应用程序将使用的 API 服务 我正在考虑创建一个 api 版本 这样当 web api 发生变化时 iOS 应用程序就会知道 担忧 当
  • 从输入字段读取属性时 HTML 编码丢失

    我使用 JavaScript 从隐藏字段中提取一个值并将其显示在文本框中 隐藏字段中的值被编码 例如
  • 从谷歌驱动器中永久删除文件

    如何使用谷歌脚本永久删除谷歌驱动器上的文件 我发现只有方法setTrashed 它将文件移至垃圾箱 但如何永久删除文件 Apps 脚本能够访问 Google API 但您需要在使用它们之前显式启用它们 Drive API 可用于删除文件 驱
  • 窗口标题文字大小

    HI 我想知道我应该在 xml 中使用什么样的属性来设置窗口标题文本大小 以下代码将有助于增加窗口标题栏的大小及其文本大小 希望这会有所帮助
  • 所有行值在一列中

    我想在一列中显示所有值 我可以怎样做呢 数据如下 user id degree fi degree en degree sv 3601464 3700 1600 2200 1020 100 0 0 3600520 100 1300 1400
  • Google_Activity 必须是 Google_ActivityObject 的实例

    我不知道这有什么错误 我可能认为谷歌 PHP 客户端库中也有人可以帮助解决这个问题 这是我的代码 this gt client gt refreshToken con 0 gt secret newtoken this gt client
  • 从外部 qss 文件读取 pyqt 样式表

    我已经制作了 pyqt stylsheet 的 qss 文件 我应该如何调用文件内容并提供给self setStylesheet from PyQt4 import QtCore s QtCore QString c myProject d
  • 激活和停用 UISearchController 时 UITableView 在位置之间跳转

    我最近在表视图中添加了 UISearchController 但遇到了动画问题 当搜索栏被点击并变为活动状态时 表格视图会向上跳跃以满足搜索控制器的新 活动 位置 这样做的问题是 搜索控制器动画到这个新位置 但表视图却没有 所以它非常不和谐
  • Android按钮栏-buttonBarButtonStyle在按钮之间留有间隙

    我在使用内置 Android 按钮栏样式时遇到一些问题 为每个按钮指定宽度 0 和权重 1 后 两个按钮之间仍然存在大约 1px 的间隙 参见图片 消除这种差距的最佳方法是什么 为什么它一开始就在那里
  • 使用按位运算符从 32 位整数检索字节

    这是问题和我目前遇到的问题 我只是不明白这是怎么错的 getByte 从字 x 中提取字节 n 字节编号从 0 LSB 到 3 MSB 示例 getByte 0x12345678 1 0x56 合法操作 gt 最大操作数 6 评级 2 in
  • ViewModel 最佳实践

    From 这个问题 https stackoverflow com questions 526641 what to put in your viewmodel 看起来让控制器创建一个是有意义的视图模型这更准确地反映了视图试图显示的模型 但
  • 按值搜索数组中的哈希值

    我有一个函数可以将 Excel 数据提取到哈希数组中 如下所示 sub set exceldata my excel file or Excel ORDERS csv if e excel file or open EXCEL OR exc
  • 如何从 Solr 查询中获取 tf 和 idf 分数?

    以下 Solr 文档 https cwiki apache org confluence display solr Function Queries https cwiki apache org confluence display sol
  • 使用 AzureReader2 调整图像大小会导致 404

    当我尝试使用 AzureReader2 调整图像大小时 收到 404 错误 但是 在使用存储模拟器进行开发时不会发生这种情况 仅在部署到 Azure 时才会发生 当没有调整大小时也不会发生这种情况 So http myapp azurewe
  • 如何使用 SQLiteOpenHelper 与 sd 卡上的数据库?

    根据这里和网络扩展应用程序中的各种答案及其继承的方法 getDatabasePath 将允许设置从标准内部存储器位置到插入的更大尺寸的 SD 卡的数据库存储路径 这对我不起作用 建议的构造仍然使用内存上的数据库 事实上 SQLiteOpen
  • 推送通知中不播放声音

    我使用的是 iOS 7 我的推送通知不播放声音 Strangely I found there is no setting for sound in the Preference gt Notification Center for my
  • 使用 Javascript 函数更改 onclick 操作

    我有一个按钮
  • 创建额外的 D3.js 符号

    D3 已经具有很多功能symbols https github com mbostock d3 wiki SVG Shapes wiki symbol 但我想添加一个自定义的 这样我就可以打电话d3 svg symbol type cust