更新 D3 圆形包布局

2024-02-09

我正在尝试使用我收到的 json 数据动态更新 d3 圆形包布局。每秒我都会调用 d3.json() 来获取新的 json。我的实现只是在旧可视化下创建一个新可视化,而不是更新现有可视化。我想动态更新现有布局......

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="d3.v2.js"> 
</script>

<script type="text/javascript" src="jquery-1.4.min.js"></script>

<link rel="stylesheet" href="style.css" type="text/css">
<link rel="stylesheet" href="syntax.css" type="text/css">
<link rel="stylesheet" href="pack.css" type="text/css">

</head>

<body>

<div id="chart"> </div>
<script type="text/javascript">

    var width = 960,
        height = 960,
        format = d3.format(",d");

    var pack = d3.layout.pack()
        .size([width - 4, height -4])
        .value(function(d) { return d.size; });

    var vis = null;
    var node = null;

    vis = d3.select("#chart").append("svg")
    .attr("width", width)
    .attr("height", height)
    .attr("class", "pack");
/*      vis.append("g")
    .attr("transform", "translate(2, 2)"); */

    function update(json){


        // Creating the circle packed core
        var gNodes = vis.data([json]).selectAll("g.node")
          .data(pack.nodes);

               //remove old data
        gNodes.exit().remove();


    }


setInterval(function(){
    d3.json("http://10.0.1.4:8080/cluster", function(json) {        
        update(json);
//update the visualization

        vis
          .selectAll("circle")
          .data([json]).selectAll("g.node")
          .data(pack.nodes)
          .attr("class", function(d) { return d.children ? "node" : "leaf node"; })
          .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; })
          .transition()
          .duration(500)
          .attr("r", function(d) { return d.children ? coreSize : d.r; });

        var node = gNodes
          .enter().append("g")
          .attr("class", function(d) { return d.children ? "node" : "leaf node"; })
          .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
        node.append("title")
        .text(function(d) { return (d==null? "": d.name + (d.children ? "" : ": " + format(d.size))); });

        node.append("circle")
        .attr("r", function(d) { return (d==null? 0: d.r); });

        node.filter(function(d) { return (d==null? "" : !d.children); }).append("text")
        .attr("text-anchor", "middle")
        .attr("dy", ".3em")
        .text(function(d) { return (d==null?"":d.name.substring(0, d.r / 3)); });

    });
    }, 1000);

    </script>

看看我的例子here http://jsfiddle.net/VividD/WDCpq/8/.

基本上,有初始加载的代码,其中所有圆圈、工具提示等都被创建并放置在初始位置。同时,布局(包)也已创建。

然后,每次按下按钮时,新数据都会加载到包中,并重新计算包。关键代码在这里:

if (dataSource == 0)
    pack.value(function(d) { return d.size; });
if (dataSource == 1)
    pack.value(function(d) { return 100; });
if (dataSource == 2)
    pack.value(function(d) { return 1 +
             Math.floor(Math.random()*501); });

var data1 = pack.nodes(data);

(我有三个按钮,这就是为什么有 3 个 if)

之后,元素将转换到新位置,并且其属性将根据您的确定进行更改。

以下是一些正在进行转换的图片:

Start:

过渡:

End:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更新 D3 圆形包布局 的相关文章

