【问题标题】:d3.js graph not displaying on asp.net paged3.js 图形未显示在 asp.net 页面上
【发布时间】:2014-02-25 18:29:22
【问题描述】:

正如标题所说,我无法在我的 asp.NET 页面上的“MainContent”占位符中显示图表。如果我将选择从“MainContent”更改为“body”,则图表会显示在页面底部。

代码sn-p:

var w = 960, h = 500, r = 30, 填充 = d3.scale.category20();

    var force = d3.layout.force()
        .charge(-120)
        .linkDistance(60)
        .size([w, h]);

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

    d3.json("graph.json", function (json) {
        var link = svg.selectAll("line")
            .data(json.links)
          .enter().append("svg:line");

        var node = svg.selectAll("g myCircleText")
          .data(json.nodes)

        var elemEnter = node.enter()
          .append("g")

        elemEnter.append("text")
          //.attr("dx", function (d) { return -20 })
          .text(function (d) { return d.name })

        var circle = elemEnter.append("circle")
          .attr("r", r)
          .style("fill", function (d) { return fill(d.group); })
            .style("stroke", function (d) { return d3.rgb(fill(d.group)).darker(); })
            .call(force.drag);

        force
            .nodes(json.nodes)
            .links(json.links)
            .on("tick", tick)
            .start();

        function tick(e) {

            // Push sources up and targets down to form a weak tree.
            var k = 6 * e.alpha;
            json.links.forEach(function (d, i) {
                d.source.y -= k;
                d.target.y += k;
            });

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

            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; });
        }
    });`

我也无法在每个节点上显示文本,我已经做了很多搜索,但还没有解决任何一个问题。

更新: 我设法让文本显示在我的图表中。但是,文本不会显示在圆圈内,而是显示在 svg 容器的左上角。我已经更新了代码 sn-p 以反映这一点。

更新 2: 我现在将图表显示在正确的位置。解决方案很简单,只需将脚本放在 div 中,然后在脚本中选择所述 div。我还没有弄清楚如何在圆圈内显示文字。

【问题讨论】:

  • 尝试为你正在做的事情提供一个最小的节点工作代码。还请告诉我们您为什么认为这是与 ASP 的链接(不应该,D3.js 纯粹是前端)
  • 上面的代码可以工作,但不显示图表,除非我将选定的 d3 区域更改为“body”。我不确定问题是否与 asp 相关,但我看不出它不会显示在内容占位符中的任何原因。
  • 你能给我们看看ASP生成的HTML吗?
  • 它是一个空页面,除了从 site.master 继承的 3 个占位符(我还没有添加)。你还要我复制html吗?

标签: c# javascript asp.net svg d3.js


【解决方案1】:

问题已解决,希望这对处于类似位置的人有所帮助。这是我的解决方案。我愿意纠正这是否是一个结构良好的解决方案,但它对我有用。

编辑 如果有人知道如何在每行末尾添加标记,我将不胜感激!

代码sn-p:

            var w = 960,
            h = 500,
            r = 35,
            fill = d3.scale.category20();

        var force = d3.layout.force()
            .charge(-500)
            .linkDistance(180)
            .size([w, h]);

        var svg = d3.select("#chart").append("svg:svg")
            .attr("width", w)
            .attr("height", h);

        d3.json("graph.json", function (json) {
            var link = svg.selectAll("line")
                .data(json.links)
              .enter().append("svg:line");

            var circle = svg.append("g").selectAll("circle")
                .data(json.nodes)
                .enter().append("circle")
                .attr("r", r)
            circle.style("fill", "#2185c5")
                .call(force.drag);

            var text = svg.append("g").selectAll("text")
                .data(json.nodes)
                .enter().append("text")
                .attr("text-anchor", "middle")
            text.style("fill", "black")
            text.style("font-weight", "900")
                //.call(force.drag)
                .text(function (d) { return d.name; });

            force
                .nodes(json.nodes)
                .links(json.links)
                .on("tick", tick)
                .start();

            function tick(e) {

                // Push sources up and targets down to form a weak tree.
                var k = 6 * e.alpha;
                json.links.forEach(function (d, i) {
                    d.source.y -= k;
                    d.target.y += k;
                });

                circle.attr("transform", transform);
                text.attr("transform", transform);



                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; });
            }

            function transform(d) {
                return "translate(" + d.x + "," + d.y + ")";
            }
        });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多