Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript D3.js-节点堆叠在图的左上角 太长,读不下去了_Javascript_Json_Xml_D3.js_Queue - Fatal编程技术网

Javascript D3.js-节点堆叠在图的左上角 太长,读不下去了

Javascript D3.js-节点堆叠在图的左上角 太长,读不下去了,javascript,json,xml,d3.js,queue,Javascript,Json,Xml,D3.js,Queue,基于多个XML数据源构建力定向图时,所有节点都堆叠在图的左上角。假设控制台中没有显示错误,并且所有节点和链接都已正确加载到AIK中,那么是什么D3.js错误配置导致了这种行为 处境 基于Mike Bostock的示例,该示例使用XML实现了强制导向布局 ,我正在使用d3.queue加载多个XML文件,并尝试显示力图。当我使用一个XML文件时,图形显示1个节点。但是,当我使用多个XML时,图表会在左上角显示所有节点。控制台不会显示任何错误,并且所有必需的节点和链接对象都已正确加载到AIK中 鉴于

基于多个XML数据源构建力定向图时,所有节点都堆叠在图的左上角。假设控制台中没有显示错误,并且所有节点和链接都已正确加载到AIK中,那么是什么D3.js错误配置导致了这种行为

处境 基于Mike Bostock的示例,该示例使用XML实现了强制导向布局 ,我正在使用d3.queue加载多个XML文件,并尝试显示力图。当我使用一个XML文件时,图形显示1个节点。但是,当我使用多个XML时,图表会在左上角显示所有节点。控制台不会显示任何错误,并且所有必需的节点和链接对象都已正确加载到AIK中

鉴于 编辑:我已将代码缩减到最低限度,以重现问题。 需要四个文件。两个小xml文件,一个json文件和html文件

FileList.json

[
"City.hbm.xml",
"Country.hbm.xml"
]
City.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="nl.sander.mieras.localhost.sakila.City" table="city" catalog="sakila">
        <!-- removed for readability -->
    </class>
</hibernate-mapping>

Country.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="nl.sander.mieras.localhost.sakila.Country" table="country" catalog="sakila">
        <!-- removed for readability -->
    </class>
</hibernate-mapping>

以及显著减少的html文件:

<!DOCTYPE html>
<meta charset="utf-8">
<style>
    .link {
        stroke: #ccc;
    }

    .node {
        fill: #000;
        stroke: #fff;
        stroke-width: 2px;
    }
</style>
<body>
<script src="//d3js.org/d3.v3.min.js"></script>
<script src="//d3js.org/d3-queue.v2.min.js"></script>
<script>
    var width = 960,
            height = 500;

    var radius = d3.scale.sqrt()
            .domain([0, 20000])
            .range([0, 20]);

    var force = d3.layout.force()
            .charge(-240)
            .linkDistance(40)
            .size([width, height]);

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

    d3.json("FileList.json", function (error, fileArray) {
        var q = d3_queue.queue();
        fileArray.forEach(function (d) {
            q = q.defer(d3.xml, d);
        });
        q.await(analyze);
    });

    function analyze(error) {
        if (error) {
            console.log(error);
        }
        // skip 0 it's error variable
        for (i = 1; i < arguments.length; i++) {
            var xml = arguments[i];
            var nodes = [];
            var label = d3.select(xml).select("class").attr("table").charAt(0).toUpperCase() + d3.select(xml).select("class").attr("table").slice(1);
            nodes.push({
                "id": nodes.length,
                "label": label
            });

            console.log(nodes);
            node = nodes[0];
            node.x = width / 2;
            node.y = height / 2;

            force
                    .nodes(nodes)
                    .start();

            var node = svg.selectAll(".node")
                    .data(nodes)
                    .enter().append("circle")
                    .attr("class", "node")
                    .attr("r", 20)
                    .call(force.drag);

            force.on("tick", function () {
                node.attr("cx", function (d) {
                            return d.x;
                        })
                        .attr("cy", function (d) {
                            return d.y;
                        });
            });
        }
    }
</script>

.链接{
冲程:#ccc;
}
.节点{
填写:#000;
冲程:#fff;
笔画宽度:2px;
}
可变宽度=960,
高度=500;
var radius=d3.scale.sqrt()
.domain([0,20000])
.范围([0,20]);
var-force=d3.layout.force()
。收费(-240)
.linkDistance(40)
.尺寸([宽度、高度]);
var svg=d3.选择(“正文”).追加(“svg”)
.attr(“宽度”,宽度)
.attr(“高度”,高度);
d3.json(“FileList.json”,函数(错误,fileArray){
var q=d3_queue.queue();
forEach(函数(d){
q=q.defer(d3.xml,d);
});
q、 等待(分析);
});
函数分析(错误){
如果(错误){
console.log(错误);
}
//跳过0它的错误变量
对于(i=1;i
问题: 使用一个XML作为数据,图形如下所示

使用多个XML作为数据,图形如下所示

代码的哪一部分导致了这种行为?我曾尝试使用硬编码值配置x和y坐标,但无论我如何尝试,节点仅在左上角显示为1/4节点

复制 我试图使用JSFIDLE使问题易于重现,但无论我如何根据来自的答案尝试,都无法让外部资源发挥作用

github gist的完整代码:

和在github上(小目录差异)


是否循环所有xml文件,但每次都覆盖节点数组?这是有意的吗?我想你想建立一个阵列。此外,链接数组的格式似乎不正确。您最终得到一个数组,其中源和目标是字符串,它们应该是节点的数组索引。在不知道您对
链接
节点
的意图的情况下,我无法进一步帮助您。谢谢您的评论@Mark。我不确定是否覆盖了节点数组。我试图尽可能地坚持问题中迈克·博斯托克的例子。关于字符串和链接,我的印象是,只要字符串对象与节点的标签相同,就有可能。我将尝试返工的链接部分。再次感谢您的帮助,普朗克的建议将使我未来的生活更加轻松。ps:链接和节点的目的是基于xml创建一对多和多对一关系。例如:Country.hbm.xml与City有一对多关系。换句话说,来源是国家,目标是城市(一个国家有许多城市)。我将尝试找出如何将正确的节点id作为源和目标连接起来。我已经设法做了很多进一步的工作,剩下的就是对链接进行一些bug修复。有一些双链接对象,我认为这是导致奇怪的绘图@马克:谢谢你再次帮助我更进一步我无法将您的评论作为答案,但您提供的信息确实为我提供了问题的答案。也许你可以把你的评论链接到一个回复帖子里?