随机推荐

  • 在 Java 中连接来自 HBase 的两个结果集?

    是否可以连接从 java 中的 hbase 检索的两个或多个结果集 不 不可能加入 JDBC 结果集 但是 您可以获取它们的结果并手动组合它们 如果它们兼容 如果它们属于同一实体 EDIT 如果您只需要组合两个相同类型的列表 您可以这样做
  • Stargazer 回归输出中具有交互作用的排序变量

    我有以下回归 fit1 lt lm y x1 data data fit2 lt lm y x1 x2 data data fit3 lt lm y x3 x1 data data 我希望输出中的解释变量按顺序排列 x1 x2 x3 最后是
  • 将 Numpy 数组复制到内存视图

    我有一个memoryview on a numpy数组并想复制另一个数组的内容numpy使用此数组将其放入其中memoryview import numpy as np cimport numpy as np cdef double 1 t
  • 将字符串解析为公式的库,适用于 Windows Phone 7

    是否有任何 NET 库可以将字符串解析为公式 IE 如果用户输入 2 5 2 图书馆就能计算出结果吗 编辑 最好是能够与 Windows Phone 7 一起使用而无需太多摆弄的东西会很好 NCalc http ncalc codeplex
  • 是什么原因导致“x.asm:(.text+0xd): 对‘y’的未定义引用”?

    我已经很长一段时间没有使用 C 和汇编语言进行编程了 大约 2 年 现在我决定重新开始 但我想做一些更复杂的事情 我考虑过创建一个简单的内核 现在我在网上找到了这个源代码 启动 asm global loader extern kernel
  • 如何向Vuejs传递url参数

    我正在使用 laravel 和 VueJs 构建一个应用程序 我想知道如何以正确的方式将 url 参数 例如用户 slug 或用户 id 传递给 vuejs 以便能够使用该参数发出 ajax 请求 例如 当有人点击链接时 domain co
  • 使用 eclipse 防止向 SVN 提交带有警告的文件

    我有一个大型 Java 项目 有数千个编译警告 我想找到一种方法来防止开发人员提交带有警告的文件 这样所有警告就会逐渐消失 如果我提交一个带有编译错误的文件 Eclipse 会显示一条错误消息 但我找不到任何方法来对警告执行相同的操作 我发
  • Knockout isDirty 示例,使用映射插件中的动态视图模块

    我在用着瑞安 尼迈耶的肮脏旗帜 http www knockmeout net 2011 05 creating smart dirty flag in knockoutjs html 他的方法的一个例子可以在这里看到jsFiddle ht
  • 序列化/反序列化 ClassCastException:x 无法转换为 java.io.ObjectStreamClass

    使用 Java 本机序列化 我间歇性地看到 ClassCastException java lang ClassCastException myCompany MyClass MembershipServiceMethod cannot b
  • 带有 Webflux 的 JDBC - 如何分派到容器线程

    我正在使用 webflux 进行小型概念验证 在我的应用程序的一部分中 我想与一个数据库进行通信 通过 JDBC 该数据库是阻塞的并且不太适合反应器 尽管如此 对于这个概念验证 我正在考虑以下技巧 定义一个专用的线程池 我们称之为DBThr
  • 在 unix 中将文本附加到文件的最后一行

    我想在文本文件最后一行的末尾附加一个冒号字符 而不是在新行中 我的文件末尾已经有一个 n 字符 所以printf gt gt file将冒号换成新行 Using sed s file gt newfile可以 但我的文件大约有 100 MB
  • 如何使用 nbconvert 从 Jupyter Notebook 转换为 HTML

    我正在尝试获取一个使用 nbconvert 的实际示例 我看过很多博客 但我的想法是正确的 如何选择 Jupyter Notebook 所在的文件夹以及 HTML 输出的目标文件夹 使用 Windows 执行此操作的正确语法是什么 谢谢你
  • 以编程方式创建 Word 2010 文档

    每周我都会制作一份 Word 文档 其中包含来自我们网络上各种来源的一些副本 表格和图表 这可能需要一些时间 有时我会犯错误或忘记应该输入的内容 我想尽可能地自动化这个过程 所以基本上我想制作一个Word模板或控制台应用程序 当我打开 运行
  • 当不带任何参数调用脚本时,使用 Python argparse 显示帮助消息

    假设我有一个程序使用argparse处理命令行参数 选项 以下将打印 帮助 消息 myprogram h or myprogram help 但是 如果我在没有任何参数的情况下运行脚本 它不会执行任何操作 我想要它做的是在不带参数调用它时显
  • 如何在 Laravel 4 中为 Route::group 设置正则表达式参数约束?

    对于简单的路线我知道我可以使用where陈述 但是 Route group 前缀中的参数呢
  • Docker 中的 Kibana 和 Elasticsearch 通过标准安装共存

    我正在尝试在我的服务器上设置新版本的 Kibana 和 Elasticsearch 我有一个现有的 K 和 E 使用默认端口 5601 9200 运行 并且无法升级现有数据 我想在 Docker 中运行 K 和 E 的较新版本 7 4 2
  • Flash Builder 4.6 在 Google Chrome 中运行时始终显示空白 html 页面

    Flash Builder 4 6 在 Google Chrome 中运行时始终显示空白 html 页面 我已经尝试了一切 但没有任何作用 请帮忙 简单答案 不要使用 Chrome 来调试 Flash Builder 项目 对于调试 请执行
  • React 类对象方法声明之间的区别?

    我已经看到了在类组件中声明方法的两种方法React Method 1 class someComp extends React Component handleResetShapes e gt e preventDefault this s
  • 布局中的 Zend_Dojo_Form

    我有一个 Zend Dojo Form 我已将其从我的视图 工作正常 移至我的布局 因为它在每个页面上都有用 然而 在布局中 表单不再起作用 没有任何 dijit 元素出现 它的行为就像普通的 HTML 表单一样 这是我的引导程序的相关部分
  • 更新 D3 圆形包布局

    我正在尝试使用我收到的 json 数据动态更新 d3 圆形包布局 每秒我都会调用 d3 json 来获取新的 json 我的实现只是在旧可视化下创建一个新可视化 而不是更新现有可视化 我想动态更新现有布局