- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以事情就是这样,我正在尝试让这个例子工作 http://bl.ocks.org/mbostock/1093130所以“更新”函数(每次我在 DOM 上按下按钮时都会调用该函数)使用全新的不同数据集重新绘制图形...我对示例进行了一些修改来尝试此操作。因此,假设我想使用不同的 json 随机提供图表,这些名称存储在数组中:
var array = ["graph.json","graph2.json"];
function reload() {
var rnd = Math.floor(Math.random()*2);
d3.json(array[rnd], function(error, json) {
if (error) throw error;
root = json;
update();
});
}
问题是,当重新绘制图表时,它总是有某种错误,比如属于先前数据集的某个节点,或者类似的东西......所以首先我尝试从容器中删除元素在调用 update() 之前,我在 SO 中以各种可能的方式看到了这一点,但这不起作用,所以(如果我错了,请纠正我)我读了一点,发现 data() 函数使用了一些一种连接方法,这样您就可以根据数据中注册的每个更改或类似的内容不断更新图表,这很酷,但显然不是我需要的。所以我尝试通过 datum() 更改 data() 因为我在某处读到如果您不希望动态更新布局,则应该使用最后一个,并且我删除了 Enter() 和 exit() 调用,因为我读到它们是不需要,因为数据不计算此类函数。代码可以编译但不起作用,没有绘制任何内容。这是我得到的(我只放置了 update() 函数,因为其他一切都没有改变):
function update() {
var nodes = flatten(root),
links = d3.layout.tree().links(nodes);
// Restart the force layout.
force
.nodes(nodes)
.links(links)
.start();
// Update links.
link = link.datum(links, function(d) { return d.target.id; });
link.insert("line", ".node")
.attr("class", "link");
// Update nodes.
node = node.datum(nodes, function(d) { return d.id; });
var nodeEnter = node.append("g")
.attr("class", "node")
.on("click", click)
.call(force.drag);
nodeEnter.append("circle")
.attr("r", function(d) { return Math.sqrt(d.size) / 10 || 4.5; });
nodeEnter.append("text")
.attr("dy", ".35em")
.text(function(d) { return d.name; });
node.select("circle")
.style("fill", color);
}
预先感谢您的帮助。
正如您在上图中看到的,显示的数据与数据集不对应,它应该显示“Mike”、“Mike Jr.”、“Paul”等名称......正如我之前指出的,如果您尝试通过单击根节点来缩回/折叠节点,部分数据已更正(不是根节点上的数据)。
以下是应显示的数据:
//Second graph
{
"name": "Mike",
"children": [
{
"name": "Mike Jr.",
"children": [
{
"name": "Paul",
"children": [
{"name": "Peter", "size": 743}
]
}
]
}
]
}
最佳答案
因此,您可能缺少 D3
中的一些基础知识,即 enter
、update
、exit
模式。 Here's an article迈克·博斯托克 (Mike Bostock) 解释了这个主题,我在下面的帖子中添加了一张图片:
基本思想是,当你想修改你的数据时,你需要再次加入你的数据:
var circles= d3.selectAll("circle").data(nodes, function(d) { return d.id; });
然后使用相关函数来确定发生了什么变化。 D3
在后台跟踪您的数据和 HTML 元素,并找出需要更改的内容。因此,你可以这样做:
circles.enter().append("circle"); // Add circles for new items
circles.exit().remove(); // Remove old circles from the DOM as there's no data for them anymore
请注意,一旦您调用了 enter()
,这些数据项就已经被移动到 update
部分 - 即已经在DOM。这意味着您现在可以执行以下操作:
circles.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; })
最后我应该注意,将 key
函数传递到 .datum()
或 .data()
也很重要。我注意到您已经有了它,您几乎肯定需要将其保留在那里。
关于javascript - 用完全不同的数据重新绘制图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32574473/
1。 Set 的 parallelStream 没有使用足够的线程。 Java8 parallelStream 不能完全并行工作。在我的计算机中,当任务数小于处理器数时,java8 集的 parall
我想将位置发送到 Google Geocoding API,因此我想用 + 替换文本中的任何空格或逗号(因为可以接收)。 例如,所有这些样本应返回 Glentworth+Ireland: Glentw
所以我需要为将要上传的图像文件生成较小的预览,并且我必须在每个文件名的末尾附加“_preview”。 目前我正在这样做: uploadFile.map((file) => { if (fi
我们可以用参数定义类型同义词,这在与实际类型一起使用时效果很好: type MyType t = t String String data Test a b = Test a b f :: MyTyp
给定一个包含一些 TGraphic 后代的 Delphi TPicture,我需要计算像素颜色和不透明度。我认为我必须为每个类提供不同的实现,并且我认为我已经涵盖了 TPngImage。 32 位位图
我正在调试 Powershell 项目。我正在使用 Import-Module 从我的 C# dll 加载 PS 模块,一切正常。尽管调用 Remove-Module 并不会完全卸载模块,因为 DLL
有没有办法在ElasticSearch中要求完整(尽管不一定精确)匹配? 例如,如果一个字段具有术语"I am a little teapot short and stout",我想匹配" i am
我正在尝试根据日期范围连接两个表。 表A格式为: ID CAT DATE_START DATE_END 1 10 2018-01-01 2020-12-31 2
我最近加入了一家公司,在分析他们的环境时,我注意到 SharePoint web.config 的信任级别设置为“完全”。我知道这绝对是一个糟糕的做法,并且希望 stackoverflow 社区能够帮
我构建了一个完全依赖 AJAX 的 php/js 应用程序,因此没有任何内容是静态的。 我正在尝试找到一种方法来转换基于内容的广告,该广告使用 AJAX 交付的内容作为关键字。 Google 的 Ad
我正在尝试根据日期范围连接两个表。 表A格式为: ID CAT DATE_START DATE_END 1 10 2018-01-01 2020-12-31 2
我熟悉 FileSystemWatcher 类,并使用它进行了测试,或者我使用快速循环进行了测试,并在目录中列出了类型文件的目录列表。在这种特殊情况下,它们是 zip 压缩的 SDF 文件,我需要解压
按照 Disqus 上的教程进行操作时,评论框不会呈现。从 disqus 上找到的管理员看来,它的设置似乎是正确的。 var disqus_config = function () { this
是否可以使用 Cython 将 Python 3 应用程序完全编译/链接为可执行格式(当然假设所有使用的模块都是 cythonable)。 我在 Linux 下工作,我希望获得一个依赖性尽可能小的 E
我有一个 C# 控制台应用程序,而不是运行预构建步骤(以获取 NuGet 包)。 当我调试这个时,我想传入一个参数并显示控制台。当我不调试它时,我不想看到它。我什至不希望它在那里闪烁一秒钟。 我找到了
我在 n 个节点上有一个完整的 19 元树。我标记所有具有以下属性的节点,即它们的所有非根祖先都是最年长或最小的 child (包括根)。我必须为标记节点的数量给出一个渐近界限。 我注意到 第一层有一
我正在阅读一篇关于 Java Volatile 关键字的文章,遇到了一些问题。 click here public class MyClass { private int years;
一本书中写道——“如果问题 A 是 NP-Complete,则存在解决 A 的非确定性多项式时间算法”。但据我所知,"is"——NP 完全问题的答案可以在多项式时间内“验证”。我真的很困惑。能否使用非
考虑以下问题: 有N个硬币,编号为1到N。 你看不到它们,但是给出了关于它们的 M 个事实,形式如下: struct Fact { set positions int num_head
我想制作一个包装数字类型的类型(并提供额外的功能)。 此外,我需要数字和包装器可以隐式转换彼此。 到目前为止我有: template struct Wrapper { T value;
我是一名优秀的程序员,十分优秀!