javascript - 使用 D3.js 编写简单的力布局应用程序

标签 javascript d3.js force-layout

我开始学习 D3.js 并想使用强制布局编写一个简单的应用程序。目标是创建 3 个 float 节点,并且可以使用鼠标拖动。这就是我使用文档的程度,但是我看到的只是窗口左上角的一个小黑色圆圈(我假设所有三个圆圈都在那里重叠)。我对每个步骤都发表了评论 - 至少我认为他们正在这样做。

<!doctype html>
<html>
<head>
    <title>Simple Force Layout</title>
    <script type="text/javascript" src="http://mbostock.github.com/d3/d3.js?1.29.1"></script>
    <script type="text/javascript" src="http://mbostock.github.com/d3/d3.geom.js?1.29.1"></script>
    <script type="text/javascript" src="http://mbostock.github.com/d3/d3.layout.js?1.29.1"></script>
</head>

<body>
    <div id="canvas"></div>

    <script type="text/javascript">

var conf = {
    canvasWidth: 600,
    canvasHeight: 400
}

var nodes = [
    { 'name': 'Node 1' },
    { 'name': 'Node 2' },
    { 'name': 'Node 3' }
];

// Add nodes to force layout and start it
var force = d3.layout.force()
    .nodes(nodes)
    .size([conf.canvasWidth, conf.canvasHeight])
    .start();

// Create an svg element
var svg = d3.select("#canvas")
    .append("svg:svg")
    .attr("width", conf.canvasWidth)
    .attr("height", conf.canvasHeight);    

// Create a circle for each node
var circle = svg.append("svg:g").selectAll("circle")
    .data(force.nodes())
  .enter().append("svg:circle")
    .attr("r", 6)
    .call(force.drag);

    </script>
</body>
</html>

我的问题:

  1. 我错过了什么?我还需要做什么才能使节点 float 并可拖动?
  2. 我想要一个混合节点或圆形和矩形节点(基于节点的某些属性)。我该怎么做?
  3. 当我运行应用程序时,我在 Firebug 中看到以下错误:

    “网络错误:404 未找到 - http://mbostock.github.com/d3/d3.geom.js?1.29.1” d3.geom.js?1.29.1

    “网络错误:404 未找到 - http://mbostock.github.com/d3/d3.layout.js?1.29.1

这是为什么呢?我尝试过的一些强制布局示例也给出了此错误,但它们似乎工作正常!

最佳答案

我将尝试通过向您展示有效的示例来回答您的问题。

  1. 强制布局有一个特殊性,它首先显示 屏幕上部的所有节点。由于您的节点有 它们之间没有链接(如果有,我在您的代码中看不到它) 它们被绘制在彼此之上是正常的。你可以尝试 通过设置 X 和 Y 属性来修复此初始渲染 节点到屏幕上的随机位置。至于 float 问题:我不是 100% 确定这会起作用,因为我还没有测试过它, 但你可以尝试对你的节点施加不同的力,或者在 至少在显示窗口的 Angular 落。这将确保 他们移动并且不会离开屏幕(或使用窗口的 边界框)。另外你还需要检查一些相关的力属性 如果您想确保布局的速度和稳定性 节点将始终移动,而不仅仅是 float 一段时间并保持在 固定位置。对于可拖动的节点,请调用 force.drag ,如下所示 http://bl.ocks.org/1095795

  2. 这个例子展示了如何在 View 中呈现不同形状的节点。 力布局:http://bl.ocks.org/1062383 .

  3. 我建议使用 D3 的单文件版本,它通常具有 名为 d3v2 或类似文件的文件...您可能无法 由于网络问题或 CORS 问题而访问这些文件,或者 类似的东西,意味着浏览器不会向您提供 文件。您似乎使用了非常旧的 D3 版本(一年了?)。 A 看起来更像您在下一个片段中看到的版本 可能不会向您抛出该错误:如果您 不能使用在线版本,只需下载文件并将其放入 同一目录。

稍微玩一下 D3 示例并阅读文档。

关于javascript - 使用 D3.js 编写简单的力布局应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10679720/

相关文章:

d3.js - 在圆内添加图像 D3

javascript - 在 D3 中移动固定节点

JavaScript/HTML/CSS 半色调线条效果

javascript - 为什么这个 jQuery 动画会上下跳跃?

javascript - 如何创建自定义 <select>?

javascript - 在 d3 饼图中制作可滚动的工具提示

javascript - 如何使用 jQuery 在事件中重置表单元素(输入、选择、文本区域等)

javascript - 通过 D3.js 表示科学数据的示例

javascript - d3.format 有 "reverse"函数吗?

javascript - d3.js 强制布局具有一些固定节点(在网格中)