d3.js V3 力定向图和未链接的节点

2023-12-03

我正在做我的第一个数据可视化项目。更多的是为了练习,学习 d3.js 因为数据可视化是我感兴趣的。

我的第一个项目是制作力向图。该数据集是与其毗邻州相关的 50 个州。

源是州,目标是边界州。

夏威夷和阿拉斯加没有接壤的州。

如果我在 csv 文件中将目标状态留空,它们将通过一个空字符串的中间节点相互连接。

如果我将它们的目标设置为不同长度的空字符串,它们显然会附加到节点。这几乎没问题,但现在我的工具提示上有带有空白值的节点。

它只是不是 100% 干净。

我不确定这是否可能,让节点没有任何链接。

csv 片段

Georgia,North Carolina
Georgia,South Carolina
Georgia,Tennessee
Hawaii,
Idaho,Montana
Idaho,Nevada
Idaho,Oregon

创建节点列表

var nodesList = {}

data.forEach((link) => {
  link.source = nodesList[link.source] ||
    (nodesList[link.source] = { name: link.source });
  link.target = nodesList[link.target] ||
    (nodesList[link.target] = { name: link.target });
});

我尝试在那里编写一个条件,如果源是阿拉斯加或夏威夷,则将名称设置为空,但这也不起作用。

谢谢你的帮助!


有点难以判断您在做什么,因为我们看不到您的所有代码,但似乎基本问题是您希望夏威夷和阿拉斯加出现在节点列表中,而不是出现在链接列表中。

最简单的事情就是只拥有一个 states.csv 文件,因为您知道所有状态。然后只需从 csv 中创建一个链接列表即可,该列表应该简单如下:

var links = []

data.forEach(link => {
    if (link[0] && link[1]) links.push({source: link[0], target: link[1]})
});

或者如果您更喜欢地图和过滤器:

var links = data
  .filter(link => link[0] && link[1])
  .map(link => ({source: link[0], target: link[1]}))

这是一个状态列表被截断为仅链接中的状态的版本

var svg = d3.select("svg"),
    width = +svg.attr("width"),
    height = +svg.attr("height");

var color = d3.scaleOrdinal(d3.schemeCategory20);

var simulation = d3.forceSimulation()
    .force("link", d3.forceLink().id(function(d) { return d.id; }))
    .force("charge", d3.forceManyBody())
    .force("center", d3.forceCenter(width / 2, height / 2));

var states = [
     {id:"Georgia",abbreviation:"GA"},
     {id:"Hawaii",abbreviation:"HI"},
     {id:"Idaho",abbreviation:"ID"},
     {id:"Montana",abbreviation:"MT"},
     {id:"Nevada",abbreviation:"NV"},
     {id:"North Carolina",abbreviation:"NC"},
     {id:"Oregon",abbreviation:"OR"},
     {id:"South Carolina",abbreviation:"SC"},
     {id:"Tennessee",abbreviation:"TN"},
]

var data = [
     ['Georgia','North Carolina'],
     ['Georgia','South Carolina'],
     ['Georgia','Tennessee'],
     ['Hawaii'],
     ['Idaho',  'Montana'],
     ['Idaho',  'Nevada'],
     ['Idaho',  'Oregon']
]


var links = data.filter(link => link[0] && link[1])
            .map(link => ({source: link[0], target: link[1]}))
  

  var link = svg.append("g")
      .attr("class", "links")
    .selectAll("line")
    .data(links)
    .enter().append("line")
      .attr("stroke-width", 1);

  var node = svg.append("g")
      .attr("class", "nodes")
    .selectAll("circle")
    .data(states)
    .enter().append("circle")
      .attr("r", 5)
    .call(d3.drag()
          .on("start", dragstarted)
          .on("drag", dragged)
          .on("end", dragended));

  node.append("title")
      .text(function(d) { return d.abbreviation; });

  simulation
      .nodes(states)
      .on("tick", ticked);

  simulation.force("link")
      .links(links);

  function ticked() {
    link
        .attr("x1", function(d) { return d.source.x; })
        .attr("y1", function(d) { return d.source.y; })
        .attr("x2", function(d) { return d.target.x; })
        .attr("y2", function(d) { return d.target.y; });

    node
        .attr("cx", function(d) { return d.x; })
        .attr("cy", function(d) { return d.y; });
  }

function dragstarted(d) {
  if (!d3.event.active) simulation.alphaTarget(0.3).restart();
  d.fx = d.x;
  d.fy = d.y;
}

function dragged(d) {
  d.fx = d3.event.x;
  d.fy = d3.event.y;
}

function dragended(d) {
  if (!d3.event.active) simulation.alphaTarget(0);
  d.fx = null;
  d.fy = null;
}
.links line {
  stroke: #999;
  stroke-opacity: 0.6;
}

.nodes circle {
  stroke: #fff;
  stroke-width: 1.5px;
}
<script src="https://d3js.org/d3.v4.min.js"></script>
<svg width="500" height="200"></svg>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

d3.js V3 力定向图和未链接的节点 的相关文章

