Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >气泡图中y位置的强制碰撞

我正在尝试使用d3.forceSimulation,它将一个力应用于图表圆的y位置,以防止它们重叠。

最终的图表应该是这样的-

我一直在遵循一些例子,但无法让y位置以正确的方式进行调整。不幸的是,我不知道哪里出了问题。任何正确方向的提示都将不胜感激!

到目前为止,这是我的代码:

代码语言:javascript
运行
AI代码解释
复制
    //ADDING SKELETON FOR THE CHART//
    let width = 900;
    let height = 300;
    let margin = {x: 50, y:20};

    let chartDiv = d3.select('body').append('div').attr('id', 'bubble-chart');
    let svg = chartDiv.append('svg');
    svg.attr('height', height).attr('width', width + margin.x);

    //SCALES FOR X POSITION//
    let posScale = d3.scaleLinear().domain([(0-overallMax), overallMax]);
    posScale.range([0, width]);

    //SCALES FOR COLOR//
    let colorScale = d3.scaleOrdinal().domain(groupData.map(g=> g[0])).range(d3.schemeSet3);

    //SCALE FOR CIRCLE SIZE//
    let circleScale = d3.scaleLinear().domain([d3.min(data.map(d=> +d.total)), d3.max(data.map(d=> +d.total))])
    .range([3, 10]);

    //SIMULATION PART
    let simulation = d3.forceSimulation().nodes(data)
        .force('center', d=> d3.forceCenter(posScale(d.position), height/2))
        //.force('charge', d3.forceManyBody().strength(.1))
        .force('collision', d3.forceCollide().radius( d => circleScale(+d.total)))
        .on('tick',ticked)

    let circleGroup = svg.append('g').attr('transform', `translate(${margin.x / 2})`);

    let circles = circleGroup.selectAll('circle').data(data).join('circle');
    circles.attr('r', (d)=> circleScale(+d.total))//.attr('cx', (d) => posScale(d.position)).attr('cy', 50);
    .attr("cx", d=> posScale(d.position))
    .attr("cy", height / 2)
    circles.attr('fill', (d)=> colorScale(d.category));
    circles.style('opacity', '0.5');

    // Apply these forces to the nodes and update their positions.
// Once the force algorithm is happy with positions ('alpha' value is low enough), simulations will stop.
    function ticked(){
     circles.attr("cy", d=> d.y).attr('cx', d=> posScale(d.position));

   }

使用上面的代码,我的图表如下所示:

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-30 22:53:31

这不是如何创建蜂群图表(这种数据可视化的技术名称)。您应该在模拟中使用forceXforceY来设置位置。在您的案例中:

代码语言:javascript
运行
AI代码解释
复制
let simulation = d3.forceSimulation().nodes(data)
    .force("x", d3.forceX(function(d) { 
        return posScale(d.position); 
    }).strength(foo))
    .force("y", d3.forceY(50).strength(bar))
    .force('collision', d3.forceCollide().radius( d => circleScale(d.total)))
    .on('tick',ticked)

然后,根据需要调整强度(foobar),并更改ticked函数以使用模拟提供的xy属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58176019

复制
相关文章
出现Uncaught ReferenceError: $ is not defined错误
今天在写ajax请求的时候,出现了Uncaught ReferenceError: $ is not defined报错;$未定义是为什么呢?
meihuasheng
2021/03/16
4.1K0
小程序报错-ReferenceError: regeneratorRuntime is not defined
在使用微信开发者工具导入小程序运行的时候 出现了这样的一个bug 小程序报错-ReferenceError: regeneratorRuntime is not defined
王小婷
2021/06/21
2.6K0
小程序报错-ReferenceError: regeneratorRuntime is not defined
ReferenceError: React is not defined
之前的一个项目报错 ReferenceError: React is not defined ,如下图:
德顺
2023/03/16
2.6K0
ReferenceError: React is not defined
beatPicker使用出现Uncaught ReferenceError: module is not defined
最近用到了beatpicker时间选择插件,但在使用中却遇到了一个问题,多次在其他页面切换时会出现“VM2358:1494 Uncaught ReferenceError: module is not defined”这个异常,测试组的同事说这个问题是在自己来回切换几个页面时出现的这个问题,我进行测试时确实会出现这个问题,后来找到产生这个异常根本无需在多个页面之间来回切换,只需在其中一个页面与我负责的页面之间切换下就会出现,到这里我特想推荐一本书:你以为你以为的就是你以为的吗
johnhuster的分享
2022/03/28
9630
一步一步教你把 Redux Saga 添加到 React&Redux 程序中
applyMiddleware 是一个辅助函数,为 redux 的 dispatch 函数添加了功能。
winty
2020/08/16
1K0
ReferenceError: primordials is not defined错误解决
1.问题场景: 接手了一个老的项目,啥子说明文档都没有,npm install开干,报错如下: 提取关键字: ReferenceError: primordials is not defined  经过网络搜索排查,说是gulp与node版本冲突引起。 首先安装gulp,查看版本 查看node版本 npm install gulp -g gulp -v node -v  2.问题解决 网上试了好多方法,都不行,最后,降低node版本为11.15.0,可解决问题 用nvm管理node版本,切换为n
五月
2022/11/15
1.6K0
ReferenceError: primordials is not defined错误解决
ReferenceError: React is not defined 报错解决方法
issues 详情:https://github.com/facebook/create-react-app/issues/9882
小鑫
2022/04/26
5.2K0
IE11出现"__doPostBack”未定义
  系统做迁移,在新服务器IIS上部署,部署后的系统在IE8和其他浏览器上显示正常,
