- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我在堆栈中查看了不同的链接距离,似乎为了改变链接距离,您需要实现一个函数,然后传递该函数以动态分配链接距离:
function linkDistance(d) {
return d.distance;
}
然后我认为我可以传递给 svg,但返回函数错误而不是现有的 linkdistance 或 distance
var link = svg.selectAll(".link")
.data(bilinks)
.enter().append("path")
.style("stroke", "#6b7071") //gunmetal grey link
.attr("class", "link")
.linkDistance(linkDistance)
.attr("fill", "none")
使用文档中的 .linkDistance:https://github.com/d3/d3/blob/master/API.md#forces-d3-force理想情况下,我想使用数据修改链接距离、电荷、力和链接颜色等参数,就像我对点的颜色所做的那样,但是,我相信我缺乏关于如何正确执行此操作的知识。例如在最后一行代码中,如果我要更改 from:to
.style("stroke", "#6b7071") //gunmetal grey link
.style("stroke", function(d) { return color(d.group);})
链接颜色是一种颜色,而根据该组,我预计会有 39 种颜色。此外,我也尝试过
var simulation = d3.forceSimulation()
.force("link", d3.forceLink().distance(function(d) {return d.distance}).strength(0.1))
.force("charge", d3.forceManyBody(30))
.force("center", d3.forceCenter(width / 2, height / 2));
更新:我不确定长度数据是否在链接和双链接的数组中,以便我可以引用距离但是似乎无法使用数组中的值但是 console.log 显示它被正确存储
代码
<!DOCTYPE html>
<meta charset="utf-8">
<style>
.node {
stroke: #fff;
stroke-width: 1.5px;
}
</style>
<svg width="15000" height="15000"></svg>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script>
//change background color to black
backgroundColor = d3.rgb('#000000')
d3.select("body").style("background-color", backgroundColor)
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().distance(500).strength(0.1))
.force("charge", d3.forceManyBody())
.force("center", d3.forceCenter(width / 2, height / 2));
d3.json("hc7data.json", function(error, graph) {
if (error) throw error;
var nodes = graph.nodes,
nodeById = d3.map(nodes, function(d) { return d.id; }),
links = graph.links,
bilinks = [];
//get graphics to make color scale us scaleOrdinal if every color chosen
var color = d3.scaleOrdinal()
.domain([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40])
.range(["#af1f45", "#be4f5e","#cd767c","#dc9d9e","#ecc9c8","#fbdbe9","#f7bbd5","#f49ac1","#f179ae","#ef509c",
"#e3d4e4","#cdb1cf","#9a5699","#b990ba", "#a973a9","#d6eaf3","#b0daeb","#8acce4","#5ebfde","#00a5db","#6dbe46","#e0efd4",
"#c3e0ae","#a7d48b","#8cc866","#fff2d1","#ffe8a8","#ffdf80","#ffd751","#fecf07","#fee1c9","#fcc79c","#faae74","#f69d58",
"#f7964a","#fde3d9","#fcccbc","#f58870","#f9b4a0","#f79e87"]);
links.forEach(function(link) {
var s = link.source = nodeById.get(link.source),
t = link.target = nodeById.get(link.target),
i = {}, // intermediate node
linkDist = link.distance;
nodes.push(i);
//console.log(linkDist);
links.push({source: s, target: i, linkDist:linkDist}, {source: i, target: t, linkDist:linkDist });
bilinks.push([s, i, t,linkDist]);
});
var link = svg.selectAll(".link")
.data(bilinks)
.enter().append("path")
.style("stroke", "#6b7071") //gunmetal grey
.attr("class", "link")
.attr("fill", "none")
var node = svg.selectAll(".node")
.data(nodes.filter(function(d) { return d.id; }))
.enter().append("circle")
.attr("class", "node")
//change circle size according to new function
.attr("r", function(d) {return d.size})
.attr("fill", function(d) { return color(d.group); })
.style("stroke", "#000000")
//.style("stroke", function(d) { return color(d.group); })
.call(d3.drag()
.on("start", dragstarted)
.on("drag", dragged)
.on("end", dragended));
node.append("title")
.text(function(d) { return d.id; });
simulation
.nodes(nodes)
.on("tick", ticked);
simulation.force("link")
.links(links);
function ticked() {
link.attr("d", positionLink);
node.attr("transform", positionNode);
}
});
function positionLink(d) {
return "M" + d[0].x + "," + d[0].y
+ "S" + d[1].x + "," + d[1].y
+ " " + d[2].x + "," + d[2].y;
}
function positionNode(d) {
return "translate(" + d.x + "," + 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;
}
</script>
json文档示例
{
"nodes": [
{
"id": "test1",
"group": 1,
"size": 10
},
{
"id": "test2",
"group": 1,
"size": 10
}
],
"links": [
{
"source": "test1",
"target": "test2",
"value": 1,
"distance": 5
},
{
"source": "test2",
"target": "test1",
"value": 1,
"distance": 5
}
]
}
最佳答案
我相信你快到了。使用像 function(d) {return d.distance}
这样的自定义函数是正确的方法。但是,您不需要在链接数组中推送额外信息,因为链接已经包含 JSON 文件的属性。
正如您所提到的,模拟可以声明为使用距离属性,如下所示:
var simulation = d3.forceSimulation()
.force("link", d3.forceLink().distance(function(d) {return d.distance;}).strength(0.1))
并且没有必要将额外信息推送到链接数组,因此您可以删除这一行:
links.push({source: s, target: i, linkDist:linkDist}, {source: i, target: t, linkDist:linkDist });
我用一些修改过的 JSON 创建了一个 JSFiddle 来显示结果 here .我添加了一个额外的链接到另一个距离较短的节点以显示效果。
关于javascript - d3.forcesimulation() 链接距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40872317/
A是不同元素的序列,B是A的子序列,A-B是A中的所有元素,但不是B中的所有元素距离(A) = 总和|a(i)-a(i+1)|从 i=1 到 n-1找到一个子序列 B 使得 Dist(B)+Dist(
我想通过计算每对中所有(多维)点集之间距离的平均值来量化组相似性。 我可以很容易地手动为每对组手动完成此操作,如下所示: library(dplyr) library(tibble) library(
在 OpenXML 中用于指定大小或 X、Y 坐标的度量单位是什么? (介绍)。 将那些与像素匹配是否有意义,如果是这样,那些如何转换为像素? graphicFrame.Transform = new
我想知道是否有人可以帮助我替换过渡层中的值。 如果我尝试: transitionlayer[transitionlayer >= 0.14] = 0.14 : comparison (5) is
我在 firebase 中有一个列表,其中包括地理位置(经度和纬度),并且我想获得距给定坐标最近的 10 个位置。 我正在从 MySQL 过渡,在那里我将计算 SELECT 中的距离, 并在 ORDE
如何在 Python 中根据 2 个 GPS 坐标计算速度、距离和方向(度)?每个点都有纬度、经度和时间。 我在这篇文章中找到了半正矢距离计算: Calculate distance between
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 6 年前。 Improve this ques
我只想使用 matplotlib 标记两条曲线之间发生最大偏差的位置。请帮助我。 垂直距离适用于 Kolmogorov–Smirnov test import numpy as np %matplot
我有一个包含数万行重复项的文件。我想根据行号找到重复项之间的平均时间/距离。 例如:(其中第一列是行号) 1 string1 2 string2 3 string2 4 string1 5 strin
用公式speed=distance/time计算时间 但时间总是0我的输入是 distance=10 和 speed=5 我的输出必须 = 2 #include int main() { in
我正在使用 Levenshtein 算法来查找两个字符串之间的相似性。这是我正在制作的程序的一个非常重要的部分,因此它需要有效。问题是该算法没有发现以下示例相似: CONAIR AIRCON 算法给出
对于一个房地产网站,我需要实现一个允许搜索文本和距离的搜索机制。 当 lat 和 lon 记录在单独的列中时,在 MySQL 表上进行距离计算很容易,但房子往往有 LOT true/false 属性。
是否可以在触发前更改 UIPanGestureRecognizer 的距离?目前的实现似乎在触发前有 5-10 像素的距离余量,我想降低它如果可能的话。 原因是我将 UIPanGestureRecog
我试图找到两个网格之间的偏差。例如在 3d 空间中定义的两组点之间的差异,我计划使用一些 3d 可视化工具来可视化距离,例如QT3d 或一些基于开放式 gl 的库。 我有两组网格,基本上是两个 .ST
所以,我有这个函数可以快速返回两个字符串之间的 Levenshtein 距离: Function Levenshtein(ByVal string1 As String, ByVal string2
我正在尝试用字典创建一个光学字符识别系统。 事实上,我还没有实现字典=) 我听说有一些基于 Levenstein 距离的简单指标,这些指标考虑了不同符号之间的不同距离。例如。 'N' 和 'H' 彼此
我在PostGIS数据库(-4326)中使用经纬度/经度SRID。我想以一种有效的方式找到最接近给定点的点。我试图做一个 ORDER BY ST_Distance(point, ST_GeomF
我想从线串的一端开始提取沿线串已知距离处的点的坐标。 例如: library(sf) path % group_by(L1) %>% summarise(do_union =
我已经编写了这些用于聚类基于序列的数据的函数: library(TraMineR) library(cluster) clustering <- function(data){ data <- s
是否可以设置 UILabel 的行之间的距离,因为我有一个 UILabel 包含 3 行,并且换行模式是自动换行? 最佳答案 如果您指的是“前导”,它指的是类型行之间的间隙 - 您无法在 UILabe
我是一名优秀的程序员,十分优秀!