随机推荐

  • Fortran if 语句中的隐式转换整数 <--> 逻辑

    我有一些遗留的 Fortran 代码 我被要求分析它们并将其翻译成现代语言 我不知道过去使用哪个编译器来编译代码 所以现在我尝试使用 gfortran 来编译它 该代码包含这样的语句 导致 gfortran 抱怨 program test
  • 将元素形成 numpy 数组作为另外两个 numpy 数组时出现广播错误

    我正在尝试生成一个 numpy 数组 其元素作为另外两个 numpy 数组 如下所示 W1b1 np zeros 256 161 W2b2 np zeros 256 257 Wx np array W1b1 W2b2 dtype np ob
  • 具有空布局的 JPanel 类不显示组件

    因此 我创建了一个 CustomPanel 类的对象 该对象创建一个带有 GridLayout 的 JPanel 和其中的标签 然后将其添加到我的 JFrame 中 它可以很好地显示标签 HELLO 但是当我将 jpanel 的布局管理器更
  • 带有单位的 POSIXct 的差异,就像 difftime 一样

    我有一个 POSIXct data 向量 想要计算连续元素之间的差异 就像通过diff e g burst lt as POSIXct c 2016 11 07 17 20 52 2016 11 07 16 21 52 2016 11 07
  • constexpr 和 RTTI

    我想做这样的事情 template
  • 如何在编译时显示 #define 的值?

    我试图找出我的代码认为它使用的 Boost 版本 我想做这样的事情 error BOOST VERSION 但预处理器不会扩展 BOOST VERSION 我知道我可以在程序运行时将其打印出来 并且我知道我可以查看预处理器的输出来找到答案
  • C# 中用户定义的编译器警告或错误[重复]

    这个问题在这里已经有答案了 是否可以让某些代码让编译器生成编译警告或错误 也许有属性 有了第一个答案和一些评论 我意识到我的问题并不像我预期和希望的那么清晰 我道歉 希望所有贡献者仍然和我们在一起 所以我更倾向于内部 DSL S Th 喜欢
  • 以固定的迭代次数迭代 for 循环

    我在 ant 脚本中使用 ant contrib 库 但我不知道如何制作固定金额 使用 foreach 标签的循环 我所说的固定迭代次数并不是指某些硬编码值 而是从命令行提供的 ant 属性 以下代码创建一个具有固定次数 5 次迭代的循环
  • 来自 iframe 本身的 iframe 上的 div

    我有一个 div 包含在外部 html 的 iframe 内 基于 html 的 上下文菜单 需要位于 iframe 之上 但上下文菜单的 html 代码位于 iframe 本身中 首选纯 CSS 解决方案 iframe 的内容无法显示在
  • JpegBitmapEncoder.Save() 在使用元数据写入图像时抛出异常

    我正在构建一个 WPF 桌面应用程序来帮助我组织照片以发布到 Facebook 以下是我在新位置创建照片副本并添加标题 EXIF IPTC XMP 的代码 private void SaveImageAs string currPath s
  • 查找列表中总计达到目标数字的元素

    假设我有一个列表 List
  • 如何动态增加 UITableViewCell 的高度

    我有一个 UITableView 其中包含 UITableViewCells 列表 我在方法中设置了 UITableViewCells 的高度 CGFloat tableView UITableView tableView heightFo
  • 在 Plotly 中悬停/单击时更改整个迹线的颜色

    我在绘图中绘制了当前图形 下面的 jupyter 笔记本代码 并希望创建这样的效果 当您将鼠标悬停或单击每个迹线时 整个迹线将以不同的颜色突出显示 在本例中为红色 我尝试从 SOF 中实现这些示例 Python 中的 Plotly 如何突出
  • 根据泛型类型调度不同的函数

    我想编写一个函数 让我分派传入的泛型类型 我不关心运行时值 只关心编译时类型 const value any const x DateTime parseAs
  • 在 C++ 中以特定间隔速率调用方法

    这真的让我很恼火 因为我以前做过 大约一年前 我一辈子都不记得那是什么图书馆了 基本上 问题是我希望能够以指定的时间间隔调用某个方法一定次数或一定时间段 一个例子是我想从现在开始调用方法 x 10次 每0 5秒一次 或者 从现在开始调用方法
  • 当我们删除一个项目时,字典会调整大小吗?

    在Python中 当我们从字典中删除一个项目时 字典会调整大小还是重建字典表 从一些网站和博客中我了解到 当我们从字典中删除一个项目时 Python会在删除的键中插入一个虚拟键来填充字典条目 稍后 Python将通过调用一些清理函数来清理虚
  • 密钥库类型:使用哪一种?

    通过查看文件java security of my JRE 我看到默认使用的密钥库类型设置为JKS Here 有一个可以使用的密钥库类型的列表 有推荐的密钥库类型吗 不同密钥库类型的优点 缺点是什么 与您链接到的标准名称列表中列出的类型相比
  • 缩放以显示 bing 地图中的所有位置

    假设我有 3 个图钉 1 加利福尼亚州 2 佛罗里达州 3 纽约 为了让这三个人都可见 我必须缩小到足够远才能看到整个国家 但可以说我有 1 加利福尼亚州 2 内华达州 3 德克萨斯州 我必须缩小才能覆盖美国的西南角 Windows Pho
  • Derby 数据库表列名称格式在查询中不一致

    当查询 Derby 数据库时 我发现对于某些表 我必须双引号列名并使用表名来限定列名 但对于其他一些表 我不需要 这些表会发生什么 如何使所有表相同并且可以在没有双引号和表名限定符的情况下查询它们 我正在使用 NetBeans IDE 的
  • d3.js V3 力定向图和未链接的节点

    我正在做我的第一个数据可视化项目 更多的是为了练习 学习 d3 js 因为数据可视化是我感兴趣的 我的第一个项目是制作力向图 该数据集是与其毗邻州相关的 50 个州 源是州 目标是边界州 夏威夷和阿拉斯加没有接壤的州 如果我在 csv 文件