_一级菜鸟
2020/07/22
2.6K0
7种你应该知道的JavaScript常见的错误
我们有一个带有两个元素的arr。接下来,我们尝试使数组包含90**99 == 2.9512665430652753e+193元素。
葡萄城控件
2020/03/19
2.6K0
一篇文章教你如何捕获前端错误
随着前端页面承载功能越来越多,用户本地浏览器环境也错综复杂,因此即使有完善的测试,我们也无法保证上线的代码不会出错。在这种场景下,前端页面的监控就成了各个web项目必备的工具。
杨振涛
2019/07/31
3.9K0
一篇文章教你如何捕获前端错误
JavaScript代码在用户浏览器中执行时,由于一些边界情况、本地环境的不可控等因素,可能会存在js运行时错误。
2020labs小助手
2019/07/10
3.3K0
javaScript代码飘红报错看不懂?读完这篇文章再试试!
2、TypeError(类型错误):变量或参数不是预期类型,或调用对象不存在的属性方法。错误之前的代码会执行,之后代码不会执行。
用户1272076
2020/08/17
5.5K0
React 中必会的 10 个概念
您可能知道,定义React组件的最简单方法是编写 JavaScript 函数,如以下示例所示。
前端老王
2020/07/08
6.7K0
Navicat 连接MySQL数据库出现错误:2059
MySQL新版本(8以上版本)的用户登录账户加密方式是【caching_sha2_password】,Navicat不支持这种用户登录账户加密方式。
全栈程序员站长
2022/09/28
7.6K1
Navicat 连接MySQL数据库出现错误:2059
出现500错误
早上闲来无事,在cpanel后台转悠,看到了hotlink保护,想想是不是设置一下防盗链呢,这个博客开始到现在也没有几张有价值的图片,其实防盗链没所谓的,凑凑热闹设置一下,以前用过cpanel后台的免费空间,设置过hotlink,所以就没在意,设置完关掉了。
空空裤兜
2023/03/03
1.7K0
你必须掌握的 7 种 JavaScript 错误类型
我们有一个数组,带有两个元素的arr。 接下来,我们尝试将数组扩展为包含90 ** 99 = 2.9512665430652753e + 193元素。
用户8983410
2021/09/19
4.2K0
你应该知道的7 个 JavaScript 原生错误类型
我们有一个数组,带有两个元素的 arr。接下来,尝试将数组扩展为包含 90**99 == 2.9512665430652753e+193 个元素。
疯狂的技术宅
2020/03/13
2.7K0
1000多个项目中的十大JavaScript错误以及如何避免
通过统计数据库中的1000多个项目,我们发现在 JavaScript 中最常出现的错误有10个。下面会向大家介绍这些错误发生的原因以及如何防止。 对于这些错误发生的次数,我们是通过收集的数据统计得出的
葡萄城控件
2018/03/27
8.5K0
1000多个项目中的十大JavaScript错误以及如何避免
详解ES7的async及webpack配置async
版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/article/details/78210599
空空云
2018/09/27
2.4K0
点击加载更多

相似问题

如何利用iText在PDF上生成动态表

15

如何使用itext在pdf中放置表格

17

在ColdFusion中用iText填写pdf表格实例

10

在iText中动态获取表格高度

23

在iText中生成PDF的基本模板

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文