当前位置: 首页 > 知识库问答 >
问题:

鱼眼扭曲插件的怪异行为

瞿博易
2023-03-14

嗨,我想使用鱼眼失真插件为我的力定向图在d3。但当我想应用这个插件时,graph的行为很奇怪。我是d3新手。而且不擅长计算机图形学。

在jsfiddle中完成示例

var fisheye = d3.fisheye.circular()
                        .radius(200)
                        .distortion(2);

    // graph - variable which represents whole graph                    
    graph.svg.on("mousemove", function() {
    fisheye.focus(d3.mouse(this));

    d3.select("svg").selectAll("circle").each(function(d) { d.fisheye = fisheye(d); })
                                .attr("cx", function(d) { return d.fisheye.x; })
                                .attr("cy", function(d) { return d.fisheye.y; })
                                .attr("r", function(d) { return d.fisheye.z * 4.5; });


    d3.select("svg").selectAll("line").attr("x1", function(d) { return d.source.fisheye.x; })
                                .attr("y1", function(d) { return d.source.fisheye.y; })
                                .attr("x2", function(d) { return d.target.fisheye.x; })
                                .attr("y2", function(d) { return d.target.fisheye.y; });   
                    });

奇怪的行为我的意思是图的节点在鼠标悬停后消失(隐藏)。

共有1个答案

汤兴生
2023-03-14

问题是,您使用代码将cxcy添加到圆圈中,但是您的圆圈实际上被封闭在nodeElements中,这些节点被转换编辑到位。

因此,将鱼眼代码更改为以下代码可以解决问题:

graph.svg.on("mousemove", function() {
    fisheye.focus(d3.mouse(this));

    // Change transform on the .node
    d3.select("svg").selectAll(".node")
    .each(function(d) { d.fisheye = fisheye({ x: graph.x(d.x), y: graph.y(d.y) }); console.log(d.fisheye, d); })
    .attr("transform", function (d) { return "translate(" + d.fisheye.x + "," + d.fisheye.y + ")"; })
    // Now change the 'r'adius on the circles within
    // One can also scale the font of the text inside nodeElements here
    .select("circle")
    .attr("r", function(d) { return 15 * graph.nodeSizeFactor * d.fisheye.z; });


    d3.select("svg").selectAll("line")
    .attr("x1", function(d) { return d.source.fisheye.x; })
    .attr("y1", function(d) { return d.source.fisheye.y; })
    .attr("x2", function(d) { return d.target.fisheye.x; })
    .attr("y2", function(d) { return d.target.fisheye.y; });   
});

请注意,我还应用了适当的尺度图. x图. y用于变换属性和15*graph.nodeSizeFactor用于圆的半径(而不是4.5 )。

工作演示:http://jsfiddle.net/90u4sjzm/23/

 类似资料:
  • 问题内容: 什么是Twisted最接近的Java替代方案? 问题答案: 与斯蒂芬(Stephane)一样,我建议您看一下Mina。它是异步网络IO的框架。它建立在前面提到的NIO之上,并且IMO隐藏了与Selectors,Channels等有关的一些复杂性。我已经使用Mina进行了几个项目,其效果相当不错,但是请注意,我发现文档有些薄弱。再有,就像Stephane提到的那样,它并没有对太多协议的现

  • 问题内容: 我正在尝试使用扭曲的海螺在python中实现一个非常简单的文件传输客户端。客户端应该简单地以编程方式将一些文件传输到远程ssh / sftp服务器。该功能提供了用户名,密码,文件列表,目标服务器:目录,只需要以跨平台的方式进行身份验证和复制。 我已经阅读了有关Twisted的一些入门资料,并设法制作了自己的SSH客户端,该客户端仅在远程服务器上执行。我很难将其扩展到移动文件。我看了cf

  • 问题内容: 谁能推荐一些简单的代码来使用Twisted设置简单的JSON RPC客户端和服务器? 我找到了txJSON-RPC,但我想知道是否有人对使用这些anc有一定的经验可以推荐一些东西。 问题答案: txJSONRPC很棒。我使用它,并且有效。我建议您尝试一下。 客户: 作为奖励,我将保留一些替代方案:放大器。 http://amp-protocol.net

  • 我已经成功地为一个示例数据集实现了codeflower视图。用于实现这一目标的代码是: 我现在希望添加鱼眼扭曲到这个可视化,不知道如何去做。我已经研究了鱼眼的留档,但当我使用codeflower.js我不确定如何访问svg元素了。任何帮助都很感激。谢谢你。

  • 地图鹰眼插件。 示例 <vuep template="#example"></vuep> <script v-pre type="text/x-template" id="example"> <template> <div class="amap-page-container"> <el-amap vid="amap" :plugin="plugin" class="a

  • 我试图扭曲d3.geo.path()地图与fisheye.js插件(https://github.com/d3/d3-plugins/tree/master/fisheye)。 要扭曲一个对象,插件需要x 在d3中。它说: 投影函数采用表示位置坐标的两元素数字数组[经度,纬度],并返回表示投影像素位置[x,y]的类似两元素数字数组。例如,基本的球面墨卡托投影: https://github.com